Natter: 在 NAT1 下开放公网 TCP 端口

2022-09-12 23:52:08 +08:00
 mikewang

Natter

GitHub: https://github.com/MikeWang000000/Natter


目前公网 IP 越来越稀缺,有些地区已经无法申请公网 IP 了。
不过,在 NAT 1 网络下,我们可以通过一种 “打洞” 的方式,将本地的 TCP 端口暴露至公网上,运行 HTTP 服务等。
经过一番研究,我使用 Python 写了一个工具,起名叫 Natter 。

简洁地说,Natter 的原理就是端口重用:

  1. 由本地端口 A 向外发起 TCP 长连接,维持 NAT 端口映射关系;
  2. 同时监听端口 A ,对外提供服务。

Natter 应当运行于路由器上,因为这样只经过一层 NAT 。不过,正确设置 DMZ 主机,经过多层 NAT 也是 OK 的。

好消息是国内运营商级 NAT 多数已经转为 NAT 1 了,因此开放公网 TCP 端口应该是比较容易的。
目前我在中国移动的家庭宽带上已经成功使用 Natter 开放公网 TCP 端口。

14430 次点击
所在节点    宽带症候群
118 条回复
mikewang
2022-09-13 10:54:38 +08:00
@wym0823 Windows 下直接安装 Python 3 就行
@shikkoku 设置 DMZ ,用局域网机打洞亦可
@Peven 显示成功就代表有戏,有可能我测试服务写的有 bug…比较仓促,欢迎提 issue
1041412569
2022-09-13 11:01:24 +08:00
@mikewang 问问 windows 有类似 iptables 的工具吗
JoeoooLAI
2022-09-13 11:08:19 +08:00
Star 了。。。牛
mikewang
2022-09-13 11:08:20 +08:00
@1041412569 Windows 下可能比较尴尬,后续考虑直接在 Natter 上集成转发功能。
Archeb
2022-09-13 11:09:42 +08:00
挺有意思的,star 了,希望继续完善。
Peven
2022-09-13 11:22:38 +08:00
@mikewang -t 测试倒是行的
qingmuhy0
2022-09-13 11:25:26 +08:00
@ronman 我也有这个疑问。
mikewang
2022-09-13 11:37:52 +08:00
@qingmuhy0 任意一个能保持很长很长 TCP 连接的地址都行。目前 Natter 是向 www.qq.com:80 发起 HTTP Keep-Alive
xixiv5
2022-09-13 11:54:24 +08:00
长链接的话,我 0757 的佛山移动会过段时间 5 分钟左右释放掉 UDP 端口,我经常 L2TP 和远程桌面连接会被断开,tcp 目前还没察觉到
xixiv5
2022-09-13 11:55:44 +08:00
@xixiv5 给人的感觉就是,一个公网 IP 给太多用户使用了 只能这样回收端口了
LGA1150
2022-09-13 12:11:41 +08:00
@acbot altsvc
XiLingHost
2022-09-13 12:14:00 +08:00
@acbot 你说的是 SRV 记录吗
shikkoku
2022-09-13 12:14:05 +08:00
@mikewang #21 我尝试端口转发吧,DMZ 太暴力了。
mikewang
2022-09-13 12:20:30 +08:00
#29 @xixiv5 一般情况下运营商是不会随意断开 TCP 的,否则这个网就几乎没法用了。
Natter 对 TCP 的保活做得算是比较激进的,默认间隔 10 秒就向外发一次数据。
Zy143L
2022-09-13 13:15:12 +08:00
star 奉上
missdeer
2022-09-13 13:23:34 +08:00
家宽 NAT 对称型,残念。。。
Zy143L
2022-09-13 13:31:34 +08:00
联通打洞没问题 但是 http 访问会直接 RESET
发现一个问题就是 NAT 测试不准?有时候测出来是 NAT4
mikeluckybiy
2022-09-13 14:46:01 +08:00
@missdeer 对称型 NAT 和锥形 NAT 有什么区别么?
mikeluckybiy
2022-09-13 14:50:05 +08:00
@Peven 同样问题,-t 测试正常,端口转发不行
acbot
2022-09-13 14:55:32 +08:00
@LGA1150
@XiLingHost 是的,但是浏览器不支持啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/879549

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX