MikeWang000000 / Natter

Expose your TCP/UDP port behind full-cone NAT to the Internet.
GNU General Public License v3.0
1.31k stars 107 forks source link

[new feature]以逗号分隔一串端口 #34

Open zyystudio opened 5 months ago

zyystudio commented 5 months ago

我看文档都是-p后面跟着一个端口比如80,可以增加feature一串逗号分割的端口列表么?

MikeWang000000 commented 5 months ago

当前设计为单个 Natter 进程仅负责单个端口,通过上层管理程序(如 Docker, Supervisor 等等)发起多个 Natter 进程实现多个端口的映射。

这种设计有以下考虑:

  1. -p 选项有多个端口时,-b 必须绑定多个端口,另外其他选项例如 -u UDP 模式,-i 绑定网络接口,-e 通知脚本等等是否共用,还是同样支持分开设置是不确定的,这可能会带来语义上的模糊;
  2. Natter 为了易用和可移植,保持零依赖和单文件脚本的结构,因此尽量做到设计简单,不再引入复杂设计;
  3. 单个 Natter 负责单端口,可以避免某个端口连接出现意外异常,导致所有端口服务中断的风险。

因此推荐使用上层管理程序。比如参考下方 Supervisor 配置:

[program:natter-web]
command         = python3 natter.py -p 80
directory       = /opt/natter
autostart       = true
autorestart     = true

[program:natter-web2]
command         = python3 natter.py -i eth1 -p 8080
directory       = /opt/natter
autostart       = true
autorestart     = true

[program:natter-qb]
command         = python3 natter.py -m iptables -e ./qb.sh
directory       = /opt/natter
autostart       = true
autorestart     = true

使用 Supervisor 还可以单独控制单个端口的启用和关闭,非常灵活。

zyystudio commented 5 months ago

谢谢回复。可以考虑程序生成类似配置文件,保持natter简洁。 请问如果docker里面的话如何像你那样更为优雅的配置下一串逗号分割的端口? 我是unraid的nas上跑docker或者openwrt里的docker都类似。

MikeWang000000 commented 5 months ago

Docker 命令行的使用示例

下方 Docker 参数中:

创建:

docker create --net=host --name=natter_21 nattertool/natter -p 21
docker create --net=host --name=natter_80 nattertool/natter -p 80

启用:

docker start natter_21
docker start natter_80

停止:

docker stop natter_21
docker stop natter_80

查看日志:

docker logs natter_21
docker logs natter_80

删除:

docker rm natter_21
docker rm natter_80

Docker Compose 的示例

使用 docker-compose.yml 配置文件(一般配合目标应用一起写,当然也可以把需要 Natter 映射的端口都写在一起): https://github.com/MikeWang000000/Natter/blob/master/natter-docker/nginx/docker-compose.yml


具体请阅读文档: https://github.com/MikeWang000000/Natter/tree/master/natter-docker

zyystudio commented 5 months ago

多谢回复。有没有更为优雅的方式,比如说开10个端口,这样要10个dockercontainer。能否一个container包含10个端口呀?

MikeWang000000 commented 5 months ago

可以把 Supervisor 打到镜像里面。

zyystudio commented 4 months ago

还不太懂也不太会 等后续 pcdn有需要的