Asterisk и NAT
В данном случае описаны наиболее типичные конфигурации сети для asterisk и клиентов, при этом для каждой конфигурации приведены параметры asterisk и SIP клиента для обеспечения связи между ними.
Однако, прежде всего, хотелось бы обратить Ваше внимание на файл sip.conf по умолчанию (сразу после установки asterisk). В этом файле очень подробно описаны все параметры (в том числе и относящиеся к NAT), поэтому при возникновении вопросов или проблем в первую очередь рекомендуем обратиться к дефолтному sip.conf.
Типовые конфигурации NAT для asterisk и клиентов
В данном случае нет необходимости производить какие-либо настройки NAT, поскольку трансляции адресов не осуществляется.
В первую очередь необходимо обеспечить доступ к asterisk со стороны клиента:
- Прописываем STUN сервер у клиента
- Поддерживаем соединение со стороны asterisk
- Запрещаем прямые соединения клиентов, разрешаем только через asterisk
- Указываем, что клиент за NAT
- Осуществляем проброс портов к asterisk с внешнего IP адреса
- Указываем в конфигурации asterisk внешний IP и порт
- Указываем в конфигурации asterisk диапазоны локальной сети
- Запрещаем прямые соединения клиентов, разрешаем только через asterisk
- Поддерживаем соединение со стороны asterisk
- Осуществляем проброс портов к asterisk с внешнего IP адреса
- Указываем в конфигурации asterisk внешний IP и порт
- Указываем в конфигурации asterisk диапазоны локальной сети
- Запрещаем прямые соединения клиентов, разрешаем только через asterisk
- Поддерживаем соединение со стороны asterisk
- Прописываем STUN сервер у клиента
- Указываем, что клиент за NAT
Параметры asterisk и SIP клиента
Прописываем STUN сервер у SIP клиента
Это необходимо для того, чтобы как asterisk, так и сам клиент могли определить внешний IP адрес клиента. Для этого в SIP клиенте достатоно прописать STUN сервер. По умолчанию для протокола STUN используется UDP порт 3478 (если необходимо задавать порт для STUN сервера, используйте этот порт). Во многих SIP клиентах настройка STUN сервера может задаваться не в самих параметрах SIP аккаунта, а в глобальных настройках программы
Примеры STUN серверов (можно прописать любой из них):
stun.ekiga.net
stun.3cx.com
stun.ideasip.com
stun.iptel.org
stun.rixtelecom.se
stunserver.org
stun.softjoys.com
stun.voipbuster.com
stun.voipstunt.com
stun.voxgratia.org
Проверить STUN сервер на работоспособность, и получить информацию о NAT можно с помощью утилиты client: http://prdownloads.sourceforge.net/stun/client.exe?download. Описание ее можно найти здесь: http://www.interface.ru/home.asp?artId=22409
Осуществляем проброс портов к asterisk с внешнего IP адреса
Эту задачу решает маршрутизатор (у кого-то - прокси-сервер ISA/TMG/Kerio, у кого-то - Cisco, у кого-то - точка доступа Zyxel/D-Link/TP-Link/...). Вам необходимо обеспечить проброс портов как для протокола SIP (звонки), так и для протокола RTP (сам разговор):
- Выход в интернет для сервера asterisk через NAT. Открыты для выхода должны быть порты UDP 5060 (по умолчанию, SIP), и 10000-20000 (UDP по умолчанию, RTP).
- подключение извне (проброс портов) с UDP порта 5060 (по умолчанию) на сервер asterisk, и UDP 10000-20000 (по умолчанию). Несколько моментов:
- даже если asterisk в Вашей сети работает на порту 5060, вовсе не обязательно из интернета давать доступ к порту 5060. Можно указать (например) такой маппинг портов: с внешнего IP, UDP порт 50600, на локальный IP сервера asterisk, порт 5060;
- не обязательно открывать все 10000 RTP портов. Для каждого подключения asterisk требует 2 открытых RTP порта. И если в настройках asterisk (в файле rtp.conf) предварительно ограничить количество RTP портов (например 1000 портов обеспечит до 500 одновременных разговоров), то на сервере также можно ограничить количество внешних портов для подключения
Указываем в конфигурации asterisk внешний IP и порт
На удивление, тут все достаточно просто (во всяком случае, что касается asterisk версии 11.4): в sip.conf прописать несколько параметров в секции general:
Указываем внешний реальный ip адрес сервера asterisk. Если порт, открытый в интернет, не совпадает с внутренним портом астериска, не забываем указать его:
externip=1.2.3.4
или
externip=1.2.3.4:50666
Разумеется, после создания/изменения подобных параметров в sip.conf может оказаться недостаточным сделать команду sip reload или даже reload. Может потребоваться перезагрузка самого сервиса asterisk:
service asterisk restart
Указываем в конфигурации asterisk диапазоны локальной сети
Для этого в sip.conf в секции general прописываем диапазоны локальных IP адресов. Обратите внимание: если у Вас подключены SIP провайдеры не через интернет, а по отдельным линиям связи, то подсети этих провайдеров тоже нужно указать как локальные сети:
localnet=192.168.0.0/24 ; локальная подсеть
localnet=192.168.5.0/24 ; локальная подсеть SIP провайдера 1
localnet=192.168.100.0/24 ; локальная подсеть SIP провайдера 2
Разумеется, после создания/изменения подобных параметров в sip.conf может оказаться недостаточным сделать команду sip reload или даже reload. Может потребоваться перезагрузка самого сервиса asterisk:
service asterisk restart
Запрещаем прямые соединения клиентов, разрешаем только через asterisk
Прописываем в sip.conf, в секции general опцию:
directmedia=no
В старых версиях asterisk (до версии 1.6.2) для этого необходимо было использовать опцию canreinvite, для запрещения повторной отправки пакетов INVITE. В более новых версиях эта опция была переименована.
Поддерживаем соединение со стороны asterisk
Необходима поддержка двух видов соединений: для SIP и для RTP. Параметры для обоих протоколов можно указать как для всех клиентов (в этом случае параметр прописывается в sip.conf в секции general), так и для конкретного клиента (в этом случае параметр прописывается в sip.conf в настройках конкретного клиента).
Для протокола SIP:
qualify=XXX
Вместо XXX можно указать число , в этом случае asterisk будет посылать SIP пакет клиенту каждые XXX миллисекунд, а можно указать просто yes, в этом случае XXX=300 [миллисекунд].
Для протокола RTP:
rtpkeepalive=YYY
Вместо YYY нужно указать число, в этом случае asterisk будет посылать RTP пакет клиенту каждые YYY секунд, по умолчанию этот параметр равен 0 (то есть выключен).
Указываем, что клиент за NAT
Для этого в файле sip.conf, в параметрах клиента задаем опцию:
nat=force_rport,comedia
В старых версиях asterisk указываем
nat=yes
Пример sip.conf
Кроме изменений в asterisk (в файле sip.conf) необходимо также в настройках самого SIP клиента прописать STUN сервер.
Удачи!
|