【发布时间】:2022-01-18 03:47:37
【问题描述】:
我有两台主机 A 和 B。它们位于不同的网络中,位于不同的 NAT 和 ISP 后面。我正在尝试通过使用打孔在它们之间建立 p2p 连接。我使用 STUN 服务器来获取 A 和 B 的映射 IP 地址和端口。它是这样进行的:
对于 A:
.\stunclient.exe --mode behavior stun.stunprotocol.org 3478
Binding test: success
Local address: 192.168.0.110:54709
Mapped address: 186.233.160.141:28769
Behavior test: success
Nat behavior: Endpoint Independent Mapping
对于乙:
.\stunclient.exe --mode behavior stun.stunprotocol.org 3478
Binding test: success
Local address: 192.168.3.1:57015
Mapped address: 45.70.35.52:12870
Behavior test: success
Nat behavior: Endpoint Independent Mapping
然后我尝试通过在 A 和 B 上同时多次执行这两行来执行 TCP 打孔技术(使用 netcat):
在 A 上:
ncat -p 54709 45.70.35.52 12870
Ncat: TIMEOUT.
在 B 上:
ncat -p 57015 186.233.160.141 28769
Ncat: TIMEOUT.
我总是得到“Ncat: Timeout”作为输出(不是立即,这需要一些时间),但是,我可以通过运行以下命令 3 次通过 UDP 打孔在 A 和 B 之间建立直接连接:
在 A 上:
ncat -u -p 54709 45.70.35.52 12870
在 B 上:
ncat -u -p 57015 186.233.160.141 28769
所以问题是 TCP 打孔不起作用。任何想法为什么?
【问题讨论】:
-
同网流量不经过路由器,无需打孔。路由器在网络之间路由流量,而不是从一个网络返回到同一个网络。桥接同一网络上的流量。
标签: networking p2p nat stun hole-punching