我正在尝试将我的计算机直接(没有第 3 方服务器)连接到朋友的计算机。我们都在 ISP 路由器后面,并且希望(作为一个挑战!)在不修改路由器配置的情况下进行连接。
myself$ nc -p 7777 public-ip-friend 8888
friend$ nc -p 8888 public-ip-myself 7777
和 UDP 打孔:
myself$ nc -u -p 7777 public-ip-friend 8888
friend$ nc -u -p 8888 public-ip-myself 7777
但他们都没有工作。
如何解决这个问题?
注意:VPS(不在 NAT 后面)<--> 我的家用电脑(仍在路由器后面)使用相同的方法工作。
有时问题中给出的命令会起作用,但有时不会。
这就是原因。
比方说:
在我的电脑上执行此操作时:
在 NAT 转换之前,我们有:
但是在家庭路由器 NAT 转换之后,我们有:
即源 IP 被 NAT 重写,但源端口也被重写。
因此,我的家庭防火墙中确实会创建一个“洞”(接受来自我朋友 198.51.100.27 的流量),但针对端口 55183,而不是针对端口7777。
这解释了为什么当我的朋友这样做时它会失败:
注意 (*):在某些情况下,路由器可能会保留 srcport=7777,而不是将其重写为 55183 等随机端口。在这种情况下,问题中给出的解决方案可能会起作用。但这是随机行为!