又一个 tcp 打洞工具,参考了 Natter 和 natmap
也就是能在 nat1 的情况,在没有公网 ip 时,打开公网 ip 的 tcp 端口,可以让其他人直接访问到。
和以上两个工具相同。不过不同的是,这个工具集成了 upnp 的功能,能在路由上设置端口映射,增加打洞的成功率,适合在其他设备而非路由器上使用。
首先可以检测当前网络是否支持打洞。
natupnp -t
将会在 8086 上监听,然后打印公网地址和端口,可以尝试使用其他网络用浏览器访问,如果显示 ok 则说明打洞成功。
对于运行 natupnp 的主机,需要开放 -p 指定的端口, -p 8080
8080 就是需要开放的端口了。
对于路由器,分三种情况。
这种情况下,光猫管理界面的 ip,和连接路由器的主机的 ip 在一个网段内。
此时,需要在光猫上开启 upnp。一般在 高级配置-日常应用-upnp 配置,可能需要光猫的超级管理员密码,通常能在网上搜到。
这种情况下的光猫管理界面 ip,和连接路由器的设备的 ip 不在一个网段。
在光猫上设置 DMZ 主机,通常在 高级配置-NAT设置-DMZ配置,在其中配置路由器的 ip 或者 mac 地址,并把路由器的 upnp 功能开启(通常默认是开启)
应该不需要额外的操作即可成功打洞,若不成功,可以检查 upnp 功能是否开启。
和 natmap 一样,支持绑定和转发两种模式。
绑定模式在 linux 上,若指定的端口之前已经有其他程序使用,则该程序需对连接或者监听设置 SO_REUSEADDR 和 SO_REUSEPORT 否则会报错。
natupnp -p 8080
当前设备需在防火墙开放 8080 端口
natupnp -p 8080 -d 127.0.0.1:80
会将数据转发到 127.0.0.1:80,也需要在防火墙开放 8080 端口
若成功会打印在公网 ip 上开放的端口和公网 ip。
natupnp -p 8080 -e echo
打洞成功后,会调用 -e 指定的脚本/命令/程序,参数顺序为
args[1] localAddr args[2] local port args[3] out addr args[4] out port
例如
192.168.1.100 9102 1.1.1.1 32622