Страница 1 из 2
Как заставить Asterisk работать за NAT как телефон
Добавлено: 30 июн 2013, 04:36
andymal-user
Имеется два Asterisk сервера, один с реальным IP адресом,а другой с динамическим и за NAT.
на первом сервере прописан пользователь, а на втором прописан peer на 1й сервер и прописана регистрация на 1м сервере для принятия входящих звонков.
Звоню с 1-го сервера на 2й - звонки проходят, звук в обе стороны есть.
Звоню со 2-го сервера на 1й - звонки проходят, звука нет ни в какую сторону,
Если я пробрасываю диапазон RTP портов с маршрутизатора за которым стоит второй сервер на сам сервер, то звук есть.
НО!!! Софтфон, стоящий у меня на ноубуке (в одной сети со 2-м сервером, т.е. тоже за NAT)
и присоединенный к 1-му серверу звонит и передает голос в обе стороны без пробрасывания портов.
Как добиться прохождения звука на 2й сервер Asterisk без пробрасывания портов RTP.
2й сервер обслуживает только 1 поток - это шлюз в GSM сеть,
и там где мне нужен шлюз не всегда имеется возможность вручную прописать проброс портов.
Мысль уже появилась соединять два сервера asterisk по VPN, чтобы они были в 1й сети и не нужно было никакого проброса портов,
но это на крайний случай ...
Посоветуйте, что можно сделать,
я уже все варианты параметра nat= перепробовал, никакой не работает так как нужно.
Re: Как заставить Asterisk работать за NAT как телефон
Добавлено: 30 июн 2013, 08:30
april22
может при не удачном звонке снять дамп и посмотреть куда траффик ходит ?
да и вообще -nat для голоса , не есть хорошо.
Re: Как заставить Asterisk работать за NAT как телефон
Добавлено: 30 июн 2013, 11:06
andymal-user
Опять повторюсь, softphone за NAT-ом ведь работает!!!
И исходящий звоник с 1-го сервера на 2-й тоже с голосом в обе стороны.
А ведь порты не проброшены, только регистрация на 1м сервере прописана.
УТОЧНЕНИЕ: 1й сервер работает тоже за NAT, но он там находится в DMZ зоне, поэтому все порты доступны из вне.
А трафик я смотрел при звонке со 2-го сервера и установлении соединения
1й сервер гонит RTP трафик на порт 13764 UDP, который, соответственно, никуда не проброшен.
Как только я пробрасываю диапазон портов для RTP так и в этом случае все начинает работать.
Но, меня интересует вариант с симметричным NAT, т.е. с какого порта отправляется RTP пакет со 2-го сервера на 1й
на этот же порт и 1й сервер должен присылать ответный пакет ...
(Написал это и понял, что я не смотрел с какого порта на втором сервере отправляются пакеты ...)
Re: Как заставить Asterisk работать за NAT как телефон
Добавлено: 30 июн 2013, 13:43
ded
Без обид? Но самые распространённые избитые вопросы задают те, кто зарегистрировался 5 минут назад, то есть с нулевым опытом. Я просто призываю зарабатывать опыт чтением, а не вопросами на форуме!
1) софтфон - это не ИП-АТС, он проще, но и в них реализован SIP по разному. Не ждите одинакового поведения от них.
2) Читайте если не доки, то хоть бы описания в файле sip.conf
Код: Выделить всё
;----------------------------------------- NAT SUPPORT ------------------------
;
; WARNING: SIP operation behind a NAT is tricky and you really need
; to read and understand well the following section.
;
; When Asterisk is behind a NAT device, the "local" address (and port) that
; a socket is bound to has different values when seen from the inside or
; from the outside of the NATted network. Unfortunately this address must
; be communicated to the outside (e.g. in SIP and SDP messages), and in
; order to determine the correct value Asterisk needs to know:
;
; + whether it is talking to someone "inside" or "outside" of the NATted network
.
; This is configured by assigning the "localnet" parameter with a list
; of network addresses that are considered "inside" of the NATted network.
; IF LOCALNET IS NOT SET, THE EXTERNAL ADDRESS WILL NOT BE SET CORRECTLY.
; Multiple entries are allowed, e.g. a reasonable set is the following:
;
; localnet=192.168.0.0/255.255.0.0 ; RFC 1918 addresses
; localnet=10.0.0.0/255.0.0.0 ; Also RFC1918
; localnet=172.16.0.0/12 ; Another RFC1918 with CIDR notation
; localnet=169.254.0.0/255.255.0.0 ; Zero conf local network
:;
; + the "externally visible" address and port number to be used when talking
; to a host outside the NAT. This information is derived by one of the
; following (mutually exclusive) config file parameters:
;
; a. "externip = hostname[:port]" specifies a static address[:port] to
; be used in SIP and SDP messages.
; The hostname is looked up only once, when [re]loading sip.conf .
; If a port number is not present, use the "bindport" value (which is
; not guaranteed to work correctly, because a NAT box might remap the
; port number as well as the address).
; This approach can be useful if you have a NAT device where you can
; configure the mapping statically. Examples:
;
; externip = 12.34.56.78 ; use this address.
; externip = 12.34.56.78:9900 ; use this address and port.
; externip = mynat.my.org:12600 ; Public address of my nat box.
;
; b. "externhost = hostname[:port]" is similar to "externip" except
; that the hostname is looked up every "externrefresh" seconds
; (default 10s). This can be useful when your NAT device lets you choose
:
; the port mapping, but the IP address is dynamic.
; Beware, you might suffer from service disruption when the name server
; resolution fails. Examples:
;
; externhost=foo.dyndns.net ; refreshed periodically
; externrefresh=180 ; change the refresh interval
;
; c. "stunaddr = stun.server[:port]" queries the STUN server specified
; as an argument to obtain the external address/port.
; Queries are also sent periodically every "externrefresh" seconds
; (as a side effect, sending the query also acts as a keepalive for
; the state entry on the nat box):
;
; stunaddr = foo.stun.com:3478
; externrefresh = 15
;
; Note that at the moment all these mechanism work only for the SIP socket.
; The IP address discovered with externip/externhost/STUN is reused for
; media sessions as well, but the port numbers are not remapped so you
; may still experience problems.
;
; NOTE 1: in some cases, NAT boxes will use different port numbers in
; the internal<->external mapping. In these cases, the "externip" and
; "externhost" might not help you configure addresses properly, and you
; really need to use STUN.
;
; NOTE 2: when using "externip" or "externhost", the address part is
; also used as the external address for media sessions.
; If you use "stunaddr", STUN queries will be sent to the same server
; also from media sockets, and this should permit a correct mapping of
; the port numbers as well.
;
; In addition to the above, Asterisk has an additional "nat" parameter to
; address NAT-related issues in incoming SIP or media sessions.
; In particular, depending on the 'nat= ' settings described below, Asterisk
; may override the address/port information specified in the SIP/SDP messages,
; and use the information (sender address) supplied by the network stack instead.
Re: Как заставить Asterisk работать за NAT как телефон
Добавлено: 30 июн 2013, 14:47
andymal-user
Конечно без обид.
Зарегистрировался 5 минут назад чтобы задать вопрос, решение которого по форумам не нашел.
Есть разные рекомендации, которые у меня почему-то работать как нужно отказываются.
И есть на форумах супер профессионалы которым влом расписать подробно как решить проблему,
а только дают "умные" советы, реализации которых для начинающих не совсем понятна ...
Тоже без обид?
localnet= и externip = заданы, но безрезультатно.
нужно попробовать stunaddr =, пронего я совсем забыл, так как, опять-же, softphone работает без этого.
И почему вызовы с 1-го на 2й идут со звуком без проброса портов???
Вопрос частично снят установкой дополнительного канала IAX2,
по которому вызовы от сервера 2 к 1 идут со звуком просто великолепно!
Без проброса портов.
НО, хотелось-бы, не нагружать маленькую коробочку шлюза ненужными протоколами.
Re: Как заставить Asterisk работать за NAT как телефон
Добавлено: 30 июн 2013, 15:17
ded
andymal-user писал(а):Есть разные рекомендации, которые у меня почему-то работать как нужно отказываются.
Рецепт простой - дампы, с двух сторон, курите и разбирайте.
andymal-user писал(а):И есть на форумах супер профессионалы которым влом расписать подробно как решить проблему,
а только дают "умные" советы, реализации которых для начинающих не совсем понятна ...
А уточните - кого Вы имеете ввиду?
Насчёт влом/не влом: я - не суперпрофессионал, но подробно расписывал как решать проблемы на форумах Астериска последние лет 7 наверное. А 7 лет назад я был начинающим, и ни у кого советов не спрашивал. И то и другое могу доказать, Гугль - не врёт.
andymal-user писал(а): localnet= и externip = заданы, но безрезультатно.
Это сейчас были заданы, или до регистрации на форуме? Если сейчас - то совет был умный? А если до того, то почему Вы не описали это в первом посте? Надеялись на дежурных телепатов? Но - лето, пора отпусков.
andymal-user писал(а):нужно попробовать stunaddr =, пронего я совсем забыл, так как, опять-же, softphone работает без этого.
ded писал(а):1) софтфон - это не ИП-АТС, он проще, но и в них реализован SIP по разному. Не ждите одинакового поведения от них.
Без обид? Но самые распространённые избитые вопросы задают те, кто зарегистрировался 5 минут назад, то есть с нулевым опытом. Я просто призываю зарабатывать опыт чтением, а не вопросами на форуме!
Re: Как заставить Asterisk работать за NAT как телефон
Добавлено: 30 июн 2013, 17:11
andymal-user
localnet= и externip = заданы были до регистрации на форуме,
stunaddr = вместо externip = задал, - результат не изменился.
Если я написал, что пересмотрел кучу форумов, почему Вы думаете что я эти параметры не ставил.
Если нужны конфиги, то можно так и написать, - решения рождаются в режиме диалога,
а не при наездах, что я читать ничего не хочу ...
Почему если софтфон умеет работать без проброса портов, а Asterisk-у проброс портов нужен в обязательном порядке.
Забудем про софтфон, почему вызовы с 1-го на 2й идут со звуком без проброса портов???
Кто мне пояснит принцип установления соединения в первом случае (работающем) и во втором (не работающем).
перебирать параметры я тоже умею, а вот прицип установления связи на более низком уровне на доступном языке
никто не объясняет, даже книга О'Рейли, на которую многие ссылаются.
Опять-же вопрос: как мне можно детально просмотреть SIP пакеты под Linux и под OpenWRT???
Или может я многого хочу, и надо просто тупо перебирать значения у всех параметров,
отвечающих за работу за NAT-ом пока эта конструкция не заработает???
Re: Как заставить Asterisk работать за NAT как телефон
Добавлено: 30 июн 2013, 17:42
ded
andymal-user писал(а):localnet= и externip = заданы были до регистрации на форуме,
stunaddr = вместо externip = задал, - результат не изменился.
Если я написал, что пересмотрел кучу форумов, почему Вы думаете что я эти параметры не ставил.
Потому что Вы не написали об этом в первом посте. Телепаты в отпуске. А что такое stunaddr = знаете?
andymal-user писал(а):Почему если софтфон умеет работать без проброса портов, а Asterisk-у проброс портов нужен в обязательном порядке.
Нет, не в обязательном. Проброс портов - один из трюков. Читаем снова:
Код: Выделить всё
;----------------------------------------- NAT SUPPORT ------------------------
;
; WARNING: SIP operation behind a NAT is tricky and you really need
; to read and understand well the following section.
andymal-user писал(а):Забудем про софтфон, почему вызовы с 1-го на 2й идут со звуком без проброса портов???
Невозможно описать всю работу протокола SIP в рамках форума, читайте Гольдштейна. Чтобы Астериск за НАТом регистрировался как телефон, его надо регистрировать как динамический пир, и тогда он регистрируется совсем не с порта 5060 на внешнем ИП устройстве, которое НАТит его.
andymal-user писал(а):Кто мне пояснит принцип установления соединения в первом случае (работающем) и во втором (не работающем).
перебирать параметры я тоже умею, а вот прицип установления связи на более низком уровне на доступном языке
никто не объясняет, даже книга О'Рейли, на которую многие ссылаются.
http://ru.wikipedia.org/wiki/SIP а если нет желания - то платный суппорт, как платный репетитор для трудных учеников.
andymal-user писал(а):Опять-же вопрос: как мне можно детально просмотреть SIP пакеты под Linux и под OpenWRT???
1) включить sip set debug on в обоих Астерисках
2) tcpdump -s0 -A host
ip_addr
3) ещё чуть погуглить, забивая этот вопрос не на форуме а в в поисковике.
andymal-user писал(а):Или может я многого хочу, и надо просто тупо перебирать значения у всех параметров,
отвечающих за работу за NAT-ом пока эта конструкция не заработает???
и это тоже вариант, тупо перебирать - это для тупых.
Re: Как заставить Asterisk работать за NAT как телефон
Добавлено: 30 июн 2013, 17:46
Vlad1983
скажите второму что он не за NAT
пусть шлюз думает как ломать сигналку
Re: Как заставить Asterisk работать за NAT как телефон
Добавлено: 01 июл 2013, 00:50
andymal-user
Пошел читать Гольдштейна.