本项目旨在帮助大家应用 Natter v2,在 Full Cone NAT 网络环境下打开 TCP 端口,获得在 IPv4 可连接的端口,并提供一些 Hook 模板。
Natter 官方交流群组:Q 657590400 | TG
-
网络环境 NAT 为 Full Cone NAT,又称 NAT1。
以下家庭网络环境很有可能是 NAT1 ,例如:
-
使用光猫拨号,但拥有光猫控制权,能够设置 DMZ。
-
光猫为桥接模式,使用路由拨号,拥有路由控制权。
处于以上环境时,使用 natter-check 进行 NAT 检测。
python ./natter-check.py > NatterCheck v2.2.1 Checking TCP NAT... [ OK ] ... NAT Type: 1 Checking UDP NAT... [ OK ] ... NAT Type: 1注意:如果在使用任何代理软件,关闭 TUN 后再进行 NAT 类型检测。
-
-
运营商没有配置防火墙
一般我们无法感知,有条件的用户可以使用
nmap在外部网络对出口IP进行 TCP 全端口扫描,期望结果是不为全部关闭。
PS:由于我的路由限制,暂时只讲解在路由下挂设备上运行 Natter 。
本例讲解光猫桥接,且在 NAS 上运行 Natter 。
-
在准备运行 Natter 的设备上下载 Natter
按照系统架构下载对应的版本:https://github.com/MikeWang000000/Natter/releases
我这里下载
natter.py作为演示。 -
为运行 Natter 的设备配置网络防火墙
-
开启 DMZ(推荐)
进入路由器后台,找到 DMZ 设置,开启 DMZ 并将运行 Natter 的设备的 IP 地址设置为 DMZ 主机。
注意:开启 DMZ 后,运行 Natter 的设备将会暴露在公网,将会有网络安全风险,请做好防范措施。
例如:自托管服务监听地址从
0.0.0.0改到内网地址192.168.1.100;开启了内网网段免密,需要关闭(因为流量经过内网设备转发后即是从内网访问,会跳过认证)等。 -
开启端口转发
进入路由器后台,找到端口转发设置,添加新的端口转发规则,将外部端口映射到运行 Natter 的设备的内部端口。
由于家宽特性,外部端口会周期改变,手动更新很麻烦,建议使用 DMZ 方式,或者后续使用 Hook 自动设置端口转发。
-
-
测试 natter 可用性
首先直接运行 natter.py,查看是否能够成功打洞。
python ./natter.py 2026-06-23 13:44:48 [I] Natter v2.1.1 2026-06-23 13:44:48 [I] Tips: Use `--help` to see help messages 2026-06-23 13:44:55 [I] 2026-06-23 13:44:55 [I] tcp://192.168.1.100:36741 <--Natter--> tcp://101.204.28.18:39206 2026-06-23 13:44:55 [I] 2026-06-23 13:44:55 [I] Test mode in on. 2026-06-23 13:44:55 [I] Please check [ http://101.204.28.18:39206 ] 2026-06-23 13:44:55 [I] 2026-06-23 13:44:55 [I] LAN > 192.168.1.100:36741 [ OPEN ] 2026-06-23 13:44:55 [I] LAN > 192.168.1.100:36741 [ OPEN ] 2026-06-23 13:44:55 [I] LAN > 101.204.28.18:39206 [ OPEN ] 2026-06-23 13:44:55 [I] WAN > 101.204.28.18:39206 [ OPEN ] 2026-06-23 13:44:55 [I]
访问`http://101.204.28.18:39206`查看是否能够正常访问测试页面如果能够访问,就说明当前网络可以正常使用 Natter 进行打洞。
-
为内网服务打洞
接下来我们就要为内网服务打洞了,假设我们要打洞的内网服务是
192.168.1.100:18888,那么我们使用参数-p 18888来指定内网服务的端口(Natter 将会把数据转发到该端口),使用-t 192.168.1.100来指定转发目标的内网 IP 地址。如果运行 Natter 的设备有多张网卡或多个 IP,可以使用
-i指定 Natter 绑定的网卡名或本机 IP 地址;如果不确定,一般可以先省略-i。python ./natter.py -t 192.168.1.100 -p 18888 2026-06-23 14:09:07 [I] Natter v2.1.1 2026-06-23 14:09:13 [I] 2026-06-23 14:09:13 [I] tcp://192.168.1.100:18888 <--socket--> tcp://192.168.1.100:40645 <--Natter--> tcp://101.204.28.18:38010 2026-06-23 14:09:13 [I] 2026-06-23 14:09:13 [I] LAN > 192.168.1.100:18888 [ OPEN ] 2026-06-23 14:09:13 [I] LAN > 192.168.1.100:40645 [ OPEN ] 2026-06-23 14:09:13 [I] LAN > 101.204.28.18:38010 [ OPEN ] 2026-06-23 14:09:14 [I] WAN > 101.204.28.18:38010 [ OPEN ] 2026-06-23 14:09:14 [I]
然后访问 log 中打印的 WAN 地址:
101.204.28.18:38010,如果能够访问到内网服务,就说明打洞成功了。建议将目标指向到 Web 服务,方便访问以检测打通是否成功,如:qBittorrent Web 等。
详细参数:Natter Usage
待补充 (欢迎大家PR~)
如果你已经掌握了 Natter 的基本使用方法,想要进一步探索更多高级功能,可以参考以下内容。
Natter 提供多种途径,将 Natter 端口流量转发至目标端口。
总的来说:
iptables 是最推荐的转发方法。
如果您不是 Linux 用户,您可以选择 socat, gost 或者 socket 方法。
socket 方法,是 Natter 采用的默认转发方法。
| iptables | nftables | socat | gost | socket | |
|---|---|---|---|---|---|
| 操作系统限制 | 仅 Linux | 仅 Linux | 跨平台 | 跨平台 | 跨平台 |
| 保留源 IP | 可 | 可 | 不可 | 不可 | 不可 |
| 转发效率 | 高 | 高 | 中 | 中 | 中 |
| 转发类型 | 内核 | 内核 | 多进程 | 协程 | 多线程 |
| root 权限 | 需要 | 需要 | 无需 | 无需 | 无需 |
| 第三方依赖 | 是 | 是 | 是 | 是 | 否 |
| 依赖最低版本 | 1.4.1 | 0.9.0 | 1.7.2 | 2.3 | - |
| 依赖最佳版本 | ≥ 1.4.20 | ≥ 1.0.6 | ≥ 1.7.2 | ≥ 2.3 | - |
如果运行 Natter 的设备是 Linux 系统,建议使用 iptables 转发,需要使用sudo权限运行 Natter。
详细差异:Forwarding Modes
-
使用 screen 或 tmux 等工具在后台运行 Natter,避免关闭终端导致 Natter 退出。
-
把以下命令加入开机脚本:
echo "sudo-password" | sudo -S nohup /home/zooter/scripts/nas/nat/natter.py -m iptables -p 18888 -i 192.168.1.100 -e /home/zooter/scripts/nas/nat/vscode-hook.py & -
使用 Docker 运行(推荐)
docker run -d \ --net=host \ --cap-add=NET_ADMIN \ --cap-add=NET_RAW \ --restart=always \ --name natter \ nattertool/natter -m iptables -p 18888 -i 192.168.1.100或者使用 Docker Compose
version: '3.8' services: natter: image: nattertool/natter container_name: natter restart: always network_mode: host cap_add: - NET_ADMIN - NET_RAW command: -m iptables -p 18888 -i 192.168.1.100
查看打洞信息
docker logs natter 2026-06-23 07:31:50 [I] Natter v2.2.1 2026-06-23 07:31:57 [I] 2026-06-23 07:31:57 [I] tcp://192.168.1.100:18888 <--iptables--> tcp://192.168.1.100:41177 <--Natter--> tcp://101.204.28.18:40232 2026-06-23 07:31:57 [I] 2026-06-23 07:31:57 [I] LAN > 192.168.1.100:18888 [ OPEN ] 2026-06-23 07:31:57 [I] LAN > 192.168.1.100:41177 [ OPEN ] 2026-06-23 07:31:57 [I] LAN > 101.204.28.18:40232 [ OPEN ] 2026-06-23 07:32:13 [I] WAN > 101.204.28.18:40232 [ OPEN ] 2026-06-23 07:32:13 [I]
Natter 支持Hook调用,即在打洞成功后执行脚本。
利用这一点,我们可以在打洞成功后自动登录到路由器并设置端口转发,实现一些自动化功能,例如:自动设置端口转发、自动修改 qBittorrent 传输端口、配置消息推送等。
以下提供一些使用模板,仅建议愿意折腾的小伙伴使用,欢迎大家 PR!
-
适用于具有 UCI 系统的 OpenWRT 路由器,自动设置端口转发。
-
自动修改 qBittorrent 传输端口,提高连通性。

