使用 Natter 脚本在无公网 IP 环境上实现端口映射

注意

在开始操作前,您需要拥有网络技能,并且已经确认,您所在的网络环境是全锥型的 NAT,否则您无法继续。

建议在开始前,先去光猫/路由器里设置一下 DMZ IP,然后再拿 NAT Type Tester 测试一下 NAT 类型。

另外,请注意,映射出去的端口是动态的,无法指定。

1、前言

由于 IPv4 地址池耗尽的原因,现在,三大运营商基本上不会给家庭宽带公网 IP 了,这导致有很多需要公网 IP 用的服务,都用不了。

一般情况下,除了和运营商再去要公网 IP,或者是使用内网穿透程序,基本上没用其它的方法。

现在呢,有新东西可以玩了,它就是:Natter。

2、Natter 的好处有啥?

和内网穿透相比,Natter 不需要内网穿透服务器,不需要经过服务器的中转

3、什么是 NAT ?

NAT,是 Network Address Translation 的缩写,翻译为网络地址转换。是一种将私有网络地址转换为公有网络地址的技术,目的是为解决 IPv4 地址不足的问题。其解决方案是将多个设备处于一个局域网内,通过共享一个公有网络 IP 地址,以访问外部网络。

若要了解 NAT 的更多信息,请自行上网搜索 NAT 或是 网络地址转换

4、什么是 Fullcone NAT?

所有从同一个内网的 IP 或端口,发送出来的请求都会被映射到同一个外网的 IP 或端口,且任何一个外网主机都可以通过访问映射后的公网地址,实现访问位于内网的主机设备功能。外网主机可以主动连接内网主机。

而 Natter 就使用了 Fullcone NAT 的这个特性。

5、Natter 是什么来头 ?

Natter 是 Github 用户 MikeWang000000 编写的一个 Python 脚本程序,主要用途就是来在全锥型 NAT(Fullcone NAT)的网络环境下,通过一种 “打洞” 的方式,将本地网络的端口公开到至互联网上,比如公开 Minecraft 我的世界服务器。

6、原帖

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

7、可使用 Natter 的操作系统

只要是能用 Python 的系统就都能用这个脚本,Windows、Linux、Mac、Android 都可以用,BSD 我不太清楚,自行测试吧。

8、使用方法

在使用之前,需要满足这些条件。

  • 全锥 Fullcone 类型的 NAT 的网络环境
  • 设备可以安装和运行 Python
  • 在路由器或光猫的后台管理页面设置 DMZ IP 到要使用 Natter 脚本的设备。
  • 重中之重:按照本文的步骤,都正确无误设置完毕后,保持程序的运行。

以上条件都满足后,你可以使用 Natter 脚本。默认是测试模式,测试模式下 Natter 会自动尝试打洞,如果没问题,脚本返回这些内容
以下是示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
2023-11-01 01:00:08 [I] Natter
2023-11-01 01:00:08 [I] Tips: Use `--help` to see help messages
2023-11-01 01:00:12 [I]
2023-11-01 01:00:12 [I] tcp://192.168.1.100:13483 <--Natter--> tcp://203.0.113.10:14500
2023-11-01 01:00:12 [I]
2023-11-01 01:00:12 [I] Test mode in on.
2023-11-01 01:00:12 [I] Please check [ http://203.0.113.10:14500 ]
2023-11-01 01:00:12 [I]
2023-11-01 01:00:12 [I] LAN > 192.168.1.100:13483 [ OPEN ]
2023-11-01 01:00:12 [I] LAN > 192.168.1.100:13483 [ OPEN ]
2023-11-01 01:00:12 [I] LAN > 203.0.113.10:14500 [ OPEN ]
2023-11-01 01:00:13 [I] WAN > 203.0.113.10:14500 [ OPEN ]
2023-11-01 01:00:13 [I]

(以上的 WAN IP 仅为示例)

在测试模式下,如果四个 IP 都是 OPEN 开放状态,那么就复制 WAN 那一行的 IP 和端口,粘贴到浏览器,看看是不是返回了这些内容:

1
2
3
It works!
--------
Natter

提示

如果你能打开并显示上面的内容,就表示成功。
试试用其他设备在不同的网络下打开,比如蜂窝网络。
请保持 Natter 程序处于运行状态,关闭程序会让公网端口关闭,导致连接失败。

如果你用的是 Windows 系统,并且确定网络是全锥 Fullcone NAT,但 WAN 端口还是关闭状态,那么先关掉防火墙,两个都关闭,然后再试试看。

9、其他示例

用我的世界服务器举个例子吧,先打开 CMD,然后打这个命令

1
natter.py -t 127.0.0.1 -p 25565 

提示:如果是公开本机的端口,直接写 natter.py -p 25565 就可以了。如果要公开其他局域网的 IP 的端口,那么就这样写,比如:natter.py -t 192.168.1.2 -p 25565

四个 IP 和端口状态都是 OPEN 后,复制 WAN IP 那行的 IP 地址和端口,给你的好友或是其他人,别人就可以连接上你了

其他用法,可以使用 natter.py --help 命令查看更多使用方式。

10、详见和下载

10.1、详情请见

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

10.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

11、其他

听说国外有些的地方的宽带也有 CG-NAT 大内网(只是听说,但不一定是),但如果是全锥 NAT 的话,也可以试试。


使用 Natter 脚本在无公网 IP 环境上实现端口映射
https://marshmallowlands.github.io/2025/03/30/2025-01/Natter/
作者
Marshmallowlands
发布于
2025年3月30日
许可协议