Networking 如何通过upnp编程实现双NAT端口转发
我正试图通过UPNP实现双NAT。我的电脑连接如下:Networking 如何通过upnp编程实现双NAT端口转发,networking,routing,nat,upnp,portforwarding,Networking,Routing,Nat,Upnp,Portforwarding,我正试图通过UPNP实现双NAT。我的电脑连接如下: 互联网->路由器1->路由器2->电脑 我已在路由器2上成功完成端口转发,但无法在路由器1上完成。由于这些原因,来自服务器(位于Internet上)的数据包无法到达PC。 阅读了一些关于如何处理的文档,但大部分都找到了手动方式,如桥接网络或连接局域网 我在寻找使用UPNP协议在两个路由器上进行端口转发的递归解决方案。我猜torrent、skype也会这样做。 如何获取与路由器1相关的网络接口,然后在该网络上进行端口转发? 任何帮助都将不胜感激
互联网->路由器1->路由器2->电脑
我已在路由器2上成功完成端口转发,但无法在路由器1上完成。由于这些原因,来自服务器(位于Internet上)的数据包无法到达PC。
阅读了一些关于如何处理的文档,但大部分都找到了手动方式,如桥接网络或连接局域网
我在寻找使用UPNP协议在两个路由器上进行端口转发的递归解决方案。我猜torrent、skype也会这样做。
如何获取与路由器1相关的网络接口,然后在该网络上进行端口转发?
任何帮助都将不胜感激 谢谢,
Pawan有一个解决类似问题的方法,尽管它假设“路由器1”上支持PCP,而不是UPnP。因此,让我们试着从纯理论的角度来处理这个问题,使用两个普通的UPnP路由器/NAT设备 UPnP通信有几个不同的步骤,如下所示:
- 寻址
- 发现
- 描述
- 控制
- 事件
- 介绍
AddPortMapping
操作的NewInternalClient
参数类似,您应该使用路由器2 IP。顺便说一句,这提出了一个路由器2 IP的问题,但您可以通过路由器2 UPnPExternalIPAddress
变量(此服务为)获得该问题
因此,总结一下:
- 从技术上讲,这是可以做到的,尽管我怀疑任何标准库都不会为您做到这一点
- 您需要的两件事是:
- 路由器2“外部”IP,您可以通过
WANIPConnection的变量ExternalIPAddress
UPnP服务获得该IP
- 路由器1“内部”IP(来自路由器2侧),需要跟踪路由或扫描
- 路由器2“外部”IP,您可以通过
- 给定路由器1IP,您只需要在发现步骤使用单播消息传递,而不是多播
- 其他一切都应该正常工作,只需注意在UPnP消息中使用路由器2“外部”IP而不是PCs IP
$ upnpc -a 192.168.50.123 6667 6667 tcp
...
$ upnpc -l # this will confirm the rule is in place
...
现在是稍微棘手的部分。我现在向外层NAT发出UPNP请求。由于通常的SSDP发现无法工作,我必须指定XML根描述URL
$ upnpc -u "http://192.168.1.1:5000/rootDesc.xml" -a 192.168.1.XX 6667 6667 tcp
...
$ upnpc -u "http://192.168.1.1:5000/rootDesc.xml" -l # this will confirm the rule is in place
...
<INTERNET> --> MY_PUBLIC_IP -> 192.168.1.XX -> 192.168.50.123