TCP hole punching tool 又一个 tcp 打洞工具
Go to file
2024-06-30 00:54:31 +08:00
natmap 参数改为 netip.Addr 2024-01-24 23:58:25 +08:00
reuse 支持转发 udp 2024-01-23 23:03:06 +08:00
stun Update stun.go 2023-05-22 11:09:42 +08:00
upnp fix 2023-05-22 10:16:37 +08:00
build-android.bat fix 2023-05-24 13:12:30 +08:00
build-linux.bat 应查询 A 记录 2024-01-23 17:36:27 +08:00
dns.go android dns 2023-05-21 22:35:55 +08:00
go.mod forward 2023-05-21 23:58:05 +08:00
go.sum forward 2023-05-21 23:58:05 +08:00
LICENSE LICENSE 2023-05-22 01:16:06 +08:00
main.go 改为 turn.cloudflare.com 2024-06-30 00:54:31 +08:00
README.md update readme 2023-06-13 20:30:39 +08:00

natupnp

又一个 tcp 打洞工具,参考了 Natternatmap

也就是能在 nat1 的情况,在没有公网 ip 时,打开公网 ip 的 tcp 端口,可以让其他人直接访问到。

和以上两个工具相同。不过不同的是,这个工具集成了 upnp 的功能,能在路由上设置端口映射,增加打洞的成功率,适合在其他设备而非路由器上使用。

使用示例

首先可以检测当前网络是否支持打洞。

natupnp -t 将会在 8086 上监听,然后打印公网地址和端口,可以尝试使用其他网络用浏览器访问,如果显示 ok 则说明打洞成功。

防火墙以及路由器的配置

对于运行 natupnp 的主机,需要开放 -p 指定的端口, -p 8080 8080 就是需要开放的端口了。

对于路由器,分三种情况。

光猫拨号,网线插在路由器的 lan 口

这种情况下,光猫管理界面的 ip和连接路由器的主机的 ip 在一个网段内。

此时,需要在光猫上开启 upnp。一般在 高级配置-日常应用-upnp 配置,可能需要光猫的超级管理员密码,通常能在网上搜到。

光猫拨号,网线插在路由器的 wan 口

这种情况下的光猫管理界面 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