Страница 1 из 4

Настройка nat для работы rtp

Добавлено: 19 авг 2013, 21:23
r.usaev
Схема у меня:
Asterisk как SIP сервер на публичном адресе, клиент из-за NAT подключается к Asterisk

Проблема заключаться в том что на некоторых операторов звонки (обмен rtp) работаю нормально на остальных, звонок проходит, голоса нет в оба направления.
Некоторые операторы входящие нормально исходящие нет. Настройки одинаковые.
С случае отсутствия голоса Wireshark говорит что RTP пакеты идут в 1 направлении.
161 18.430804000 192.168.100.75 XXX.XXX.XXX.XXX RTP 214 PT=ITU-T G.711 PCMA, SSRC=0x6952, Seq=29409, Time=74086
162 18.470923000 192.168.100.75 XXX.XXX.XXX.XXX RTP 214 PT=ITU-T G.711 PCMA, SSRC=0x6952, Seq=29411, Time=74406
163 18.490850000 192.168.100.75 XXX.XXX.XXX.XXX RTP 214 PT=ITU-T G.711 PCMA, SSRC=0x6952, Seq=29412, Time=74566

Параметры на номера:
canreinvite=no
nat=yes
qualify=yes

Re: Настройка nat для работы rtp

Добавлено: 19 авг 2013, 21:40
Zavr2008
В sip.conf не забываем прописать localnet и externhost/externip.
В Dial помогут опции tT.

Да: если уж торчит наружу sip- не забывайте permit/deny.. Эт всегда стоит напомнить.

Re: Настройка nat для работы rtp

Добавлено: 19 авг 2013, 22:48
ded
Zavr2008, читаем
r.usaev писал(а):Схема у меня:
Asterisk как SIP сервер на публичном адресе, клиент из-за NAT подключается к Asterisk
Какой нахрен externhost/externip? Вы думаете, прежде чем написать?

r.usaev,
rВы только что зарегистрировались с типичной проблемой, изучайте:
Изображение
Изображение

Re: Настройка nat для работы rtp

Добавлено: 19 авг 2013, 23:36
Zavr2008
ded, зря ехидничаеш - помогало. Астеру четко нужно прописать что у него и как, особенно если вдруг окажется что в компе несколько сетевух и ТС об этом забыл написать..

Re: Настройка nat для работы rtp

Добавлено: 20 авг 2013, 00:25
ded
Zavr2008 писал(а): Астеру четко нужно прописать что у него и как, ..
Нет, не нужно чётко прописать, а Вам - нужно.
Напишу ещё раз:

Код: Выделить всё

Asterisk как SIP сервер на публичном адресе
Вы считаете, что надо использовать externip/externhost? Потому что иногда помогало?
Процитирую первоисточник - файл 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. "externaddr = 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 port specified in the "udpbindaddr"
;      (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:
;
;        externaddr = 12.34.56.78          ; use this address.
;        externaddr = 12.34.56.78:9900     ; use this address and port.
;        externaddr = mynat.my.org:12600   ; Public address of my nat box.
;        externtcpport = 9900   ; The externally mapped tcp port, when Asterisk is behind a static NAT or PAT. 
;                               ; externtcpport will default to the externaddr or externhost port if either one is set. 
;        externtlsport = 12600  ; The externally mapped tls port, when Asterisk is behind a static NAT or PAT.
;                               ; externtlsport port will default to the RFC designated port of 5061.   
;
;   b. "externhost = hostname[:port]" is similar to "externaddr" 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
;
;   Note that at the moment all these mechanism work only for the SIP socket.
;   The IP address discovered with externaddr/externhost is reused for
;   media sessions as well, but the port numbers are not remapped so you
;   may still experience problems.
When Asterisk is behind a NAT device, the "local" address (and port)..........
Авторизоавнный перевод: Если Астериск за НАТ устройством, локальный адрес (и порт).............

И ЭТО НЕ ТОТ СЛУЧАЙ. А иногда и кроличьей лапкой постучать по серверу помогало, нет?
externaddr и externhost используются только в этом случае. Я готов доказать, что на сервере с двумя интерфейсами - eth0 & eth1, публичным и внутренним ИП адресом, никаких externaddr и externhost также указыввать не нужно.

Re: Настройка nat для работы rtp

Добавлено: 20 авг 2013, 06:53
Zavr2008
ded, может в последних версиях и пофиксили. Автоопределение пучило. По крайней мере в 1.6
Точнее работало - временами.
Я привык всегда все указывать ручками и это еще подводило;)

Re: Настройка nat для работы rtp

Добавлено: 20 авг 2013, 06:59
Vlad1983
при nat=never вроде с 1.4 уже было нормально с несколькими интерфейсами

Re: Настройка nat для работы rtp

Добавлено: 20 авг 2013, 08:43
r.usaev
Схема говорит, смотри настройки route nat firewall
Тема изначально так и называлась!
При этом повторюсь, не со всех провайдеров нет голоса, в большинстве случаев работает нормально, но есть федеральные провайдеры от которых его нет с различных аппаратов.
rtp debug (на сервере)
Показывает обмен пакетами между оператором и внешним ip (номера за натом)
Ошибка возникает между
Сервером Asterisk и Softphone
При этом пробывал из различных сетей, под разными машрутизаторами (на базе Linux, Asus WL-500G, Mikrotik) ничего не поменялось.

Из всего что я вычитал возможные проблемы (все что я делал не помогло):
1. Размер MTU, деление пакетов и не возможности его собрать # ставил значение compactheaders=yes
2. http://www.voip-info.org/wiki/view/Aste ... zation.txt # менял время
3. Пареметр qualify # ставил от 3000 до 6000 (по умолчанию 2000)
4. Параметр nat # ставил route, never

Есть еще предположения? я в растерянности.
Ходил в гости знакомому админу поднимал Asterisk по то же схеме у него все работает правда у него маршрутизатор D-Link DSR-500N

Re: Настройка nat для работы rtp

Добавлено: 20 авг 2013, 08:56
Vlad1983
снимать дамп трафика с RTP на стороне сервера и проблемного клиента одновременно.

Re: Настройка nat для работы rtp

Добавлено: 20 авг 2013, 10:03
ded
r.usaev писал(а):Схема говорит, смотри настройки route nat firewall
Тема изначально так и называлась!
При этом повторюсь, не со всех провайдеров нет голоса, в большинстве случаев работает нормально, но есть федеральные провайдеры от которых его нет с различных аппаратов.
Проблемный звонок идёт
федеральный провайдер ---- sip nonat--- Астериск ---- sip nonat ---- Router w/NAT ---- extension (Softphone)
Если rtp debug (на сервере) gоказывает обмен пакетами между оператором и внешним ip (Router w/NAT), то на пире не хватает параметра
canreinvite=no
или на этом же пире есть ненужный параметр
nat=yes
или он игнорируется.