Какие порты нужно оставить открытыми, чтобы принудительно пустить webrtc via tcp?

Kirill

Member
  • Websocket - 8443(TCP)
  • DNS - 53(UDP)
Какие еще ?
Стрим идет с ip камеры до webcalllServer
P.S.: Остальные порты закрываю
 
Last edited:

Max

Administrator
Staff member
WCS сейчас не поддерживает WebRTC over TCP/TLS из коробки.
Для того чтобы этого заработало, нужно рядом с WCS был TURN сервер, который пропускает WebRTC через TLS.
В этой теме недавно обсуждали WebRTC стриминг через HTTPS.
Схема такая:
webrtc-over-https-tls-streaming-ip-cam.jpg

1. На WCS сервере открыт для браузера один порт TCP 443 (websocket).
2. На WCS сервере для TURN-сервера открыты UDP порты 31000-32000.
3. На TURN сервере открыт для браузера TCP 443.
4. На TURN сервере открыты все порты для WCS сервера.

Т.е. нужно на этом же физическом сервере или на отдельном установить TURN по этой инструкции:
https://flashphoner.com/docs/wcs5/w...nd_testing-firewall_traversal-turn_server.htm

После этого при коннекте передавать адрес TURN сервера:
Code:
Flashphoner.createSession({urlServer: url, mediaOptions: {"iceServers": [ { 'url': 'turn:192.168.0.1:443?transport=tcp', 'credential': 'password1', 'username': 'username1' } ], "iceTransportPolicy": "relay"}});
Чтобы заработало, нужно править код плеера в этой строчке:
https://github.com/flashphoner/flas...examples/demo/streaming/player/player.js#L104

Порты WCS конфигурируются в файлах:
server.properties
flashphoner.properties

Протестировать можно с этим демо, используя только правую часть с плеером:
https://wcs5-eu.flashphoner.com/demo2/firewall-traversal-streaming
Если закрыть на Windows все порты, кроме 443 и 53, то демо должно работать и играть поток через https.
webrtc-https-demo-firewall-443.jpg
 

Kirill

Member
WCS сейчас не поддерживает WebRTC over TCP/TLS из коробки.
Для того чтобы этого заработало, нужно рядом с WCS был TURN сервер, который пропускает WebRTC через TLS.
В этой теме недавно обсуждали WebRTC стриминг через HTTPS.
Схема такая:
View attachment 372
1. На WCS сервере открыт для браузера один порт TCP 443 (websocket).
2. На WCS сервере для TURN-сервера открыты UDP порты 31000-32000.
3. На TURN сервере открыт для браузера TCP 443.
4. На TURN сервере открыты все порты для WCS сервера.

Т.е. нужно на этом же физическом сервере или на отдельном установить TURN по этой инструкции:
https://flashphoner.com/docs/wcs5/w...nd_testing-firewall_traversal-turn_server.htm

После этого при коннекте передавать адрес TURN сервера:
Code:
Flashphoner.createSession({urlServer: url, mediaOptions: {"iceServers": [ { 'url': 'turn:192.168.0.1:443?transport=tcp', 'credential': 'password1', 'username': 'username1' } ], "iceTransportPolicy": "relay"}});
Чтобы заработало, нужно править код плеера в этой строчке:
https://github.com/flashphoner/flas...examples/demo/streaming/player/player.js#L104

Порты WCS конфигурируются в файлах:
server.properties
flashphoner.properties

Протестировать можно с этим демо, используя только правую часть с плеером:
https://wcs5-eu.flashphoner.com/demo2/firewall-traversal-streaming
Если закрыть на Windows все порты, кроме 443 и 53, то демо должно работать и играть поток через https.
View attachment 373
53 - Порт TCP ?
Блокировать естественно только входящие подключения ?
 

Max

Administrator
Staff member
53 порт не нужен серверу.
Он должен быть открыт для браузера, чтобы тот мог срезолвить доменное имя.
Т.е. если пользователь с браузером находится в корпоративной сети, у него как правило открыт 443 https и 53 UDP DNS.
 

Max

Administrator
Staff member
Блокировать естественно только входящие подключения ?
да, если на сервере
 

Kirill

Member
Закрыл все входящие порты, кроме указанных выше ( в Linux ).


Перешел на демо страницу и судя по всему поток все равно идет через udp ( проверяю тут chrome://webrtc-internals/ )
upload_2017-6-21_13-56-13.png
 

Attachments

Max

Administrator
Staff member
Вы тестируете из Chrome под Linux и через наш демо сервер wcs5-eu.flashphoner.com
Вы у себя на системе закрыли только входящие соединения.
Попробуйте закрыть и исходящие тоже. Нужно закрыть вообще весь входящий и исходящий TCP и UDP трафик, кроме TCP 443 и UDP 53.
При этом при коннекте нужно указать порт 443 (по умолчанию он 8443).
websocket-443-tcp.png
 

Kirill

Member
Сделал все по вашим инструкциям.
Но, судя во всему трафик все же идет по udp.webrtc1.jpg
iptables - upload_2017-6-22_12-48-5.png

В чем может быть проблема ?
 

Max

Administrator
Staff member
Проблемы нет.
У вас все нужные порты закрыты. Трафик идет по порту 443.
В chrome://webrtc-internals в googLocalAddress вы видите наш TURN сервер turn.flashphoner.com с IP адресом 139.59.132.28.
Параметр googLocalCandidateType relay указывает, что трафик идет через TURN сервер.
Параметр googRemoteAddress 46.101.108.90 - это адрес нашего демо сервера wcs5-eu.flashphoner.com
Параметр googTransportType udp указывает на то, что соединение между TURN и wcs5-eu по UDP.

Мы еще раз провели тест с запретом всех портов кроме 443 и 53.
1. На Windows выводим вверх три правила: разрешаем DNS (TCP,UDP - порт 53) и HTTPS (TCP порт 443).
2. Запрещаем весь остальной трафик.

firewall-block-webrtc-udp-all.jpg

3. Открываем пример Firewall Traversal Streaming
https://wcs5-eu.flashphoner.com/demo2/firewall-traversal-streaming.html
И коннектимся на порт 443: wss://wcs5-eu.flashphoner.com:443
4. Играем RTSP видео в плеере через TURN сервер.
firewall-playback-over-turn.jpg

5. Проверяем WebRTC статистику.

firewall-udp-relay.jpg
 

Kirill

Member
Благодарю за подробный ответ.
Я не верно понял взаимосвязь компонентов, в частности роль turn сервера.
 

Max

Administrator
Staff member
Окончательно убедиться можно с помощью tcpdump
Code:
tcpdump host 139.59.132.28 port 443
Эта команда должна вывести поток данных, так как видео трафик заходит по порту 443 c TURN-севрера.
Code:
tcpdump host 46.101.108.90 udp
Эта команда не должна ничего выводить, т.к. с WCS сервером нет пакетов по UDP.
 

Kirill

Member
Возможно уже в другую ветку надо было писать, но проблема проявилась в результате тестирования получения потока webrtc через https.
В процессе тестирования потока через 1 минуту видео превращается в покадровое видео ( очень медленное ) со скачками в 10 с .
С чем это может быть связано ?
Стрим - старый доступ остался(который вам ранее высылал).
 

Max

Administrator
Staff member
Пока не проверяли.
Планируем сегодня проверить, если поток доступен.
 

Kirill

Member
Да, есть вопрос не касающийся проблемы - по какому протоколу идет контент до юзера от TURN сервера ?
 

Max

Administrator
Staff member
Да, есть вопрос не касающийся проблемы - по какому протоколу идет контент до юзера от TURN сервера ?
По протоколу TLS устанавливается шифрованное соединение с TURN сервером.
Далее данные идут по TCP.
 

Max

Administrator
Staff member
Вынуждены будем выключить поток в 18:30
Тогда с вашим потоком сможем продолжить в понедельник.
Пока предполагаем, что фризы связаны с потерями UDP пакетов между TURN-сервером и WCS.
У нас они разнесены по разным серверам и сетям.
В идеале, должны быть на одном физическом сервере.
Попробуем поставить TURN на ту же машину и проверим что получится.

Когда играем поток с низким битрейтом 640x360, через TURN, потерь и фризов нет.
 

Max

Administrator
Staff member
Еще одно замечание.

Преимущество WebRTC в том, что оно дает низкую задержку при передаче через UDP.
Если вы заворачиваете WebRTC в TCP, вы это преимущество теряете.

В этом случае, более оптимально было бы стримить через Media Source.
Преимущества:
- работает в тех же браузерах, что и WebRTC, без установки плагинов
- работает сразу через TCP (Websockets)

Протестировать можно здесь:
https://wcs5-eu.flashphoner.com/client2/examples/demo/streaming/player/player.html?mediaProvider=MSE
 

Max

Administrator
Staff member
В процессе тестирования потока через 1 минуту видео превращается в покадровое видео ( очень медленное ) со скачками в 10 с .
С чем это может быть связано ?
Стрим - старый доступ остался(который вам ранее высылал).
Протестировали со своими RTSP стримами через TURN. Проблема не воспроизводится.
Ваш стрим недоступен. Сможем продолжить тестирование, как только стрим будет доступен.
Или пришлите новый на ту же почту logs@flashphoner.com
 
Top