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 354 天前 1
好东西
|
2
nullptrexp 354 天前 1
好东西
|
3
heiher 354 天前 via Android 1
好东西,感谢作者
|
4
cy18 354 天前 1
如果有办法在 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 354 天前 3
比我强多了,py 网络我只会用 requests..
|
7
GoodRui 354 天前 via Android 1
看起来不错啊!支持大佬~
|
8
SenLief 354 天前 1
没有公网的能不能用?好像也不是 NAT1
|
10
zhcode 354 天前 1
感谢大佬,一直在用
|
11
jqtmviyu 354 天前 1
话说有了 v6 后是不是对这类打洞软件没那么大需求了.
|
12
Zy143L 353 天前 via Android 1
没考虑加入 upnp 吗?
可以跳过 dmz |
13
zhengrt 353 天前 1
好东西,支持一下
|
15
iijboom 353 天前 1
看起来 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 353 天前 1
建议添加一个功能:主动上报端口和 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 |
23
D2h0VL89HMAU417B 352 天前 1
先收藏
|
24
Misakax 352 天前 1
一个 docker 能转发多个端口吗🤣
|
25
24en 352 天前 1
好东西,感谢作者
|
26
MFWT 352 天前 1
用了很久 natter 了,继续支持!
|
27
Ipsum 352 天前 1
现在运营商这么大方了?直接 tcp 全锥了?
|
29
mikewang OP #27 @thank243577 目前还是挺常见的,除了某些地区因为治理 PCDN 的原因故意改成 NAT 4 除外。
|
30
MFWT 351 天前 1
@thank243577 广东移动,不论是新增还是存量,都能拿到 FullCone v4 + /60 v6
|
31
HandSonic 335 天前 via iPhone
udp 无法使用,所有 STUN 服务器都超时
|
35
lzy2998157572 326 天前
@MFWT #30 广州移动是/64 v6
|