使用NAT遍历来被动连接用户

本文是DC ++开发人员博客条目之一的免费翻译

在作者的允许下(并且为了清楚和有趣,为了方便起见),我通过链接丰富了它,并通过一些个人研究对其进行了补充。


简介

当前,一对连接用户中的至少一个用户必须处于活动模式。如果未在任一侧配置活动模式,则NAT“旁路”机制将非常有用。这通常是由于传入防火墙或NAT设备阻止传入连接而发生的。

如果两个客户端都处于活动模式,则发起客户端将$ ConnectToMe

命令(包含其自己的IP地址和端口)发送给另一个客户端。使用此数据,接收命令的客户端将与启动器建立连接。如果客户端之一处于被动模式 通过集线器,被动客户端A$ RevConnectToMe命令发送主动客户端B



然后使用$ ConnectToMe命令响应。


作为服务器š中的上述情况下充当DC毂

如果在被动模式下两个客户端,所述ADC毂

位于后面不同NAT客户接合到毂小号


因此,到集线器的连接是从客户端A侧看的;

集线器接受端口1511上的连接;客户端A通过端口50758从其专用网络建立传出连接。

客户端A发送到服务器S一条消息,要求帮助与客户床和床连接 客户端B也处于被动模式,收到此命令后,必须通知其专用端口用于通过NAT连接到集线器。 收到此信息后,客户端A立即尝试与客户端B建立连接并报告其自己的专用端口。

Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991



Hub: [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991



Hub: [Outgoing][178.79.159.147:1511] DRNT AAAA BBBB ADCS/0.10 50758 1649612991

有什么兴趣?兴趣在于通过通过已使用的专用端口创建到公共地址的新连接来转移同一连接的端点。


答对了!

当然,与此同时,客户端B的NAT 拥有拒绝来自客户端A的第一个连接请求的全部权利,但是它自己的请求已经冲入了由该连接创建的“漏洞”,并且建立了连接。


需要注意的是,该协议不使用由NAT - S会话打开的公用端口以及专用地址的整个过程

结束语

在撰写(原始)文章时,大约一半的DC客户是被动的。这意味着无法建立所有可能连接的四分之一。

将来,DC ++将能够“绕过” NAT使用现有的ASBS连接建立直接的客户端–客户端连接,即使AB处于被动模式。

All Articles