2015-04-10 64 views
5

Quando si crea una connessione audio peer-to-peer utilizzando webRTC, il server STUN che utilizziamo restituirà l'IP pubblico se un utente si trova dietro un router. Ora negli oggetti ICE, posso vedere che il rport è sempre qualcosa tra 50000 e oltre.Usa porte specifiche per webRTC

C'è un modo per utilizzare una porta specifica in modo che l'utente non debba aprire tutte quelle porte?

+0

Non quando si utilizza una delle implementazioni del browser. Tuttavia, se si scrive con l'API nativa, credo che sia possibile limitare le porte lì. –

+1

Sei sicuro che la porta sia definita dal browser e NON dal server STUN? –

+0

Il raccoglitore candidato ICE utilizza un intervallo di porte specifico e utilizza solo le porte in tale intervallo (o solo ANY). –

risposta

8

C'è un modo per utilizzare una porta specifica in modo che l'utente non debba aprire tutte quelle porte?

Penso che tu abbia un malinteso. L'intero punto di STUN e ICE (incluso il suo derivato WebRTC) esiste per evitare che chiunque debba aprire una porta sul proprio NAT. Invece, STUN e ICE aprono dinamicamente la porta.

Ecco come funziona (in una descrizione molto breve).

  1. client apre un socket su una porta casuale (ad esempio 50001)

  2. Contatti stun server che utilizzano tale presa di scoprire l'IP esterno: mappatura delle porte per questa presa. (ad esempio, 192.168.1.2:50001 mappe a 1.2.3.4:50001). Le porte non devono necessariamente corrispondere tra indirizzi interni ed esterni, ma di solito lo fanno, quindi continuerò a farlo per questo esempio.

  3. Attraverso un meccanismo esterno (SIP, XMPP, Jingle, tazze con stringhe), viene scambiato l'elenco di indirizzi candidati di entrambi i nodi. Ciò include tutti gli indirizzi interni ed esterni noti raccolti (ad esempio 192.168.1.2:50001 e 1.2.3.4:50001).

  4. Utilizzando lo stesso socket aperto nel passaggio 1, entrambi i lati inviano (STUN) messaggi (pacchetti UDP) direttamente tra loro. La prima coppia di messaggi potrebbe essere bloccata dal router/firewall. Ma poiché un lato ha avviato un pacchetto in uscita verso l'indirizzo remoto, i pacchetti successivi da quell'indirizzo sono consentiti nuovamente. Questo è chiamato il "passaggio di perforazione". Quindi, la porta viene aperta dinamicamente senza che il router necessiti di alcuna configurazione specifica.

Spero che questo aiuti.

+0

Capisco. Ma se non apro manualmente le porte sul mio router, webRTC non funzionerà. È un router FritzBox standard utilizzato da milioni di altri, non penso di avere impostazioni fantasiose.Se non apro le porte da solo, STUN non funzionerà (vedo gli indirizzi interni ed esterni per i candidati ICE, ma la comunicazione non si impegna) e ricade su TURN (che quindi funziona). Se le porte sono aperte, STUN funziona, non è necessario TURN. Se hai qualche idea sul perché questo è - sarei molto grato. –

+0

Se le connessioni falliscono quando viene fornito solo un server STUN, ma succede quando TURN è presente, è probabile che il router/ISP si comporti come un "NAT simmetrico" (cioè mappatura dipendente dall'indirizzo). Il che è un modo tecnico per dire che il comportamento di mappatura delle porte è imprevedibile. Quando si aprono le porte sul NAT per indirizzare al PC/dispositivo, la mappatura delle porte diventa coerente. – selbie

+0

Vai a correre 'stunclient --mode full stun.stunprotocol.org' usando il codice [qui] (http://www.stunprotocol.org) per convalidare il tuo comportamento NAT. – selbie

1

Non è possibile programmare a meno che non si utilizzi l'API webrtc nella propria applicazione. Il browser sceglierà le porte locali specifiche da un intervallo locale; e poi ti informerà su di loro nelle informazioni sui candidati SDP e ICE.

Il server STUN aiuta solo a scoprire se un client si trova dietro un NAT/firewall; e quindi ICE utilizza queste informazioni per stabilire una connessione peer-to-peer.

Ho sentito da qualche parte che potrebbe esistere un modo per controllare tale intervallo di porte tramite i modelli di criteri di Chrome (utilizzato dalle aziende per limitare le impostazioni di Chrome) - http://www.chromium.org/administrators/policy-templates. Potrebbe valere la pena esaminare ...