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 находятся ниже правильной пары кандидатов, а отношение к прерывистому вызову как к неисправности связности без причины возвращает вас к списку кандидатов.