2015-04-10 18 views
5

Podczas tworzenia połączenia audio peer to peer za pomocą webRTC, serwer STUN, którego używamy, zwróci publiczny adres IP, jeśli użytkownik znajduje się za routerem. Teraz w obiektach ICE widzę, że rport jest zawsze czymś pomiędzy 50000 i więcej.Używanie określonych portów dla webRTC

Czy istnieje sposób użycia określonego portu, aby użytkownik nie musiał otwierać wszystkich tych portów?

+0

Nie w przypadku korzystania z jednej z implementacji przeglądarki. Jeśli jednak piszesz z natywnym interfejsem API, uważam, że możesz tam ograniczyć porty. –

+1

Czy jesteś pewien, że port jest zdefiniowany przez przeglądarkę, a NIE przez serwer STUN? –

+0

Narzędzie do zbierania kandydatów na ICE wykorzystuje określony zakres portów i wykorzystuje tylko porty z tego zakresu (lub jest to DOWOLNY port). –

Odpowiedz

8

Czy istnieje sposób użycia określonego portu, aby użytkownik nie musiał otwierać wszystkich tych portów?

Myślę, że masz nieporozumienie. Cały punkt STUN i ICE (w tym jego pochodna WebRTC) istnieje, aby uniknąć sytuacji, w której ktokolwiek musi otworzyć port na swoim NAT. Zamiast tego STUN i ICE dynamicznie otwierają port.

Oto jak to działa (w bardzo krótkim opisie).

  1. Klient otwiera gniazdo na losowym porcie (np 50001)

  2. Kontakt serwera STUN wykorzystujące że gniazdo odkryć zewnętrznego IP: mapowanie portów dla tego gniazda. (np. 192.168.1.2:50001 mapuje na 1.2.3.4:50001). Porty niekoniecznie muszą się zgadzać między adresami wewnętrznymi i zewnętrznymi, ale zwykle tak się dzieje, więc zachowam to w tym przykładzie.

  3. Poprzez zewnętrzny mechanizm (SIP, XMPP, Jingle, kubki z ciągami), lista kandydujących adresów obu węzłów jest wymieniana. Obejmuje to wszystkie znane zebrane adresy wewnętrzne i zewnętrzne (np. 192.168.1.2:50001 i 1.2.3.4:50001).

  4. Przy użyciu tego samego gniazda otwartego w kroku 1 obie strony wysyłają wiadomości (STUN) (pakiety UDP) bezpośrednio między sobą. Pierwsza para wiadomości może być blokowana przez router/zaporę. Ale ponieważ jedna strona zainicjowała pakiet wychodzący na adres zdalny, kolejne pakiety z tego adresu są dozwolone z powrotem. Jest to nazywane "krokiem dziurkowania". W związku z tym port jest dynamicznie otwarty bez routera wymagającego określonej konfiguracji.

Mam nadzieję, że to pomoże.

+0

Rozumiem. Ale jeśli nie otworzę portów na routerze ręcznie, webRTC nie zadziała. Jest to standardowy router FritzBox, którego używa milion innych użytkowników, nie sądzę, że mam wymyślne ustawienia.Jeśli sam nie otworzę portów, STUN nie zadziała (widzę adresy wewnętrzne i zewnętrzne dla kandydatów na ICE, ale komunikacja nie angażuje się) i wraca do TURN (która następnie działa). Jeśli porty są otwarte, STUN działa, nie wymaga TURN. Jeśli masz pojęcie, dlaczego tak jest, byłbym bardzo wdzięczny. –

+0

Jeśli połączenia zakończą się niepowodzeniem, gdy dostarczony zostanie tylko serwer STUN, ale zakończy się on sukcesem, gdy TURN jest obecny, prawdopodobnie jest tak, ponieważ router/dostawca usług internetowych zachowuje się jak "symetryczny NAT" (podobnie jak mapowanie zależne od adresu). Co jest technicznym sposobem stwierdzenia, że ​​zachowanie mapowania portów jest nieprzewidywalne. Kiedy otwierasz porty na twoim NAT, by kierować do twojego komputera/urządzenia, mapowanie portu staje się spójne. – selbie

+0

Przejdź do 'stunclient - mode full stun.stunprotocol.org' używając kodu [here] (http://www.stunprotocol.org), aby sprawdzić poprawność twojego zachowania NAT. – selbie

1

Nie można programować, jeśli nie korzystasz z API Webrtc w swojej aplikacji. Przeglądarka wybierze określone lokalne porty z zasięgu lokalnego; a następnie poinformuje Cię o nich w informacji o kandydacie SDP i ICE.

Serwer STUN pomaga wykryć, czy klient znajduje się za NAT/firewallem; a następnie ICE wykorzystuje te informacje podczas nawiązywania połączeń peer-to-peer.

Słyszałem, że może istnieć sposób kontrolowania tego zakresu portów za pomocą szablonów zasad Chrome (używanych przez przedsiębiorstwa do ograniczania ustawień Chrome) - http://www.chromium.org/administrators/policy-templates. Warto zajrzeć do ...