使用 Natter 在无公网 IP 的网络上实现端口映射
最近更新日期:2025 年 5 月 7 日,21:22。
注意
操作前需要确认,网络环境是全锥型 NAT,否则无法继续。
提醒:移动宽带可用,广电宽带不可用。移动的蜂窝网络,仅限 CMWAP APN 可用(有些地区似乎不用配置代理服务器地址也能上网)。具体情况自行测试。不要怕烦,一步一步来,实际上很简单。
首先,去光猫或路由器里后台管理页面设置一下 DMZ IP 到使用 Natter 的主机,然后拿 NAT Type Tester 测试一下 NAT 类型。请注意,映射出去的端口是动态的,是由运营商的 NAT 设备随机分配的,无法指定。
其他疑问
此工具不需要 “想要连接到你” 的人拥有这个工具,Natter 只在服务端部署,客户端不需要额外使用任何软件。
1、前言
由于 IPv4 地址池耗尽的原因,现在,三大运营商基本上不会给家庭宽带公网 IP 了,这导致有很多需要公网 IP 用的服务,都用不了。
一般情况下,除了和运营商要公网 IP,或是使用内网穿透程,基本上没其它的方法。
现在呢,有新东西可以玩了,那就是 Natter。
2、Natter 的好处有啥?
和内网穿透相比,Natter 不需要内网穿透服务器,不需要经过服务器的中转
3、什么是 NAT ?
请访问下面的链接,查看百科的详细介绍:
百度百科 - NAT
https://baike.baidu.com/item/nat/320024
维基百科 - NAT
https://zh.wikipedia.org/zh-hans/网络地址转换
4、什么是 Fullcone NAT?
所有从同一个内网的 IP 或端口,发送出来的请求都会被映射到同一个外网的 IP 或端口,且任何一个外网主机都可以通过访问映射后的公网地址,实现访问位于内网的主机设备功能。外网主机可以主动连接内网主机。
而 Natter 就使用了 Fullcone NAT 的这个特性。
5、Natter 的来头
Natter 是 Github 用户 MikeWang000000 编写的一个 Python 脚本程序,主要用途就是来在全锥型 NAT(Fullcone NAT)的网络环境下,通过一种 “打洞” 的方式,将本地网络的端口公开到至互联网上,比如公开 Minecraft 我的世界服务器。
6、原帖、详情和下载
6.1、详情请见
Github:
https://github.com/MikeWang000000/Natter
位于 V2EX 的原帖
https://global.v2ex.co/t/879549
( 如果您位于中国大陆,可能无法访问。在帖子中,作者也说明了 Natter 的工作原理 )
6.2、下载脚本文件
此程序为 Python 脚本,使用之前请提前在计算机中准备好 Python 解释器环境。
电脑浏览器建议右键【链接另存为】
直接下载脚本:
Github: https://raw.githubusercontent.com/MikeWang000000/Natter/refs/heads/master/natter.py
( 如果您在中国大陆,可能无法访问 )
GHPROXY 镜像站:(如果 Github 无法访问就试试这个)
https://ghfast.top/https://raw.githubusercontent.com/MikeWang000000/Natter/refs/heads/master/natter.py
jsdelivr 镜像站:(如果 Github 无法访问就试试这个)
https://fastly.jsdelivr.net/gh/MikeWang000000/Natter@master/natter.py
7、可使用 Natter 的操作系统
只要是能用 Python 的系统就都能用这个脚本,Windows、Linux、Mac、Android 都可以用,BSD 我不太清楚,自行测试吧。
8、使用方法
在使用之前,需要满足这些条件。
- 全锥 Fullcone 类型的 NAT 的网络环境
- 设备可以安装和运行 Python
- 在路由器或光猫的后台管理页面设置 DMZ IP 到要使用 Natter 脚本的设备。
- 重中之重:按照本文的步骤,都正确无误设置完毕后,保持程序的运行。
如果你使用 Windows 系统,我建议把下载下来的 natter.py 文件,放到系统盘的 Windows 文件夹,方便以后随时调用,比如用 Windows+R 键,就像这样:
以上条件都满足后,你可以使用 Natter 脚本。默认是测试模式,测试模式下 Natter 会自动尝试打洞,如果没问题,脚本返回这些内容
以下是示例:
1 |
|
(以上的 WAN IP 仅为示例)
在测试模式下,如果四个 IP 都是 OPEN 开放状态,那么就复制 WAN 那一行的 IP 和端口,粘贴到浏览器,看看是不是返回了这些内容:
1 |
|
提示
如果能打开,就表示成功。试试用其他设备,在不同网络下打开,比如蜂窝网络。
一定要保持 Natter 程序是正在运行的状态,关闭程序会导致连接失败。
如果你用 Windows 系统,建议先关掉防火墙,两个都关,然后再去试,不然会有些怪问题。
9、其他示例
正式投入实战了,对吧?接着往下看。
用我的世界服务器举个例子吧,我们起一个新的 CMD 窗口,然后打这个命令
1 |
|
提示:如果想公开机器自身的的端口,直接写 natter.py -p 25565
就可以了,可省略 -t
参数。
如果要公开其他局域网的 IP 的端口,比如公开 192.168.1.2 的我的世界服务器端口,那就这样写:
1 |
|
很简单,对吧?
四个 IP 和端口状态都是 OPEN 后,复制 WAN IP 那行的 IP 地址和端口,给你的好友或是其他人,别人就可以连接上你了
其他用法,可以使用 natter.py --help
命令查看更多使用方式。
调试模式下的测试模式,可以使用 natter.py -v
命令查看更多的输出,也包含了来访者的 IP。
10、来源 IP 问题(只在乎能通的话,可忽略)
在 Windows 系统上,这个问题不好搞,如果要查看,那倒可以用杀毒软件查看 python.exe 建立的连接,或者你使用系统自带的 “资源监视器” 工具来查看 python.exe 的连接。(文章作者:至少能查看来源 IP,比 FRP 内网穿透强多了)
要么你把模式调成 gost 转发,但需要提前下好 gost 转发器可执行文件并放进系统文件夹。
(99% 的人用不到,可略过,需要 Linux 系统的 Root 权限)
还有一种法子,就是在 Linux 系统上跑 Natter,然后开启系统的 IP 转发,然后转发方式是 iptables,这种是不会丢失源地址的(对于应用程序来说),也只有这种方式不会丢失。
另外一种,就是映射到其他主机上的端口,这种就需要把 “其他主机” 上的网关,设置为运行 Natter 设备的机器,这第二种法子,我推荐在软路由上搞。
如果你只在乎能通,不考虑别的,那么略过就行了。
11、二级路由多层 NAT 嵌套问题
如果你的网络是光猫拨号,而且,有二级路由器 NAT 的话,需要自上而下都要设置一遍 DMZ。
举个例子,如果你的网络是这种接法:
光猫 → 路由器 → 想用 Natter 的主机
那么就先去光猫超级管理员账号后台管理页面,设置 DMZ IP 到下游路由器的 WAN IP,然后,在到路由器后台设置 DMZ IP 到要用 Natter 的主机。
这样就可以正常使用了
很简单,是吧?
12、示例截图
一些无关紧要的示例截图。
13、其他
我不是此工具的开发者,我只是这个工具的受益者而已(请看第 5 条),不要来问我改造 Natter 的事情。
我只是总结一下,发一篇文章而已。更多玩法请自行发挥。
另外,听说国外有些地方的宽带也有 CG-NAT 大内网,不提供公网 IP,只是听说,但不一定是,但如果是全锥 NAT 的话,也可以试试。
有任何问题可以先去 Github 看看那个项目,实在不会了再来找我。