Closed Zerorigin closed 10 months ago
现在的高级多端口映射步骤有点过于繁琐,不便于给同一个服务或IP映射多个端口(需要编写冗长的配置段) 可以通过增加几个配置项来做简化
[[endpoints]] listen_addrs = ["0.0.0.0", "[::]"] remote_addrs = ["a.a.a.a", "b.b.b.b"] # 或 remote_addr = "a.a.a.a" listen_ports = ["80", "8080"] remote_ports = ["8080", "80"]
在程序添加配置时,对这四个键值对的值是否存在做下判断,如果存在则忽略原本的一对一映射,转而使用“多端口对多端口”或“多端口对单端口”的映射逻辑 如果有意支持远端负载均衡,则 remote_addrs 是字符串数组,否则使用 remote_addr 字符串代替(一般比较少人需要负载均衡,故不一定需要实现)
若 remote_ports 的端口数等于1,则进行 N 对 1 端口映射,将 listen_addrs 所列所有 IP 地址指定的 listen_ports 都映射到 remote_addr(s) 唯一的远端端口上 若 remote_ports 的端口数等于 listen_ports 的端口数,则进行一对一的端口映射,将 listen_addrs 所列所有 IP 地址指定的 listen_ports 按配置文件手动编写的数组阅读顺序,一一映射到 remote_addr(s) 所列远端端口上(此例为:80->8080,8080->80) 若 remote_ports 的端口数不等于上述两个值,则报错提示
当然可以借鉴 docker,进行扩展: 例如: 监听端口 ["80", "8080/tcp", “10001-10005/tcp”] 则表示监听的是 TCP 端口,所对应的映射端口 ["80", "8080", "10001-10005"] 也就默认都是 TCP 端口 或者 ["80", "843/udp"] 则映射到 [“80/tcp”, "843/udp"] 亦或 ["443/both"] 则同时进行 443/tcp -> 443/tcp 和 443/udp -> 443/udp 映射
这样可以在配合network使用时,方便的配置哪些 TCP/UDP 端口需要映射,而不是全部映射
network
[network] no_tcp = false use_udp = true
个人认为配置文件语法格式再多,表达能力也终究有限。 把这些语法硬编码进项目也是件费劲的事情..
最好还是请用户自行编写配置文件生成脚本,以满足个性化需求
现在的高级多端口映射步骤有点过于繁琐,不便于给同一个服务或IP映射多个端口(需要编写冗长的配置段) 可以通过增加几个配置项来做简化
在程序添加配置时,对这四个键值对的值是否存在做下判断,如果存在则忽略原本的一对一映射,转而使用“多端口对多端口”或“多端口对单端口”的映射逻辑 如果有意支持远端负载均衡,则 remote_addrs 是字符串数组,否则使用 remote_addr 字符串代替(一般比较少人需要负载均衡,故不一定需要实现)
若 remote_ports 的端口数等于1,则进行 N 对 1 端口映射,将 listen_addrs 所列所有 IP 地址指定的 listen_ports 都映射到 remote_addr(s) 唯一的远端端口上 若 remote_ports 的端口数等于 listen_ports 的端口数,则进行一对一的端口映射,将 listen_addrs 所列所有 IP 地址指定的 listen_ports 按配置文件手动编写的数组阅读顺序,一一映射到 remote_addr(s) 所列远端端口上(此例为:80->8080,8080->80) 若 remote_ports 的端口数不等于上述两个值,则报错提示
当然可以借鉴 docker,进行扩展: 例如: 监听端口 ["80", "8080/tcp", “10001-10005/tcp”] 则表示监听的是 TCP 端口,所对应的映射端口 ["80", "8080", "10001-10005"] 也就默认都是 TCP 端口 或者 ["80", "843/udp"] 则映射到 [“80/tcp”, "843/udp"] 亦或 ["443/both"] 则同时进行 443/tcp -> 443/tcp 和 443/udp -> 443/udp 映射
这样可以在配合
network
使用时,方便的配置哪些 TCP/UDP 端口需要映射,而不是全部映射