В общем, после долгих сношений с двумя понятиями - Asterisk + NAT решил запечатлить свой опыт здесь - может потом пригодиться мне или еще кому-нибудь.
Есть несколько сценариев работы * с НАТом в зависимости от того, находится сервер и/или клиенты за НАТом. НО. В каждом конкретном случае приходится "шаманить", т. к. стандартные рецепты не всегда помогают.
У меня был самый тяжелый случай - и сервер Asterisk и клиенты находятся за НАТами... разными НАТами.
Вариантов тут может быть два:
- настроить всю кухню так, что телефоны будут подклучаться к * через свой НАТ, интернет и НАТ сети с * (т. е. путь будет такой: телефон --> НАТ --> интернет --> НАТ --> астериск);
- установить второй сервер * внутри сети, где телефоны и связать 2 сервера * IAX транком - именно IAX, т. к. он более приспособлен для работы через НАТ (путь будет: телефон --> астериск2 --> IAX-транк --> астериск1).
Но, т. .к. настоящие герои всегда идут в обход (с), я решил делать вариант номер 1.
Итакс, начнемс.
1) Конфигурирование сервера с *
SIP телефоны были аппаратными, потому никаких особо вычурных конфигураций в sip.conf придумывать не надо было.
Обязательно надо добавлять опцию qualify = yes, чтобы поддерживать открытым порты на роутерах и чтобы сам * знал, что атм происходит с пиром (иначе возможна ситуация, когда звонки вроде идут, но не доходят или нет звука).
Вот пример конфига для телефонов Cisco SPA XXX:
[general]
...
pedantic = no
nat = no
[authentication]
deny = 0.0.0.0/0.0.0.0
permit = X.X.X.0/255.255.255.255
permit = Y.Y.Y.0/255.255.255.0
[c395]
disallow = all
allow = all
qualify = yes
type = friend
host=dynamic
call-limit=3
busylevel=1
rtpkeepalive = 15
nat=route
fromdomain=example.com
context=something
deny=0.0.0.0/0.0.0.0
permit=X.X.X.0/255.255.255.0
permit=Y.Y.Y.0/255.255.255.0
secret=*****
mailbox=395@default
2) Конфигурирование фаерволла за которым стоят телефоны практически не требуется, главное чтобы давали им какой-то порт для UDP наружу.
3) Конфигурирование фаерволла, за которым спрятан *
Тут уже несколько интересней. Зависит от фаерволла. Если есть настройки типа SIP Passthrough, то включаем, так же делаем порт-форвардинг SIP порта на сервер с * (UDP 5060 по-умолч, но лучше поменять).
Если таких настроек нет или они не дают результата, то - по матчасти - нужно открыть порты для SIP (UDP 5060 по умолч), а также для голосового траффика RTP (по умолч - UDP 10000-20000, изменяется в rtp.conf) и дописать в sip.conf:
[general]
...
externip = X.X.X.X
localnet = Y.Y.Y.0/24
4) Конфигурирование телефонов.
Конфигурирование, конечно же различается от телефона к телефону, но в общем - нужно включать поддержку NAT на тех телефонах, которые спрятаны за NAT. Если таковая поддержка есть в опциях, конечно.
Для Cisco SPA необходимо зайти на веб-морду для конфигурации (http://x.x.x.x/admin/advanced) затем в секции Line включить NAT как на рисунке:
а также, адрес прокси-сервера (т. е. адрес нашего *) указывать с учетом внешнего порта, какой форвардиться на * (х.х.х.х:ext_port).
Проверить всё это дело можно (после перезапуска астериска желательно всего, а не только модуля sip) набрав в командной строке Asterisk'а (asterisk -r):
asterisk*CLI> sip show peers
Name/username Host Dyn Nat ACL Port Status
***
c395/c395 x.x.x.x D N A 24513 OK (134 ms)
***
Т. е., команда выдает список пиров для протокола SIP и их состояние: Имя, IP-адрес (внешний, если пир за NAT), диманический он или статический в настройках sip.conf, далее используется пиром NAT или нет, контроль доступа есть/нет, порт пира (в случае с NAT - какой роутер форвардит для телефона) и собсно статус и время задержки.
Если телефоны за NAT не работают и в лог Asterisk'a сыплет записи вроде такой:
NOTICE[19903] chan_sip.c: Correct auth, but based on stale nonce received from '"с395" <sip:с395@X.X.X.X>;tag=.....................'
То скорее всего поможет назначение телефону другого внутреннего IP - в таблице маршрутизации роутеров остаются "хвосты".
Полезные ссылки:
1) http://www.asteriskguru.com/tutorials/sip_nat_oneway_or_no_audio_asterisk.html
2) http://www.voip-info.org/wiki/view/Asterisk+SIP+NAT+solutions
Есть несколько сценариев работы * с НАТом в зависимости от того, находится сервер и/или клиенты за НАТом. НО. В каждом конкретном случае приходится "шаманить", т. к. стандартные рецепты не всегда помогают.
У меня был самый тяжелый случай - и сервер Asterisk и клиенты находятся за НАТами... разными НАТами.
Вариантов тут может быть два:
- настроить всю кухню так, что телефоны будут подклучаться к * через свой НАТ, интернет и НАТ сети с * (т. е. путь будет такой: телефон --> НАТ --> интернет --> НАТ --> астериск);
- установить второй сервер * внутри сети, где телефоны и связать 2 сервера * IAX транком - именно IAX, т. к. он более приспособлен для работы через НАТ (путь будет: телефон --> астериск2 --> IAX-транк --> астериск1).
Но, т. .к. настоящие герои всегда идут в обход (с), я решил делать вариант номер 1.
Итакс, начнемс.
1) Конфигурирование сервера с *
SIP телефоны были аппаратными, потому никаких особо вычурных конфигураций в sip.conf придумывать не надо было.
Обязательно надо добавлять опцию qualify = yes, чтобы поддерживать открытым порты на роутерах и чтобы сам * знал, что атм происходит с пиром (иначе возможна ситуация, когда звонки вроде идут, но не доходят или нет звука).
Вот пример конфига для телефонов Cisco SPA XXX:
[general]
...
pedantic = no
nat = no
rtptimeout = 10
rtpholdtimeout = 300
directmedia=nonat
...[authentication]
deny = 0.0.0.0/0.0.0.0
permit = X.X.X.0/255.255.255.255
permit = Y.Y.Y.0/255.255.255.0
...
[c395]
disallow = all
allow = all
qualify = yes
type = friend
host=dynamic
call-limit=3
busylevel=1
rtpkeepalive = 15
nat=route
fromdomain=example.com
context=something
deny=0.0.0.0/0.0.0.0
permit=X.X.X.0/255.255.255.0
permit=Y.Y.Y.0/255.255.255.0
secret=*****
mailbox=395@default
2) Конфигурирование фаерволла за которым стоят телефоны практически не требуется, главное чтобы давали им какой-то порт для UDP наружу.
3) Конфигурирование фаерволла, за которым спрятан *
Тут уже несколько интересней. Зависит от фаерволла. Если есть настройки типа SIP Passthrough, то включаем, так же делаем порт-форвардинг SIP порта на сервер с * (UDP 5060 по-умолч, но лучше поменять).
Если таких настроек нет или они не дают результата, то - по матчасти - нужно открыть порты для SIP (UDP 5060 по умолч), а также для голосового траффика RTP (по умолч - UDP 10000-20000, изменяется в rtp.conf) и дописать в sip.conf:
[general]
...
externip = X.X.X.X
localnet = Y.Y.Y.0/24
localnet = Z.Z.Z.0/24
port = [ext_port]
...port = [ext_port]
4) Конфигурирование телефонов.
Конфигурирование, конечно же различается от телефона к телефону, но в общем - нужно включать поддержку NAT на тех телефонах, которые спрятаны за NAT. Если таковая поддержка есть в опциях, конечно.
Для Cisco SPA необходимо зайти на веб-морду для конфигурации (http://x.x.x.x/admin/advanced) затем в секции Line включить NAT как на рисунке:
а также, адрес прокси-сервера (т. е. адрес нашего *) указывать с учетом внешнего порта, какой форвардиться на * (х.х.х.х:ext_port).
Проверить всё это дело можно (после перезапуска астериска желательно всего, а не только модуля sip) набрав в командной строке Asterisk'а (asterisk -r):
asterisk*CLI> sip show peers
Name/username Host Dyn Nat ACL Port Status
***
c395/c395 x.x.x.x D N A 24513 OK (134 ms)
***
Т. е., команда выдает список пиров для протокола SIP и их состояние: Имя, IP-адрес (внешний, если пир за NAT), диманический он или статический в настройках sip.conf, далее используется пиром NAT или нет, контроль доступа есть/нет, порт пира (в случае с NAT - какой роутер форвардит для телефона) и собсно статус и время задержки.
Если телефоны за NAT не работают и в лог Asterisk'a сыплет записи вроде такой:
NOTICE[19903] chan_sip.c: Correct auth, but based on stale nonce received from '"с395" <sip:с395@X.X.X.X>;tag=.....................'
То скорее всего поможет назначение телефону другого внутреннего IP - в таблице маршрутизации роутеров остаются "хвосты".
Полезные ссылки:
1) http://www.asteriskguru.com/tutorials/sip_nat_oneway_or_no_audio_asterisk.html
2) http://www.voip-info.org/wiki/view/Asterisk+SIP+NAT+solutions
Комментариев нет:
Отправить комментарий