STUN расшифровывается как Simple Traversal of User Datagram Protocol (UDP) through Network Address Translators (NAT’s) (упрощенное прохождение UDP пакетов через NAT). Как правило протокол STUN используется в различных сетевых схемах, но нам он интересен с точки зрения VoIP. В настоящее время VoIP базируется, в основном, на основе протокола SIP. На практике, большинство устройств, использующих протокол SIP, работают за роутером или файрволом, с чем возникает ряд проблем, связанных с некорректным прохождение сигнализации или голоса. Протокол STUN помогает решить эти проблемы b позволяет SIP устройствам, работающим за NAT, узнать свой публичный IP адрес и порт
Цель протокола STUN
Основной целью протокола STUN, является помощь устройствам, находящимся за NAT, узнать свой публичный IP адрес. Также протокол STUN позволяет устройствам, подключенным за шлюзом, обнаружить проброс портов, сделанный самим шлюзом (NAT), т.е. какой порт другие устройства могут использовать для подключения из публичной сети. Обратите внимание, что шлюзы и маршрутизаторы не всегда делают пробросы портов, это зависит от типа NAT и от того, как он настроен.
STUN также используется для обновления привязки NAT, например, как механизм Keep-Alive при использовании Restricted Cone NAT или Port Restricted cone NAT. При прохождении трафика через такие конфигурации NAT, внутренний адрес и порт сопоставляется с конкретным внешним адресом и портом. Но если такая привязка адреса и порта не используется после истечения определенного количества времени (в зависимости от конфигурации устройства), то такую привязку NAT исключает из обслуживания. Поэтому, когда внутреннее устройство SIP пытается подключиться снова к внешнему устройству (которое может быть тем же устройством, к которому было подключение ранее), используя тот же внутренний IP и порт, маршрутизатор назначит предыдущий IP адрес и порт.
Протокол STUN
STUN это протокол типа «клиент-сервер». STUN сервер обычно работает на протоколах TCP и UDP и прослушивает порт 3478. Клиент обычно обращается к STUN серверу на конкретный IP адрес и порт (3478), но сервер может использовать для выполнения запросов-ответов и альтернативный IP адрес и номер порт.
Сценарий работы STUN сервера
На диаграмме ниже мы видим типичный запрос и ответ STUN сервера:
- Шаг 1: Компьютер A отправляет STUN запрос, через роутер 192.168.1.1, к внешнему STUN серверу с IP адресом 64.25.58.65.
- Шаг 2: Роутер (192.168.1.1) перенаправляет запрос к STUN серверу (64.25.58.65) и меняет порт 5060 на 15060.
- Шаг 3: STUN сервер (64.25.58.65) отправляет ответ в сторону компьютера A , через роутер с публичным IP адресом 212.128.56.125, указывая, что первоначальный запрос был получен с IP адреса 212.128.56.125 и порта 15060
Когда компьютер устанавливает сеанс связи, на основе протокола SIP, с внешним устройством, он может уведомить внешнее устройство, что отправку пакетов обратно к компьютеру А следует производить на IP адрес 212.128.56.125 и порт 15060. Как сказано выше, протокол STUN играет очень важную роль при создании сеанса связи между устройствами, находящимися за NAT.
Поскольку SIP устройства используют протокол UDP в качестве транспортного протокола, поэтому протокол STUN широко используется в SIP сигнализации. Ниже мы увидим, примеры SIP запросов и ответов при использовании STUN сервера.
Отправка SIP сообщений без использования протокола STUN
Ниже приводится пример SIP сообщений типа REGISTER. SIP устройство, работает за NAT и пытается зарегистрироваться в качестве внутреннего номера 101 на IP-АТС (voipproducts.org – АТС находится за пределами локальной сети SIP устройства). SIP устройство не использует протокол STUN.
REGISTER sip:voipproducts.org SIP/2.0
Via: SIP/2.0/UDP 192.168.2.14:7214;branch=z9hG4bK-d8754z;rport
Max-Forwards: 70
Contact: : <sip:101@192.168.2.14:7214;rinstance=0639bae5043c66ac></sip:101@192.168.2.14:7214;rinstance=0639bae5043c66ac>
To: “account1″ <sip:101@voipproducts.org></sip:101@voipproducts.org>
From: “account1″<sip:101@voipproducts.org>;tag=0a75d76e</sip:101@voipproducts.org>
Call-ID: OTcxMDU5MGNhNTAxNzgzYjZkODVkY2I3MmE3NDhlNzQ.
CSeq: 1 REGISTER
Expires: 3600
Content-Length: 0
From the above we can see that:
Contact:<sip:101@192.168.2.14:7214;rinstance=0639bae5043c66ac></sip:101@192.168.2.14:7214;rinstance=0639bae5043c66ac>
В поле “Contact” указан локальный IP адрес SIP устройства (192.168.2.14) и порт 7214. Таким образом, SIP устройство, указывает, что соединение необходимо установить с IP адресом 192.168.2.14 и портом 7214. Но IP-АТС, которая находится не в локальной сети SIP устройства, не сможет установить сеанс связи или отправить ответное SIP сообщение, т.к. IP адреса локальных сетей не маршрутизируются в сети Интернет.
Использование STUN сервера
Если SIP устройство использует STUN сервер, то SIP устройство отправляет запрос на STUN сервер и ждет от него ответа. Такой запрос обычно делается во время загрузки SIP устройства или прежде чем создать новое соединение. Ниже приводится пример ответа STUN сервера:
Message Type: Binding Response(0×0101)
Message Length: 0×0044
Message Transaction ID: E753D76EA857A24DA38A229F7576E18E
Attribute: MAPPED-ADDRESS
Attribute Type: MAPPED-ADDRESS(0×0001)
Attribute Length: 8
Protocol Family: IPv4 (0×0001)
Port: 6023
IP: 78.158.143.115 (78.158.143.115)
Attribute: SOURCE-ADDRESS
Attribute Type: SOURCE-ADDRESS(0×0004)
Attribute Length: 8
Protocol Family: IPv4 (0×0001)
Port: 3478
IP: 10.252.131.113 (10.252.131.113)
Attribute: CHANGED-ADDRESS
Attribute Type: CHANGED-ADDRESS(0×0005)
Attribute Length: 8
Protocol Family: IPv4 (0×0001)
Port: 3479
IP: 75.101.138.128 (75.101.138.128)
Поясним представленный ответ STUN сервера:
Message Type: Binding Response(0×0101)
Message Length: 0×0044
Message Transaction ID: E753D76EA857A24DA38A229F7576E18E
Message type: Это поле указывается тип сообщения; в приведенном примере мы видим, что это ответ STUN сервера на запрос SIP устройства.
Message Length: Это поле указывает длину сообщения в байтах.
Message Transaction: В этом поле указывается уникальный идентификатор сообщения запрос/ответ STUN сервера. Для каждого нового запроса создается новый идентификатор.
Attribute: MAPPED-ADDRESS
Attribute Type: MAPPED-ADDRESS(0×0001)
Attribute Length: 8
Protocol Family: IPv4 (0×0001)
Port: 6023
IP: 78.158.143.115 (78.158.143.115)
Данный атрибут называется “MAPPED-ADDRESS”; его целью является, указать исходный IP адрес (из приведенного выше примера это 78.158.143.115) и порт источника (из приведенного выше примера это 6023). Эти данные STUN сервер передает SIP устройству.
Attribute: SOURCE-ADDRESS
Attribute Type: SOURCE-ADDRESS(0×0004)
Attribute Length: 8
Protocol Family: IPv4 (0×0001)
Port: 3478
IP: 10.252.131.113 (10.252.131.113)
Данный атрибут называется “SOURCE-ADDRESS”; его целью является обнаружение двойного NAT`а. Из представленного выше мы видим, что в данной конфигурации используется двойной NAT, потому что IP-адрес SIP устройства является 192.168.2.14, а публичный IP адрес, откуда был получен запрос с 78.158.143.115. IP адрес 10.252.131.113 использоваться не будет.
Attribute Type: CHANGED-ADDRESS(0×0005)
Attribute Length: 8
Protocol Family: IPv4 (0×0001)
Port: 3479
IP: 75.101.138.128 (75.101.138.128)
Данный атрибут называется “CHANGED-ADDRESS”; его цель состоит в том, чтобы указать на IP-адрес и порт, куда послать ответ, если клиент запросит “Change IP” и “Change Port” в атрибуте “CHANGE-REQUEST”.
Отправка SIP сообщений с использованием протокола STUN
Ниже приводится пример SIP сообщений типа REGISTER. SIP устройство, работает за NAT и пытается зарегистрироваться в качестве внутреннего номера 101 на IP-АТС (voipproducts.org – АТС находится за пределами локальной сети SIP устройства). SIP устройство использует протокол STUN.
REGISTER sip:voipproducts.org SIP/2.0
Via: SIP/2.0/UDP 192.168.2.14:7214;branch=z9hG4bK-d8754z;rport
Max-Forwards: 70
Contact: <sip:101@78.158.143.115:8676;rinstance=c82d2f5b1918e5cf></sip:101@78.158.143.115:8676;rinstance=c82d2f5b1918e5cf>
To: “account1″<sip:101@voipproducts.org.com></sip:101@voipproducts.org.com>
From: “account1″<sip:101@voipproducts.org>;tag=484b4e36</sip:101@voipproducts.org>
Call-ID: YWI3Y2I3ODIzOWIxYWI5NDQwMzA5ZTYxMTAzOTM4Y2I.
CSeq: 1 REGISTER
Expires: 3600
Content-Length: 0
From the above we can see that:
Via: SIP/2.0/UDP 192.168.2.14:7214
SIP устройство по прежнему прослушивает порт 7214 и имеет IP адрес 192.168.2.14.
Contact:<sip:101@78.158.143.115:8676;rinstance=c82d2f5b1918e5cf></sip:101@78.158.143.115:8676;rinstance=c82d2f5b1918e5cf>
В поле “Contact” SIP устройство меняет свой локальный IP адрес (192.168.1.14) на публичный IP адрес (78.158.143.115) и внешний порт (8676), полученные при помощи протокола STUN. Благодаря протоколу STUN, IP-АТС сможет подключится к SIP устройству, отправляя ответы на IP адрес 78.158.143.115 и 8676.
Как показано выше, протокол SIP обычно используют протокол UDP, в качестве транспортного протокола, который является протоколом без установления соединения, протокол STUN играет очень важную роль, в оказании помощи SIP устройствам, работающим за NAT.
Протокол STUN имеет и свои минусы, он не работает должным образом в сетях с использованием Symmetric NAT, т.к. Symmetric NAT создает новый адрес и порт, каждый раз, когда внутренний хост пытается подключиться к внешнему устройству.
