VPN срещу TURN релей: кое всъщност пренася WebRTC разговор?
Тунелът променя пътя, който ICE вижда; той не отпуска релей и не осигурява сигнализация. Сравнете какво дава VPN изходът и TURN сървърът.
Страницата се зарежда през VPN, а разговорът така и не се свързва: две различни повреди с един и същ адресен ред. Тунелът промени пътя, който браузърът използва; той не стана услуга за сигнализация, STUN сървър или релей и не решава коя двойка кандидати ще избере ICE. Именно разделянето на задачата на всеки компонент превръща неясното „WebRTC е блокиран“ в конкретна повреда.
Четири задачи, от които тунелът засяга само една
Приложението обменя информация за сесията чрез някаква схема за сигнализация и това е първата задача. ICE събира адреси на кандидати и проверява двойки, докато една проработи, и това е втората. STUN позволява на партньора да разбере как изглежда трафикът му отвън, а TURN отпуска релей за случаите, когато няма директен път. Тези четири роли са различни и VPN влияе на адресите и филтрирането, които те срещат, вместо да осигурява някоя от тях.
Затова успешният вход не казва нищо за пътя на медията. Сигнализацията обикновено върви по същия HTTPS, който страницата вече използва, на порт 443, докато медията може да пътува по UDP до напълно различна дестинация.
Частното адресиране прави объркването по-лошо. Адресът на тунела е полезен за партньора само когато той има предвиден път обратно към него; това, че е частен, не е доказателство за взаимна достижимост и браузърите не го третират така, когато изхвърлят кандидати, които не могат да бъдат проверени. Кандидат, който изглежда локален за вас, може да е непроверим от другата страна. Тази разлика си струва да бъде изключена, преди да заключите, че тунелът изпуска медията.
Сравнете VPN изход с TURN релей
И двете препращат пакети, затова се бъркат, а таблицата за сравнение по-горе си струва да се чете колона по колона, а не като списък от функции. Отпускането на релей е обект за всяка сесия, създаден чрез удостоверена заявка; тунелът е маршрут. Едното има идентификационни данни, които изтичат, другото има адрес на партньор, който или е достижим, или не е.
| Component | What it contributes | What it needs to work | What it cannot do |
|---|---|---|---|
| VPN exit | Changes the observed mapping and the route packets take | A working tunnel and a policy that permits the media transport | Allocate a relay or supply signaling |
| STUN server | Reports the mapped address a peer appears to use | Reachability from the client, on its configured transport | Carry media when a direct path fails |
| TURN server | Relays media through an authenticated allocation | Valid credentials, an allowed transport and sufficient capacity | Fix a missing ICE policy or an unauthorized client |
| Signaling channel | Carries offers, answers and candidate lists | Both peers reaching the same application endpoint | Establish connectivity by itself |
Номерата на портовете правят разликата конкретна. По подразбиране TURN слуша на 3478 за UDP и TCP и на 5349 за TLS, а мрежа, която разрешава 443, но изхвърля тези портове, ще проваля разговорите през релей, докато сърфирането продължава нормално. Смяната на порта на VPN не настройва нищо от това, защото важните портове принадлежат на релей услугата, а не на тунела.
Прочетете диагностиката, после тествайте разговора
Браузърите показват нужната информация без прихващане на пакети. Отворете страницата за диагностика на WebRTC за вашия браузър, направете разговора и четете избраната двойка кандидати, а не събрания списък: какви типове локални и отдалечени кандидати са избрани, по кой транспорт и семейство адреси и дали пътят е директен или през релей.
Две показания си струва да се знаят предварително. Ако избраната двойка е хост към хост на частни адреси, медията остава на път, за който можете да разсъждавате; ако е релей към релей, разговорът изразходва капацитет на релея и зависи от наличността на тази услуга. Повреда, която спира на „проверка“ без избрана двойка, означава, че кандидатите са събрани, но никой не е преминал проверките за свързаност.
След това сравнете същите два крайни точки в същия разговор, като промените само едно одобрено условие, и приемайте резултата по двупосочна медия или данни, а не по индикатор „свързано“. Събирането на кандидати успява в много случаи, които не пренасят нито един кадър звук. Повторете разговора от другата страна на промяната и запазете двата диагностични записа, защото сравняването на два опита е по-информативно от четенето на всеки един сам. Същите крайни точки, същият кодек, една променена променлива.
Приложение, което умишлено задава политиката за транспорт на ICE на relay, иска само кандидати през релей. Тази настройка не създава релей и не поправя липсващи идентификационни данни; тя прави изискването явно, което е полезно, когато някой обвинява VPN за политика, избрана от сайта.
Пазете твърдението за поверителност толкова тясно, колкото са доказателствата
Излагането на кандидатите зависи от политиката на браузъра и приложението, а не само от състоянието на тунела, и спецификацията на W3C за връзка между партньори разглежда работата с IP като отделен въпрос. Затова свързан VPN е слаба основа за обещание, че разговорът разкрива само един избран адрес. Двама партньори зад един и същ тунел дори могат да изберат път, който никога не напуска хоста, което е едновременно подобрение на поверителността и ограничение на свързаността.
Това, което можете да кажете точно, е по-тясно и по-полезно: коя двойка кандидати е избрана, кой транспорт я е носил и дали този път е останал в тунела. Запишете тези три факта за работещ разговор и за неуспешен, и разликата обикновено посочва компонента за поправяне.
След като свързаността работи, отделете производителността от достижимостта. Загуби, закъснение, опашки и MTU са все надолу по веригата от правилна двойка кандидати, а третирането на накъсан разговор като повреда на свързаността ви връща към списъка с кандидати без причина.