Paw*_*mar 5 networking routing upnp nat portforwarding
我正在尝试使用UPNP实现双NAT.我的PC连接如下:
Internet - >路由器1 - >路由器2-> PC
我已成功完成路由器2上的端口转发,但无法在路由器1上进行.由于来自服务器的数据包(打开了)互联网)无法到达PC.
通过很少的文件解决了如何解决但大多发现手动方式如桥接网络或局域网线.
我正在寻找使用UPNP协议在两个路由器上进行端口转发的一些递归解决方案.我猜洪流,Skype也一样.
如何获得与路由器1相关的网络接口,然后在该网络上进行端口转发?
任何帮助将受到高度赞赏.
谢谢,
Pawan
有一个IGD-PCP IWF 规范试图解决类似的问题,尽管它假设“路由器 1”支持 PCP,而不是 UPnP。因此,让我们尝试使用两个普通的 UPnP 路由器/NAT 设备从纯理论的角度来解决这个问题。
\n根据UPnP 设备架构版本 2.0, UPnP 通信有几个不同的步骤:
\n寻址对我们来说没什么兴趣,让我们假设到处都有正确的 DHCP 并完成它。在我们的案例中,活动和演示也几乎毫无用处。所以主要关注的是发现、描述和控制。
\n发现通过 SSDP 消息交换进行工作。SSDP 使用 UDP 进行传输,端口号为 1900(默认)和众所周知的多播地址。
\n描述从设备在发现阶段提供的 URL 开始,控制点(在我们的例子中是 PC)需要在此 URL 上发出 HTTP GET 请求,这意味着它使用 TCP 作为带有设备 IP 地址的传输协议(单播) 。
\n控制从设备在其描述中提供的 URL 开始,并且它在 TCP 之上的 HTTP 之上使用 SOAP,这对我们来说也意味着单播 IP。
\n因此,所有这些对于双 NAT 意味着,在 UPnP 交互的描述和控制步骤中,我们从 PC 到路由器 1 的通信为零问题,因为所有这些都只是具有单播 IP 地址的标准 TCP。但要进入描述步骤,我们需要有路由器 1 的 URL,因此让我们仔细看看如何以正常方式获取此 URL。
\n有两种主要机制用于发现 \xe2\x80\x94 广告(当设备定期多播有关它的一些信息时)和搜索(当控制点发送多播搜索消息并且设备以单播响应应答该消息时)。显然,默认情况下,路由器 2 后面的 PC 无法从路由器 1 获取组播广告,而路由器 1 也无法从 PC 获取组播搜索消息,所以我们这里遇到了问题,现在的问题是是否存在无需多播即可进行通信的可能性。
\n幸运的是,同一份架构文档说:
\n\n\n此外,控制点还可以将发现消息单播到端口 1900 上或可选的 SEARCHPORT.UPNP.ORG 标头字段(在此用途中取代端口 1900)指定的端口上的特定 IP 地址,搜索 UPnP该特定 IP 地址的设备或服务。
\n...
\n所有设备应在端口 1900 或 SEARCHPORT.UPNP.ORG 标头字段中指定的端口号(如果提供)上侦听传入的单播搜索消息,并且如果其任何根设备、嵌入式设备或服务与发现消息。
\n
这意味着,如果您知道路由器 1 IP 地址(当然是从路由器 2 端),您可以(最重要的是,规范允许)通过单播 UDP 消息与其进行通信,这也是 NAT 友好的,因此这不是从路由器 2 后面的 PC 完成的问题。
\n剩下的唯一事情就是获取路由器 1 的 IP 地址。不幸的是,没有简单的标准方法可以做到这一点,但您至少有两个选择:跟踪路由(以您想要的任何方式)和强力 IP 扫描(最有可能的是,路由器 1 的潜在 IP 集是有限的)。
\n现在您可以与路由器 1 通信,但在与路由器 1 通信时,您仍然应该记住一件小事,在任何内部 UPnP 消息中的 \xe2\x80\x94 中,您应该使用路由器 2 IP 地址(从路由器 1 端看到)及其港口。就像在路由器 1 上的操作NewInternalClient参数中一样AddPortMapping,您应该使用路由器 2 IP。顺便说一句,这提出了路由器 2 IP 的问题,但您可以通过路由器 2 UPnP服务ExternalIPAddress变量获得该问题(IGD 需要该服务来实现)。WANIPConnection
所以,总结一下:
\nExternalIPAddress的变量获得该 IPWANIPConnection