Config入门

一般情况下,每个 配置文件里都要写一个 Config 块, 程序 读取解析这个 Config 后就运行。

让我们创建一个 local.lua 文件,内容如下:


Config = {
    inbounds = {},
    outbounds = {},

}

inbounds 是指 入站, 即 在这里设置 本地监听 的端口

outbounds 是指 出站, 即 在这里设置 远程服务器 的地址

因为可能有多个 入站和出站,所以 inbounds 和 outbounds 都是 列表, 也就是说,下面的示例分别有两个入站 和 三个出站


Config = {
    inbounds = { {}, {}}
    outbounds = { {}, {}, {}}
}

直接看 最简配置, 还是一步步学起?你说的算~

inbounds/outbounds

inbounds/outbounds 是 inbound/outbound 的列表:

inbounds = { inbound1, inbound2, ... }

inbound/outbound

每个 inbound/outbound 都由 一个 chain 和一个 tag 组成:

{
    chain = {},
    tag = "listen1"
}

chain

每个 chain 都是一个 列表:

chain = { {}, {}, {}, ..}

它是 MapConfig 的列表.

如果在 inbound 中,则它是 InMapConfig 的列表, 如果在 outbound 中,则它是 OutMapConfig 的列表

每一种 MapConfig 都是一个 由 大括号 括起来的 table

我们先学简单的几个 Config

InMapConfig初探

先学两种 InMapConfig,Listener 和 Sock5Http

Listener

下面配置 监听 本地 tcp 端口 10800:

{
    Listener = { listen_addr = "0.0.0.0:10800" }
}

Sock5Http

Sock5Http 可读取 socks5 协议 和 http代理 协议

{
    Socks5Http = {}
}

合体

知道了 Listener 和 Sock5Http 这两个 InMapConfig 后,我们把它 合起来放到一个 chain 中:

chain = {
    {
        Listener = { listen_addr = "0.0.0.0:10800" }
    },
    {
        Socks5Http = {}
    }
}

再把它包起来变成一个 inbound :

{
    tag = "listen1",
    chain = {
        {
            Listener = { listen_addr = "0.0.0.0:10800" }
        },
        {
            Socks5Http = {}
        }
    }
}

再把它放入 Config 的 inbounds 中, 作为 目前 inbounds 唯一的 inbound:

Config = {
    inbounds = {
        {
            tag = "listen1",
            chain = {
                {
                    Listener = { listen_addr = "0.0.0.0:10800" }
                },
                {
                    Socks5Http = {}
                }
            }
        }
    },

}

这样 我们第一个 inbounds 配置就做好了!

OutMapConfig初探

先学 最简单的 OutMapConfig Direct:

Direct

Direct 是最简单的 OutMap! 它就是直连:

{ Direct = {} }

合体

它 Direct 块 放入 chain 中:

chain = {
    { Direct = {} },
}

再把它放入 Config 的 outbounds 中:

Config = {
    outbounds = {
        {
            tag = "direct",
            chain =  {
                { Direct = {} },
            }
        }
    },

}

再和 上面 inbounds 结合起来,第一个能用的 lua配置就做好了:

Config = {
    inbounds = {
        {
            tag = "listen1",
            chain = {
                {
                    Listener = { listen_addr = "0.0.0.0:10800" }
                },
                {
                    Socks5Http = {}
                }
            }
        }
    },
    outbounds = {
        {
            tag = "direct",
            chain =  {
                { Direct = {} },
            }
        }
    },
}

使用 lua 变量

上面写法是不是太长了?不要急!我们使用lua不是为了让配置变复杂,而是让它变简单,方法就是用变量替换!

我们把每个有意义的子块都给个 变量名

local direct = { Direct = {} }
local listener = {  Listener = { listen_addr = "0.0.0.0:10800" }  }
local sock5http = { Socks5Http = {} }

(local 的用法不在此解释,照抄就行)

如此,整个 配置就变成了


local direct = { Direct = {} }
local listener = {  Listener = { listen_addr = "0.0.0.0:10800" }  }
local sock5http = { Socks5Http = {} }

Config = {
    inbounds = {
        {
            tag = "listen1",
            chain = {   listener,  sock5http  }
        }
    },
    outbounds = {
        {
            tag = "direct",
            chain =  {  direct,  }
        }
    },
}

最简配置

再替换一次:

local direct = { Direct = {} }
local listener = {  Listener = { listen_addr = "0.0.0.0:10800" }  }
local sock5http = { Socks5Http = {} }

local listen_inbound = { tag = "listen1", chain = { listener, sock5http } }
local direct_outbound = { tag = "direct", chain =  { direct, } }

Config = {
    inbounds = { listen_inbound },
    outbounds = { direct_outbound },
}

怎么样,是不是一下子就变得 清晰起来了?爽!先来个 high-five 吧!

配置您电脑的 系统代理 为 socks5或 http, 指向 127.0.0.1:10800

然后运行

./ruci_cmd -c local.lua

windows:

ruci_cmd.exe -c local.lua

测试成功!

下一步,学习 各个 MapConfig 的写法 或者直接开始学 各个 route 的写法