2015-04-10 252 views
5

Beim Erstellen einer Peer-to-Peer-Audioverbindung mit webRTC gibt der von uns verwendete STUN-Server die öffentliche IP-Adresse zurück, wenn sich ein Benutzer hinter einem Router befindet. Jetzt kann ich in den ICE-Objekten sehen, dass der Bericht immer zwischen 50000 und höher liegt.Bestimmte Ports für webRTC verwenden

Gibt es eine Möglichkeit, einen bestimmten Port zu verwenden, damit der Benutzer nicht alle diese Ports öffnen muss?

+0

Nicht, wenn Sie eine der Browser-Implementierungen verwenden. Wenn Sie jedoch mit der nativen API schreiben, können Sie Ports dort einschränken. –

+1

Sind Sie sicher, dass der Port vom Browser und NICHT vom STUN-Server definiert wird? –

+0

Der ICE-Kandidaten-Gatherer verwendet einen bestimmten Portbereich und verwendet nur Ports in diesem Bereich (oder nur JEDER Port). –

Antwort

8

Gibt es eine Möglichkeit, einen bestimmten Port zu verwenden, damit der Benutzer nicht alle diese Ports öffnen muss?

Ich glaube, Sie haben ein Missverständnis. Der ganze Sinn von STUN und ICE (einschließlich seines Derivats WebRTC) besteht darin, zu vermeiden, dass irgendjemand einen Port auf seinem NAT öffnen muss. Stattdessen öffnen STUN und ICE den Port dynamisch.

So funktioniert es (in einer wirklich kurzen Beschreibung).

  1. Kunde öffnet eine Buchse an einem beliebig Port (z.B. 50001)

  2. Kontakte STUN-Server, dass der Buchse mit dem externen IP zu entdecken: Port-Mapping für diese Buchse. (z. B. 192.168.1.2:50001 entspricht 1.2.3.4:50001). Ports müssen nicht notwendigerweise zwischen internen und externen Adressen übereinstimmen, aber das tun sie normalerweise, also behalte ich das für dieses Beispiel bei.

  3. Durch einen externen Mechanismus (SIP, XMPP, Jingle, Becher mit Strings) wird die Kandidatenliste beider Knoten ausgetauscht. Dazu gehören alle bekannten internen und externen Adressen, die gesammelt wurden (z. B. 192.168.1.2:50001 und 1.2.3.4:50001).

  4. Mit demselben Socket, der in Schritt 1 geöffnet wurde, senden beide Seiten (STUN) -Nachrichten (UDP-Pakete) direkt untereinander. Das erste Nachrichtenpaar wird möglicherweise vom Router/der Firewall blockiert. Da jedoch eine Seite ein ausgehendes Paket an die entfernte Adresse initiierte, werden nachfolgende Pakete von dieser Adresse wieder zugelassen. Dies wird der "Lochungsschritt" genannt. Daher ist der Port dynamisch offen, ohne dass der Router eine bestimmte Konfiguration benötigt.

Hoffe, das hilft.

+0

Ich sehe. Aber wenn ich die Ports auf meinem Router nicht manuell öffne, funktioniert webRTC nicht. Es ist ein Standard-FritzBox-Router, den Millionen andere benutzen, ich glaube nicht, dass ich ausgefallene Einstellungen habe.Wenn ich die Ports nicht selbst öffne, funktioniert STUN nicht (ich sehe die internen und externen Adressen für die ICE-Kandidaten, aber die Kommunikation wird nicht aktiviert) und es fällt wieder auf TURN (was dann funktioniert). Wenn Ports offen sind, funktioniert STUN, kein TURN benötigt. Wenn Sie eine Idee haben, warum das ist - ich wäre sehr dankbar. –

+0

Wenn Verbindungen fehlschlagen, wenn nur ein STUN-Server bereitgestellt wird, aber erfolgreich ausgeführt wird, wenn TURN vorhanden ist, liegt dies wahrscheinlich daran, dass Ihr Router/ISP sich als "symmetrisches NAT" verhält (auch bekannt als adressabhängiges Mapping). Was ist eine technische Art zu sagen, dass das Port-Mapping-Verhalten unvorhersehbar ist. Wenn Sie die Ports in Ihrem NAT öffnen, um sie an Ihren PC/Ihr Gerät zu leiten, wird die Port-Zuordnung konsistent. – selbie

+0

Gehen Sie 'stunclient --mode full stun.stunprotocol.org' mit dem Code [hier] (http://www.stunprotocol.org), um Ihr NAT-Verhalten zu validieren. – selbie

1

Sie können nicht programmatisch, es sei denn, Sie verwenden webrtc API in Ihrer eigenen Anwendung. Der Browser wählt lokal bestimmte Ports aus einem Bereich aus. und dann wird es Sie in den SDP- und ICE-Kandidateninformationen darüber informieren.

STUN-Server hilft nur festzustellen, ob ein Client hinter einer NAT/Firewall ist; und dann verwendet ICE diese Information beim Herstellen einer Peer-to-Peer-Verbindung.

Ich habe irgendwo gehört, dass es eine Möglichkeit gibt, diesen Portbereich mithilfe von Chrome-Richtlinienvorlagen zu steuern (die von Unternehmen zum Einschränken der Chrome-Einstellungen verwendet werden) - http://www.chromium.org/administrators/policy-templates. Es könnte einen Blick wert sein ...