GitHub: https://github.com/MikeWang000000/Natter
Natter 是一个 “TCP 打洞” 工具。它可以 NAT 1 网络下的 TCP 端口直接暴露至公网,达到公网 IP 相似效果。
详细介绍在这里:/t/879549
今年比较忙,先前规划的新版 Natter ,今天终于发布了第一版候选版本:v2.0.0-rc1
Natter v2 完全重写了之前的代码,改动也比较大,主要目的是适配 Docker 。
Natter v2 取消了配置文件的设计,并且重新设计了命令行参数,单个实例仅负责单个端口。
这样仅通过 docker-compose.yml
就能调整所有配置,无需再去改 Natter 的配置文件。
快速开始:
docker run --net=host --rm nattertool/natter
打洞成功,则可以访问公网端口打开测试页面。
快速启动一个 Nginx + Natter 的服务:
git clone 'https://github.com/MikeWang000000/Natter' cd Natter/natter-docker/nginx docker compose up
快速启动一个 qBittorrent + Natter 的服务(与公网同等体验,qB 显示公网绿色标识):
git clone 'https://github.com/MikeWang000000/Natter' cd Natter/natter-docker/qbittorrent docker compose up
Docker 中使用 Natter 的详细文档:
https://github.com/MikeWang000000/Natter/blob/master/natter-docker/README.md
欢迎大家测试找 bug ~
同时感谢以下项目使用不同语言实现了 Natter 相似的功能:
供大家参考。
1 super5xy 2023-12-31 15:26:14 +08:00 ![]() 好东西 |
2 nullptrexp 2023-12-31 16:38:13 +08:00 ![]() 好东西 |
![]() | 3 heiher 2023-12-31 17:47:55 +08:00 via Android ![]() 好东西,感谢作者 |
![]() | 4 cy18 2023-12-31 20:01:15 +08:00 ![]() 如果有办法在 dns 记录里面把端口信息加进去,或者弄个 url 跳转之类的,那用起来就方便了。 |
![]() | 5 mikewang OP @cy18 SRV 记录端口信息参考: https://github.com/MikeWang000000/Natter/tree/master/natter-docker/minecraft URL 跳转参考: https://github.com/MikeWang000000/Natter/tree/master/natter-docker/nginx-cloudflare 这两个示例都是 CloudFlare API 的实现。 |
6 chenqh 2023-12-31 20:22:05 +08:00 ![]() 比我强多了,py 网络我只会用 requests.. |
![]() | 7 GoodRui 2023-12-31 22:05:47 +08:00 via Android ![]() 看起来不错啊!支持大佬~ |
![]() | 8 SenLief 2023-12-31 22:13:19 +08:00 ![]() 没有公网的能不能用?好像也不是 NAT1 |
![]() | 10 zhcode 2024-01-01 00:30:35 +08:00 ![]() 感谢大佬,一直在用 |
![]() | 11 jqtmviyu 2024-01-01 04:15:41 +08:00 ![]() 话说有了 v6 后是不是对这类打洞软件没那么大需求了. |
![]() | 12 Zy143L 2024-01-01 08:36:13 +08:00 via Android ![]() 没考虑加入 upnp 吗? 可以跳过 dmz |
![]() | 13 zhengrt 2024-01-01 10:36:38 +08:00 ![]() 好东西,支持一下 |
![]() | 14 mikewang OP #11 @jqtmviyu 是的,不过像 BT 等有 v4 端口效果还是更好一些。v6 全球普及之后就用不着打洞了。 |
15 iijboom 2024-01-01 12:15:17 +08:00 ![]() 看起来 nat4 不支持么,不太确定 |
![]() | 16 mikewang OP #12 @Zy143L DMZ 是懒人做法(作为示例),实际可以用 -b 选项绑定端口,然后路由器进行单个转发。 加上 UPnP 支持之前考虑过,不过 UPnP 不一定可靠,会导致一些问题难以排查; 另一点考虑,就是实现协议并且维护状态,会使得 Natter 代码膨胀的比较厉害。( Natter 的理念是不引入第三方包,各种协议全部自己实现) |
![]() | 17 mikewang OP ![]() #15 @iijboom NAT 4 不支持。 原理上,NAT 4 意味着传出连接对特定 IP 映射特定端口,因此没法反过来从其他 IP 接受传入连接。 所以需要通过桥接/DMZ 方式提升 NAT 等级为 NAT 1 。如果运营商提供的网络就是 NAT 4 ,那就没有办法了。 |
19 rtz 2024-01-01 19:26:46 +08:00 ![]() 建议添加一个功能:主动上报端口和 IP 在命令行指定一个 http(s)链接,每次 IP 或者端口变化都向这个链接提交最新变化 这个功能是我之前在老的 Natter 上自己加的,配合 CF Worker 自动生成 QuantimultX 的订阅信息 |
![]() | 20 mikewang OP @rtz 当前版本支持 -e /path/to/script.sh 调用通知脚本,通知脚本可以自己定制,比如使用 curl 请求。 不知到这样是否能满足需求。 相关文档: https://github.com/MikeWang000000/Natter/blob/master/docs/script.md |
![]() | 22 sunnysab 2024-01-02 10:28:36 +08:00 ![]() @jqtmviyu 校园网环境,openwrt 发现 IPV6 中继总是配不好,到头来还得打洞。op 上的 upnpd 貌似又不支持 v6 ,头疼着呢。。 |
![]() | 23 D2h0VL89HMAU417B 2024-01-02 13:41:56 +08:00 ![]() 先收藏 |
![]() | 24 Misakax 2024-01-02 14:58:50 +08:00 ![]() 一个 docker 能转发多个端口吗 |
![]() | 25 24en 2024-01-02 17:43:57 +08:00 ![]() 好东西,感谢作者 |
![]() | 26 MFWT 2024-01-02 21:45:12 +08:00 ![]() 用了很久 natter 了,继续支持! |
![]() | 27 Ipsum 2024-01-02 23:26:52 +08:00 ![]() 现在运营商这么大方了?直接 tcp 全锥了? |
![]() | 29 mikewang OP #27 @thank243577 目前还是挺常见的,除了某些地区因为治理 PCDN 的原因故意改成 NAT 4 除外。 |
![]() | 30 MFWT 2024-01-03 09:28:37 +08:00 ![]() @thank243577 广东移动,不论是新增还是存量,都能拿到 FullCone v4 + /60 v6 |
31 HandSonic 2024-01-20 02:03:04 +08:00 via iPhone udp 无法使用,所有 STUN 服务器都超时 |
35 lzy2998157572 2024-01-28 13:48:19 +08:00 @MFWT #30 广州移动是/64 v6 |