Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature request: easy advanced multi-port mapping #108

Closed
Zerorigin opened this issue Jul 18, 2023 · 1 comment
Closed

feature request: easy advanced multi-port mapping #108

Zerorigin opened this issue Jul 18, 2023 · 1 comment

Comments

@Zerorigin
Copy link
Contributor

Zerorigin commented Jul 18, 2023

现在的高级多端口映射步骤有点过于繁琐,不便于给同一个服务或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]
no_tcp = false
use_udp = true 
@zephyrchien
Copy link
Collaborator

个人认为配置文件语法格式再多,表达能力也终究有限。 把这些语法硬编码进项目也是件费劲的事情..

最好还是请用户自行编写配置文件生成脚本,以满足个性化需求

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants