STUN — это… Что такое STUN?
STUN (сокр. от англ. Session Traversal Utilities for NAT, Утилиты трассировки сессий для NAT, ранее англ. Simple Traversal of UDP through NATs, Простое прохождение UDP через серверы NAT) — это сетевой протокол, который позволяет клиенту, находящемуся за сервером трансляции адресов (или за несколькими такими серверами), определить свой внешний IP-адрес, способ трансляции адреса и порт во внешней сети, связанный с определённым внутренним номером порта. Эта информация используется для установления соединения UDP между двумя хостами в случае, если они оба находятся за маршрутизатором NAT. Протокол определён в рекомендации RFC 5389 (предыдущая версия — RFC 3489).
Обзор протокола
Такие протоколы, как SIP, используют пакеты UDP для передачи голоса, изображения или текста по IP-сетям. К сожалению, если обе общающиеся стороны находятся за NAT’ом, соединение не может быть установлено обычным способом. Именно здесь STUN и оказывается полезным.
STUN — это клиент-серверный протокол. VoIP-клиент может включать в себя реализацию клиента STUN, который отправляет запрос серверу STUN. Затем сервер STUN отправляет клиенту обратно информацию о том, каков внешний адрес маршрутизатора NAT, и какой порт открыт на NAT для приема входящих запросов обратно во внутреннюю сеть.
Ответ также позволяет клиенту STUN определить, какой тип трансляции адреса используется, поскольку различные типы маршрутизаторов NAT обрабатывают входящие UDP пакеты по-разному. STUN работает с тремя из четырех основных типов: Full Cone NAT, Symmetric NAT, Address Restricted NAT и Port Restricted NAT. В случае ограничивающего NAT клиент должен отправить пакет на удаленный узел, прежде чем NAT начнет пропускать пакеты от удаленного узла к клиенту. STUN не будет работать с симметричным NAT’ом (также называемым «двусторонний NAT»), который часто встречается в сетях больших компаний. При симметричном NAT IP-адрес сервера STUN отличается от конечного адреса, и из-за этого адрес NAT, который видит STUN-сервер, отличается от конечного адреса, который будет использоваться для отправки пакетов клиенту. Более подробная информация о типах NAT здесь.
Как только клиент обнаружил свой внешний адрес, он может передать его узлу, с которым проходит соединение. Если на пути встречаются трансляторы типа «полный конус», любая из двух сторон может начать общение. Если же выполняется трансляция типа «ограниченный конус» или «порт ограниченного конуса», обе стороны должны начать передачу данных совместно.
Нужно отметить, что методы, описываемые в рекомендации RFC 3489, не обязательно требуют использования протокола STUN; они могут использовать в рамках любого протокола, основанного на UDP.
Соединение с STUN-сервером устанавливается через UDP-порт 3478, однако сервер предлагает клиентам выполнить проверку также и альтернативного IP-адреса и номера порта (у серверов STUN есть два IP-адреса). RFC устанавливает, что выбор порта и IP является произвольным.
См. также
TURN
Ссылки
- STUNT — «STUN and TCP too», расширение STUN для включения функциональности TCP
Реализация
Публичные STUN-серверы
- stun.ekiga.net
- stun.ideasip.com (без поддержки XOR_MAPPED_ADDRESS)
- stun.softjoys.com (нет записи DNS SRV) (без поддержки XOR_MAPPED_ADDRESS)
- stun.voipbuster.com (нет записи DNS SRV) (без поддержки XOR_MAPPED_ADDRESS)
- stun.voxgratia.org (нет записи DNS SRV) (без поддержки XOR_MAPPED_ADDRESS)
- stun.xten.com
- stunserver.org (смотрите их правила пользования)
- stun.sipgate.net:10000
- numb.viagenie.ca (http://numb.viagenie.ca) (XOR_MAPPED_ADDRESS только при наличии волшебных номеров в transaction ID, как в rfc3489bis)
- stun.ipshka.com (подробнее: http://www.ipshka.com/main/help/hlp_stun.php {{{1}}})
- stun.phonepower.com
- sip1.lakedestiny.cordiaip.com
- stun.1und1.de
- stun.bluesip.net
- stun.callwithus.com
- stun.counterpath.net
- stun.e-fon.ch
- stun.endigovoip.com
- stun.gmx.net
- stun.ideasip.com
- stun.ipns.com
- stun.noc.ams-ix.net
- stun.phoneserve.com
- stun.rnktel.com
- stun.sipgate.net
- stun.voip.aebc.com
- stun.voipgate.com
- stun.voxgratia.org
- stun.xten.com
- stun1.voiceeclipse.net
- stunserver.org
- provserver.televolution.net
- stun.ekiga.net
- stun.internetcalls.com
- stun.sipdiscount.com
- stun.softjoys.com
- stun.t-online.de
- stun.voipbuster.com
- stun.voipcheap.com
- stun.voipplanet.nl
- stun.voipraider.com
dic.academic.ru
STUN — Википедия
Материал из Википедии — свободной энциклопедии
STUN (сокр. от англ. Session Traversal Utilities for NAT, Утилиты прохождения сессий для NAT, ранее англ. Simple Traversal of UDP through NATs, Простое прохождение UDP через серверы NAT) — это сетевой протокол, который позволяет клиенту, находящемуся за сервером трансляции адресов (или за несколькими такими серверами), определить свой внешний IP-адрес, способ трансляции адреса и порта во внешней сети, связанный с определённым внутренним номером порта. Эта информация используется для установления соединения UDP между двумя хостами в случае, если они оба находятся за маршрутизатором NAT. Протокол определён в рекомендации RFC 5389 (предыдущая версия — RFC 3489).
Обзор протокола
Существуют протоколы, использующие пакеты UDP для передачи голоса или изображений по IP-сетям. Если обе общающиеся стороны находятся за NAT’ом, соединение не может быть установлено обычным способом. Именно здесь STUN и оказывается полезным.
STUN — это клиент-серверный протокол. VoIP-клиент может включать в себя реализацию клиента STUN, который отправляет запрос серверу STUN. Затем сервер STUN отправляет клиенту обратно информацию о том, каков внешний адрес маршрутизатора NAT, и какой порт открыт на NAT для приема входящих запросов обратно во внутреннюю сеть.
Ответ также позволяет клиенту STUN определить, какой тип трансляции адреса используется, поскольку различные типы маршрутизаторов NAT обрабатывают входящие UDP пакеты по-разному. STUN работает с тремя из четырёх основных типов: Full Cone NAT, Symmetric NAT, Address Restricted NAT и Port Restricted NAT. В случае ограничивающего NAT клиент должен отправить пакет на удаленный узел, прежде чем NAT начнет пропускать пакеты от удаленного узла к клиенту. STUN не будет работать с симметричным NAT’ом (также называемым «двусторонний NAT»), который часто встречается в сетях больших компаний. При симметричном NAT IP-адрес сервера STUN отличается от конечного адреса, и из-за этого адрес NAT, который видит STUN-сервер, отличается от конечного адреса, который будет использоваться для отправки пакетов клиенту.
Как только клиент обнаружил свой внешний адрес, он может передать его узлу, с которым проходит соединение. Если на пути встречаются трансляторы типа «полный конус», любая из двух сторон может начать общение. Если же выполняется трансляция типа «ограниченный конус» или «порт ограниченного конуса», обе стороны должны начать передачу данных совместно.
Нужно отметить, что методы, описываемые в рекомендации RFC 3489, не обязательно требуют использования протокола STUN; они могут использовать в рамках любого протокола, основанного на UDP.
Соединение с STUN-сервером устанавливается через UDP-порт 3478, однако сервер предлагает клиентам выполнить проверку также и альтернативного IP-адреса и номера порта (у серверов STUN есть два IP-адреса). RFC устанавливает, что выбор порта и IP является произвольным.
См. также
Ссылки
- STUNT — «STUN and TCP too», расширение STUN для включения функциональности TCP
Реализация
Публичные STUN-серверы
- stun.ekiga.net
- stun.sipnet.ru
- stun.ideasip.com (без поддержки XOR_MAPPED_ADDRESS)
- stun.softjoys.com (нет записи DNS SRV) (без поддержки XOR_MAPPED_ADDRESS)
- stun.voipbuster.com (нет записи DNS SRV) (без поддержки XOR_MAPPED_ADDRESS)
- stun.voxgratia.org (нет записи DNS SRV) (без поддержки XOR_MAPPED_ADDRESS)
- stun.sipgate.net:10000
- numb.viagenie.ca (http://numb.viagenie.ca) (XOR_MAPPED_ADDRESS только при наличии волшебных номеров в transaction ID, как в rfc3489bis)
- stun.ipshka.com (подробнее: http://www.ipshka.com/main/help/hlp_stun.php {{{1}}})
- stun.phonepower.com
- stun.1und1.de
- stun.bluesip.net
- stun.callwithus.com
- stun.counterpath.net
- stun.e-fon.ch
- stun.endigovoip.com
- stun.gmx.net
- stun.ideasip.com
- stun.noc.ams-ix.net
- stun.phoneserve.com
- stun.sipgate.net
- stun.voip.aebc.com
- stun.voipgate.com
- stun.voxgratia.org
- stun1.voiceeclipse.net
- provserver.televolution.net
- stun.internetcalls.com
- stun.sipdiscount.com
- stun.softjoys.com
- stun.t-online.de
- stun.voipbuster.com
- stun.voipcheap.com
- stun.voipplanet.nl
- stun.voipraider.com
wikipedia.green
Как мы делали сервис на WebRTC / TopTechPhoto corporate blog / Habr
Статей про WebRTC уже достаточно много и в интернетах, и на Хабре (здесь и здесь), повторять их ещё раз не имеет особого смысла, поэтому тут приведем наш личный опыт и впечатления, полученные при разработке live.pics.io.
Идея
Live.pics.io позволяет создавать приватные сессии для совместного просмотра и обсуждения изображений голосом. Это могут быть любые изображения: от фотографий, до макетов дизайна и презентаций. Pазрабатывая pics.io, мы достаточно хорошо научились работать с разными raw форматами в браузере, поэтому можно не заморачиваться с конвертацией и закидывать фотографии сразу после съемки (будут рады владельцы Canon’ов и Nikon’ов, остальные камеры пока требуют конвертации в DNG).
Очень коротко о webRTC
Exoskeleton vs Backbone
Так уж случилось, что наш основной проект (pics.io) разрабатывается на Backbone. Мы давно хотели попробовать распиареный Exoskeleton, который, как бы, то же самое… Но не совсем. В нашем случае Exoskeleton не так уж необходим, но нам просто захотелось поиграться с новой штукой и выпустить ее в продакшн. Помоему мы не прогадали. Еще надо отдать должное автору @PaulMiller, который очень активно поддерживает свое детище. Вообще, мы не то чтобы ненавидим jQuery, от которого Exoskeleton спасает, но мы убедились, что под современные браузеры можно писать на чистом JS. Я искренне надеюсь, что Exoskeleton повторит путь Lodash и завоюет сердца бекбонщиков.
WebRTC via PeerJS
Мы решили, что правильнее и быстрее для развёртывания WebRTC части будет использовать готовое и протестированное решение. После изучения нескольких open source проектов, которые оборачивают WebRTC сервисы, выбор пал на PeerJS: отчасти из-за большого количества звездочек на GitHub, а отчасти из-за совета @Lvivsky, который собаку съел на создании библиотеки speaker на Dart/WebRTC.
PeerJS — это обертка над WebRTC, которая позволяет абстрагироваться от его внутренностей. В конце концов нам всё же пришлось поковыряться в его исходниках, когда мы наткнулись на ограничение передаваемых файлов по RTCDataChannel в ~6Mb. В целом, библиотека оставила только приятные впечатления, да и мейнтейнеры проекта оперативно нам помогали.
Первое впечатление от PeerJS было изумительным: одна строка на сервер сайде, отличный интерфейс на клиенте, поддержка Media call (audio/video) и DataConnections. И что самое приятное PeerJS помогает продолеть ограничение на объем передаваемых данных через DataConnections в Chrome 31, который пока не научился передавать больше 1100 байт. Но не все коту масленица, RTCDataChannel падает с абсолютно неинформативным ворнингом Uncaught SyntaxError: An invalid or illegal string was specified
. После пары литров кофе и общения с контрибьюторами PeerJS выяснилось, что Chrome ограничивает скорость передачи данных до 60kb/s. Вдобавок оказалось что максимальный размер передаваемого файла получился ~6,3M. В приниципе, этого достаточно для того, чтобы передавать jpeg, извлеченный из raw-файла.
NAT, NAT, NAT
Накануне релиза мы не могли не облажаться. Соединение в локальной сети работало превосходно (как MediaStream, так и DataChannel), но когда кто-то подключался не из офиса, наш восторг пропадал, начинались необъяснимые проблемы, которые воспроизводились нестабильно. То звук, то данные до гостей не доходили.
Мы выделили несколько пунктов которые могли влиять на это:
- DataChannel — который был коннектором между всеми пирами
- Банальный баг, который было трудно воспроизвести
- Непроходимость NAT
Начали с того, что вместо DataChannel добавили Signaling сервер на WebSocket, c помощью которого связали существующие пиры, но это не решило проблему.
Поиски бага тоже не увенчались успехом. Их было найдена уйма, но и это не помогло.
“Все-таки NAT” — решили мы и, как оказались, правы. Странно, но решение этой проблемы не очень хорошо описано в документации. Изначально большинство библиотек использует по умолчанию сервера:
[{url:'stun:stun.l.google.com:19302'},
{url:'turn:[email protected]:80', credential: 'homeo'}]
Но, к сожалению, нам не хватило этого и пришлось серфить в поисках дополнительных серверов. В итоге мы получили огромный конфиг для ICEServers
[{url:'stun:stun01.sipphone.com'},
{url:'stun:stun.ekiga.net'},
{url:'stun:stun.fwdnet.net'},
{url:'stun:stun.ideasip.com'},
{url:'stun:stun.iptel.org'},
{url:'stun:stun.rixtelecom.se'},
{url:'stun:stun.schlund.de'},
{url:'stun:stun.l.google.com:19302'},
{url:'stun:stun1.l.google.com:19302'},
{url:'stun:stun2.l.google.com:19302'},
{url:'stun:stun3.l.google.com:19302'},
{url:'stun:stun4.l.google.com:19302'},
{url:'stun:stunserver.org'},
{url:'stun:stun.softjoys.com'},
{url:'stun:stun.voiparound.com'},
{url:'stun:stun.voipbuster.com'},
{url:'stun:stun.voipstunt.com'},
{url:'stun:stun.voxgratia.org'},
{url:'stun:stun.xten.com'},
{
url: 'turn:numb.viagenie.ca',
credential: 'muazkh',
username: '[email protected]'
},
{
url: 'turn:192.158.29.39:3478?transport=udp',
credential: 'JZEOEt2V3Qb0y27GRntt2u2PAYA=',
username: '28224511:1379330808'
},
{
url: 'turn:192.158.29.39:3478?transport=tcp',
credential: 'JZEOEt2V3Qb0y27GRntt2u2PAYA=',
username: '28224511:1379330808'
}]
После этого мы благополучно пробили стены NAT и услышали голоса людей из других подсетей, городов и стран.
Проблемы технологии и реализации
Кроссбраузерная совместимость.
На данный момент у реализаций WebRTC есть проблема c работой между разными браузерами, но и Firefox и Chrome активно двигаются в этом направлении. Через пару-тройку версий web уже получит эту поддержку.
Пробивание NAT.
STUN и TURN — пожалуй основная проблема, о которой почему-то мало пишут. Постоянно тестируя, мы заметили, что внутри одной сети все друг-друга слышали и прекрасно получали данные, но люди, которые сидели за роутерами испытывали постоянные проблемы. На это мы потратили огромное количество нервов, так как не особо тесно работали с сетевыми протоколами и не до конца понимали, зачем это нужно. Теперь знаем — из приватных сетей, класса A, B, C, люди в сети класса public выходят только через NAT. Эта технология не удобна тем, что два хоста за NAT’ами не могут общаться друг с другом. Поэтому и придумали эти технологии.
Non-Stop coding.
Очень крутое времяпрепровождение, масса новых эмоций и навыков и чувство удовлетворения от того, что на выходе готовый продукт. Но вы рискуете быть выжатым весь следующий день.
Выводы
- скорость передачи данных в PeerJS ограничена 60kb/s
- максимальный передаваемый размер файла ~6MB
- нужно подчеркивать момент с NAT+STUN+TURN
- вакансия jQuery-разработчик должна стать менее популярной
- не забывайте указывать схему для ваших URI
- рано или поздно WebRTC захватит мир
- WebRTC разработчики ненавидят свой голос
- мы любим все новое, сырое и поломанное
- недельный безпрерывный педалинг жутко выматывает
Любимые ссылки
www.html5rocks.com/en/tutorials/webrtc/basics
www.youtube.com/watch?v=p2HzZkd2A40
www.youtube.com/watch?v=E8C8ouiXHHk
www.webrtc-experiment.com
www.webrtc.org
speakerdeck.com/feross/webrtc-data-black-magic
habr.com
Настройка WebRTC в Asterisk 13 – Voxlink
DNS-имя
Первое, что нужно для нормальной работы WebRTC – DNS-имя для вашего сервера Asterisk. В принципе, WebRTC будет работать и с IP-адресом, но такое решение годится только для тестирования. В описываемом примере DNS-имя сервера Asterisk будет fubar-pbx.local. Указывать DNS-имя где-либо в настройках самого сервера телефонии не обязательно, поэтому переходим к следующему пункту.
SSL-сертификат
SSL-сертификат для работы WebRTC нужен обязательно. Соединение по websocket может быть нешифрованным, но голос может передаваться только по SRTP с использованием DTLS, наличие сертификата для этого обязательно. Для нормальной работы WebRTC, сертификат должен быть доверенным для всех браузеров, в которых будет запускаться WebRTC-клиент, поэтому сертификат придётся купить или воспользоваться корпоративным центром сертификации.
Для тестирования сгодится и сертификат, сгенерированный с помощью EasyRSA, открытый ключ полученного центра сертификации даже можно будет сделать доверенным для клиентов и использовать полученный сертификат в продашн. Естественно, в поле сертификата CN должно быть указано DNS-имя (или IP-адрес, если Вы всё-таки решили использовать IP-адрес). Ниже приведены команды, с помощью которых можно создать сертификат, используя актуальную версию EasyRSA (скачивание, распаковка и переход в директорию с EasyRSA – упражнение для читателя).
yes | cp ./vars.example ./vars
# Заполняем параметры EasyRSA приемлимыми значениями
sed -ri ‘s|^#set_var EASYRSA_REQ_COUNTRY[[:space:]]+.*|set_var EASYRSA_REQ_COUNTRY “RU”|;
s|^#set_var EASYRSA_REQ_PROVINCE[[:space:]]+.*|set_var EASYRSA_REQ_PROVINCE “Province”|;
s|^#set_var EASYRSA_REQ_CITY[[:space:]]+.*|set_var EASYRSA_REQ_CITY “City”|;
s|^#set_var EASYRSA_REQ_ORG[[:space:]]+.*|set_var EASYRSA_REQ_ORG “Organization”|;
s|^#set_var EASYRSA_REQ_EMAIL[[:space:]]+.*|set_var EASYRSA_REQ_EMAIL “[email protected]”|;
s|^#set_var EASYRSA_REQ_OU[[:space:]]+.*|set_var EASYRSA_REQ_OU “Unit”|’ ./vars
sed -ri ‘s|^#set_var EASYRSA_KEY_SIZE[[:space:]]+.*|set_var EASYRSA_KEY_SIZE 2048|;
s|^#set_var EASYRSA_ALGO[[:space:]]+.*|set_var EASYRSA_ALGO rsa|;
s|^#set_var EASYRSA_CA_EXPIRE[[:space:]]+.*|set_var EASYRSA_CA_EXPIRE 3650|;
s|^#set_var EASYRSA_CERT_EXPIRE[[:space:]]+.*|set_var EASYRSA_CERT_EXPIRE 3650|;
s|^#set_var EASYRSA_DIGEST[[:space:]]+.*|set_var EASYRSA_DIGEST “sha256″|’ ./vars
# Создаём ключ и сертификат центра сертификации
./easyrsa –batch init-pki
./easyrsa –batch –req-cn=”$(uuid)” build-ca nopass
# Создаём и подписываем сертификат для сервера
./easyrsa –batch –req-cn=fubar-pbx.local gen-req FubarPBX nopass
./easyrsa –batch sign server FubarPBX
# Конвертируем полученный сертификат в формат PEM
openssl x509 -in pki/issued/FubarPBX.crt -out pki/issued/FubarPBX.pem -outform PEM
Нужные нам файлы:
./pki/ca.crt – сертификат центра сертификации
./pki/issued/FubarPBX.pem – сертификат сервера
./pki/private/FubarPBX.key – закрытый ключ сервера
Все эти файлы нужно загрузить через модуль FreePBX «Certificate Management» (выберите пункт «New Certificate» → «Upload Certificate» при добавлении сертификата)
В поле Private Key вставьте закрытый ключ, в поле Certificate – сертификат, в поле Trusted Chain – сертификат центра сертификации, затем нажмите «Generate Certificate» (FreePBX сохранит данные сертификата в файлы в директории /etc/asterisk/keys).
STUN-сервер
Даже если между клиентом и сервером не будет NAT, для нормальной работы WebRTC требуется наличие механизма ICE, как минимум, для того, чтобы клиент и сервер могли определить, какой из своих IP-адресов указывать в SDP. Совсем без ICE, WebRTC работать не будет, т.к. в заголовки c= в SDP будут вписываться либо все IP-адреса хоста, либо ни одного. Для реализации ICE мы поднимем простой STUN-сервер, он не поможет нам обойти большую часть современных NAT, но от него это и не требуется. NAT будем обходить с помощью привычного механизма SIP Comedia, а STUN здесь нужен для того, чтобы клиент и сервер WebRTC могли определить правильный IP-адрес для подстановки в SDP.
STUN-сервер желательно установить на другом хосте (не на сервере Asterisk), на CentOS 6 можно поставить из EPEL пакет stun-server. Для работы STUN-сервера необходимо наличие двух IP-адресов, в нашем случае это будут адреса 192.168.100.55/24 и 192.168.100.56/24, оба настроены на сетевом интерфейсе eth0.
Также нам понадобится init-скрипт для STUN-сервера (в пакет stun-server он почему-то не входит), приведённый init-скрипт был позаимствован здесь
#!/bin/sh
#
# Startup/shutdown script for the STUN-Server
#
# Linux chkconfig stuff:
#
# chkconfig: 35 90 10
# description: Startup/shutdown script for the STUN-Server
#
# Source function library.
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 0
fi
DAEMON=/usr/sbin/stun-server
IP1=192.168.100.55
IP2=192.168.100.56
prog=stun-server
start () {
echo -n $”Starting $prog: “
# start daemon
daemon $DAEMON -b -h $IP1 -a $IP2 2>/dev/null
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/stun-server
return $RETVAL
}
stop () {
# stop daemon
echo -n $”Stopping $prog: “
killproc $DAEMON
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/stun-server
}
restart() {
stop
start
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
condrestart)
[ -f /var/lock/subsys/stun-server ] && restart || :
;;
status)
status $DAEMON
;;
*)
echo $”Usage: $prog {start|stop|restart|condrestart|status}”
exit 1
esac
exit $RETVAL
Скрипт нужно сохранить в файл /etc/init.d/stun-server
Что делать дальше, должно быть очевидно
chkconfig –add stun-server
service stun-server start
Если stun-server не работает можете запустить его вручную и посмотреть, на что он ругается
stun-server -v -h 192.168.100.55 -a 192.168.100.56
Важное замечание насчёт STUN – STUN-сервер должен вернуть WebRTC-серверу IP-адрес, на который WebRTC-клиент сможет отправить RTP-трафик, и RTP-трафик дойдёт до WebRTC-сервера. Т.е. STUN-сервер, описанный здесь, подойдёт для подключения клиентов из локальной сети и из удалённых подразделений по VPN. Если в данном сценарии использовать, к примеру, публичный STUN-сервер, WebRTC-сервер подставит в SDP внешний IP-адрес и WebRTC-клиент будет пытаться отправлять RTP-трафик на внешний IP-адрес со всеми вытекающими последствиями.
Это ещё не всё, Asterisk тоже должен использовать настроенный STUN-сервер. Для этого добавьте в раздел [general] файла /etc/asterisk/rtp.conf следующие параметры:
icesupport=yes
stunaddr=192.168.100.55:3478
Если используете FreePBX, дополнительные параметры нужно указать в файле rtp_custom.conf следующим образом
[general](+)
icesupport=yes
stunaddr=192.168.100.55:3478
Встроенный HTTP-сервер Asterisk
Встроенный HTTP-сервер Asterisk будет принимать websocket-соединения от WebRTC-клиентов, но для начала его нужно включить, для этого зайдите в раздел FreePBX «Settings» → «Advanced Settings»
Включите параметр «Enable TLS for the mini-HTTP Server» (параметр «Enable the mini-HTTP Server» не нужно включать, если не планируете использовать подключения к websocket без шифрования) и укажите путь к загруженному ранее сертификату и ключу.
Настройки в файле /etc/asterisk/http.conf (если не используете FreePBX):
[general]
enabled=no
tlsenable=yes
tlsbindaddr=0.0.0.0:8089
tlscertfile=/etc/asterisk/keys/FubarPBX.pem
tlsprivatekey=/etc/asterisk/keys/FubarPBX.key
Учётная запись SIP для подключения webrtc-клиента
Создайте обычную учётную запись для канала chan_sip и укажите дополнительно следующие параметры:
NAT Mode: Yes – (force_rport,comedia)
Transport: WSS Only
Enable AVPF: Yes
Force AVP: Yes
Enable ICE Support: Yes
Enable rtcp Mux: Yes
Enable Encryption: Yes (SRTP only)
Enable DTLS: Yes
Use Certificate: FubarPBX (выберите из списка загруженный ранее сертификат)
DTLS Verify: Fingerprint
DTLS Setup: Act/Pass
Те же дополнительные параметры для указания в файле sip.conf в том же порядке:
nat=force_rport,comedia
transport=wss
avpf=yes
force_avp=yes
icesupport=yes
rtcp_mux=yes
encryption=yes
dtlsenable=yes
dtlscertfile=/etc/asterisk/keys/FubarPBX.crt
dtlsprivatekey=/etc/asterisk/keys/FubarPBX.key
dtlsverify=fingerprint
dtlssetup=actpass
Для примера был создан номер 100 со случайным паролем.
Подключение демо-клиента sipML5
Настройка WebRTC завершена, протестируем работу с помощью демо-клиента sipML5. sipML5 выбран из-за того, что только у него в демо-клиенте доступны все необходимые расширенные настройки.
Демо-клиент доступен по ссылке https://www.doubango.org/sipml5/call.htm?svn=250
Для начала зайдите в «Expert Settings»
Включите опцию «Disable Video», укажите URL для подключения к websocket (значение текстом wss://fubar-pbx.local:8089/ws) и укажите свой STUN-сервер (значение текстом – [{ url: ‘stun:192.168.100.55:3478’ }])
Сохраните расширенные настройки и вернитесь на основную страничку демо-клиента
Внесите базовые параметры для подключения и нажмите «Login», если все настройки внесены верно, сверху должна появиться надпись Connected (также команда «sip show peers» в CLI Asterisk должна отобразить подключение клиента с учётной записью 100). Также, если настройки, связанные со STUN, выполнены верно, звук должен проходить в обе стороны без какой-либо заметной задержки в начале разговора.
voxlink.ru
сервер — это… Что такое STUN-сервер?
STUN — (сокр. от англ. Session Traversal Utilities for NAT, Утилиты трассировки сессий для NAT, ранее англ. Simple Traversal of UDP through NATs, Простое прохождение UDP через серверы NAT) это сетевой протокол, который позволяет клиенту … Википедия
RTP — Протокол RTP (англ. Real time Transport Protocol) работает на транспортном уровне и используется при передаче трафика реального времени. Протокол был разработан Audio Video Transport Working Group в IETF и впервые опубликован в 1996 году как … Википедия
Traversal Using Relay NAT — Необходимо проверить качество перевода и привести статью в соответствие со стилистическими правилами Википедии. Вы можете помочь улучшить эту статью, исправив в ней ошибки. Оригинал на английском языке … Википедия
Teredo — сетевой протокол, предназначенный для передачи IPv6 пакетов через сети IPv4, в частности через устройства, работающие по технологии NAT, путём их инкапсуляции в UDP дейтаграммы Содержание 1 Цели 2 Обзор … Википедия
Список портов TCP и UDP — Эта статья содержит незавершённый перевод с английского языка. Вы можете помочь проекту, переведя её до конца. В данной статье приведён список портов TCP и UDP, ко … Википедия
NAT — В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете отредактировать эту статью … Википедия
CallWeaver — Тип сервер IP телефонии Разработчик сообщество Операционная система UNIX подобные Последняя версия 1.2.0.1 (27 мая 2008 года) Тестовая версия 1.2.1 rc1 (31 марта 2009 года) Лицензия … Википедия
Baka to Test to Shoukanjuu — バカとテストと召喚獣 Жанр романтическая комедия … Википедия
Частный IP-адрес — Частный IP адрес[1][2] (англ. private IP address), также называемый внутренним, внутрисетевым, локальным или «серым» IP адрес, принадлежащий к специальному диапазону, не используемому в сети Интернет. Такие адреса предназначены для… … Википедия
Исчерпание IPv4-адресов — Динамика количества свободных блоков /8 с 1995 года Исчерпание IPv4 адресов истощение запаса нераспределённых адресов протокола IPv4. Адресное пространство глобально управляется американской некоммерческой организацией … Википедия
universal_ru_en.academic.ru