如何通过两级路由器进行UPnP端口转发

8
我正在使用Java SBBi库转发端口。但是我的路由器连接到另一个路由器,因此第一个路由器的外部IP是第二个路由器DHCP分配的IP地址。是否有方法也在第二个路由器上转发端口?以下是我的代码:
InternetGatewayDevice[] devices=InternetGatewayDevice.getDevices( 1000 );
System.out.println("Found "+devices.length+" Devices");
InternetGatewayDevice dev = devices[ 0 ];
System.out.println(dev);
System.out.println( "External IP = " + dev.getExternalIPAddress() );

System.out.println( dev.addPortMapping( "Streamternet", "TCP", null, 1333,
                                        "192.168.0.105", 8888, 0 ) );

System.out.println( "waiting for connection" );
HTTPServer.main(null);
3个回答

5
据我所知,根据您当前的设置,您无法直接访问路由器网关,因此不可能实现该功能。
我有两个解决方案:
1.禁用您的路由器DHCP服务器,这样他和您都将从第二台路由器获取IP地址,然后您都将拥有相同的子网,您可以访问每个路由器。
2.连接到第二个路由器网络的另一台电脑,并将其设置为监听您的命令的服务器,该服务器将代替您执行UPNP任务。(这可能需要先手动设置端口转发)
希望能对您有所帮助。

这不是一个选项...我正在开发软件,我不能告诉我的用户去做。 - Dima
你怎么确定你的用户有两个路由器一个接一个? - Danpe
1
这种特殊情况只会发生在高级用户的设置中。 所有软件,包括BitTorrent在内都无法实现这一点。 如果可能的话,这将是一个巨大的安全问题。 - Danpe
@Dima,如果你在外部世界上不可见,你仍然可以与那些端口开放的同行进行通信(就像标准客户端-服务器场景一样)。虽然这会减少你可以通信的同行数量,但也会降低带宽。 - Peter Jankuliak
@Dima,我觉得你误解了我的意思。在我之前的评论中,我是指你在我上面的评论中表达了你不确定uTorrent如何适用于两个路由器后面的对等方。也就是说,如果您的端口关闭,uTorrent仍然可以工作,但它只能连接到端口打开的对等方,这会导致对等方数量减少,从而导致带宽减少。对于主要问题,我将创建一个新答案,因为它无法放在评论中。 - Peter Jankuliak
显示剩余2条评论

5

正如@Danpe在他的回答中所说,当你处于多重NAT之后时,UPnP无法让你打开端口。

由于我也正在开发P2P软件并从中收集信息,以下是连接两个对等方可以尝试的方法:

  1. 使用TCP或UDP进行连接穿透NAT
  2. 如果上述方法不起作用,则其中一侧的路由器使用对称型NAT。尝试使用UPnP或NAT-PNP。
  3. 如果上述方法仍然不起作用,应用程序可能位于不支持UPnP、NAT-PNP等功能的路由器后面,或者您位于多层NAT之后。现在你可以选择:

    1. 与应用程序的用户通信,让她打开那些路由器的端口。这是一个不幸的解决方案,因为它假定用户具有高级技术知识,正如你在评论中提到的。但事实上,有些公司确实是这样做的。例如,请参见此处

    2. 使用中继服务器,例如使用TURN协议的服务器,通过该服务器,关闭端口的用户将进行通信。这个中继服务器可能是一个或多个打开端口的节点(如uTorrent所做的),也可以是你自己的服务器,或两者的组合:如果有打开端口的节点,则使用它们,否则使用你自己的服务器(这是Skype的情况)。


0

这比你想象的要复杂一些。我正在尝试做同样的事情。我可以访问连接到ISP的调制解调器(我知道这一点,因为我可以从笔记本电脑访问路由器)。但是我在路由器后面(我的网关)。

为了使它工作,您需要首先将所需端口从调制解调器映射到路由器,然后再从路由器映射到您的PC。

这里有两个问题:

1- 问题在于UPNP软件总是询问当前PC的网关(您的路由器)的映射。我找不到软件让您自定义要请求运行UPnP配置的网关。 (通常当路由器是192.168.0.1时,调制解调器是192.168.1.1或192.168.2.##)。

2- 要映射路由器,您需要知道您的调制解调器网络中路由器的指定地址。这样,UPnP将直接将端口配置为转发到该地址。

因此...这是可能的,但目前周围没有相应的软件。

PS:在stackoverflow上问此类问题的人不需要回答说,“您可以转到调制解调器端口转发菜单并手动执行它。”


我需要与您寻求相同的配置,以便在连接到不同的未知网络时,通过SSH控制公司笔记本电脑。 - FGarcia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接