我无法使用srvflx候选者在同一LAN中的两个客户端之间建立冰连接

时间:2016-01-05 12:10:21

标签: javascript networking udp webrtc nat

我要做的是创建一个测试脚本(javascript)来检查客户端是否可以通过“服务器反身候选人”进行连接。

我从test.webrtc.org复制了脚本,它基本上创建了两个对等体并通过数据通道发送了一些文本,并检查双方是否收到了文本。

我遇到的问题是我的“冰连接状态”会从“检查”变为“失败”。

我知道我的浏览器(chrome)可以通过“服务器反身候选人”连接,我们没有使用对称NAT。

我知道在正常情况下,当两个客户都在同一个局域网时,他们几乎总是通过“主持人候选人”连接(有时通过接力候选人,不知道为什么)

我“强迫”它通过“服务器反身候选人”进行连接的唯一原因是因为我想创建一个测试脚本,以便我们的用户可以自我检查他们的浏览器能够选择哪些连接。

连接方案可以如下所述:

客户端A源 - 本地IP - 192.168.1.142 - 源端口 - 52245 客户端A目标 - 远程IP - 99.99.99.99 - 目标端口 - 43353

客户端B源 - 本地IP - 192.168.1.110 - 源端口 - 43353 客户端B目标 - 远程IP - 99.99.99.99 - 目标端口 - 52245

在我的路由器中使用“netstat”时,我得到以下内容:

Proto Source Address                      Destination Address              State 
udp   192.168.1.142:52245                 99.99.99.99:43353                UNREPLIED   
udp   192.168.1.110:43353                 99.99.99.99:52245                UNREPLIED  

我不确定这是否与路由器行为有关,我在路由器管理控制台中没有看到与上述相关的任何设置,所以我已经改为不同的路由器,我仍然得到相同的结果描述。是因为不允许上面的连接吗?

[编辑 - 包括路线表]

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
99.99.99.254    *               255.255.255.255 UH    0      0        0 WAN
99.99.99.0      *               255.255.255.0   U     0      0        0 WAN
192.168.1.0     *               255.255.255.0   U     0      0        0 LAN
default         99.99.99.254    0.0.0.0         UG    0      0        0 WAN

2 个答案:

答案 0 :(得分:3)

所有NAT都不支持将来自内部IP的数据包重定向到另一个内部IP。这称为发夹。来自wiki的示例与您的案例非常相似,

让我们考虑一个包含以下内容的私人网络:

Gateway address: 192.168.0.1
Host 1: 192.168.0.5
Host 2: 192.168.0.7

The gateway has an external IP : 192.0.2.1
Host 1 runs a P2P application P1 on its port 12345 which is externally mapped to 4444.
Host 2 runs a P2P application P2 on its port 12345 which is externally mapped to 5555.

如果NAT设备支持发夹,则P1应用程序可以使用外部端点192.0.2.1:5555连接到P2应用程序。如果没有,通信将无法正常工作。

  

当两个客户都在同一个局域网中时,他们几乎总是通过主机候选人连接#34; (有时通过接力候选人,不知道为什么)

只有当一个或两个主机阻止了另一个主机的IP地址时,才会发生这种情况。除此之外,同一LAN下的两台设备无法与主机进行主机连接。

答案 1 :(得分:0)

我只能通过VPN隧道连接一个客户端,使用srvflx候选者在同一局域网中的两个客户端之间建立冰连接。

如果不使用VPN,连接将永远不会成功。

我从VPN隧道客户端测试的STUN服务器在确定我的本地和映射地址时没有问题。