2012-12-04 15 views
5

sto usando la libreria java sbbi per inoltrare le porte. ma il mio router è conected a un altro router, in modo che il IP esterno del primo router è un IP che è stato dato dal secondo DHCP del router. c'è un modo per inoltrare le porte anche sul secondo router? Ecco il mio codice:come upnp forward ports tramite due livelli di router

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); 

risposta

2

Per quanto ne so che non è possibile con la configurazione attuale, perché non è possibile accedere direttamente porta del router.

Ci sono 2 soluzioni a cui posso pensare.

  1. disattivare il server DHCP del router in modo che lui e si sarà tutto ottenere il vostro IP dal secondo router e poi sarete tutti ha la stessa sottorete e si poteva accedere a ogni uno dei router.
  2. hanno un altro PC collegato alla seconda rete router e lui un server che ascolta i comandi e questo server eseguirà i compiti UPNP per voi fare. (Probabilmente sarà necessaria una configurazione manuale del port forwarding)

Spero di poterti aiutare.

+0

questa non è un'opzione ... Sto sviluppando un software, non posso dire ai miei utenti di fare lo – Dima

+0

forse mi può aiutare con questo? http://stackoverflow.com/questions/16092747/java-sbbi-upnp-cant-find-internet-gateway-device-sometimes – Dima

+0

Come sei sicuro che i tuoi utenti abbiano 2 router uno dopo l'altro? – Danpe

3

Come @Danpe ha detto nella sua risposta, UPnP non vi permetterà di aprire le porte quando si è dietro NAT multiple.

Come sto anche lavorando su un software P2P e da quello che ho raccolto, ecco che cosa si può tentare di collegare due coetanei:

  1. tramite TCP o UDP hole punching.
  2. Se sopra non funziona, uno dei router su entrambi i lati utilizza un Symmetric NAT. Prova UPnP o NAT-PNP.
  3. Se sopra non funziona, l'app è dietro un router che non supporta UPnP, NAT-PNP ... o si è dietro a più livelli di NAT. Ora è possibile:

    1. comunicare con l'utente delle app che ha bisogno di aprire le porte a quei router. Questo è, come hai menzionato nei commenti, una soluzione sfortunata in quanto presuppone una conoscenza tecnica avanzata da parte dell'utente. Ma sembra essere quello che alcune aziende effettivamente fanno. Vedere here per esempio.

    2. Utilizzare un server di inoltro come quello che utilizza TURN protocol tramite il quale gli utenti con porte chiuse comunicheranno. Questo relay server può essere uno o più peer le cui porte sono aperte (come nel caso di uTorrent), o può essere il tuo server, o una combinazione di due: se ci sono peer con porte aperte, usali, altrimenti usa il tuo server (questo è il caso di Skype).