При входящем звонке Asterisk обрывает связь через 20 сек. разговора.
Откуда: Москва
Сообщений: 64
|
При входящем звонке Asterisk обрывает связь через 20 сек. разговора.
Добрый день!
Возможно, кто-то уже сталкивался с похожим, в чем может быть проблема? Проблема такая: Есть Asterisk который за NAT на него проброшены порты 5060 UDP и 10000-20000 UDP. Есть внутренние и внешние клиенты. Внешний адрес Asterisk: 85.140.XX.XXX. Адрес внешнего клиента: 84.159.XX.XXX. Внешний клиент тоже находится за NAT. Внешний клиент использует софтфон X-lite (ext.201). Регистрация на Asterisk проходит. Но если внешний клиент звонит на любой номер в Asterisk, через 20 сек. общения происходит разрыв соединения. А если позвонить с любого номера внешнему клиенту, то все замечательно работает, разрыва нет. Практически на 100% уверен, что проблема где-то в NAT клиента. Т.к. если подключить через VPN все работает отлично. STUN сервер не помогает.Такое происходит только с одним внешним клиентом, остальные внешние клиенты подключаются и работают без проблем.
Есть вот такой лог, когда звонит внешний клиент 201 внутреннему клиенту 200 (Через 20 секунд происходит обрыв связи):
Retransmitting #6 (NAT) to 84.159.XX.XXX:17942:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 84.159.XX.XXX:17942;branch=z9hG4bK-d8754z-8b40627fe56eb85b-1---d8754z-;received=84.159.XX.XXX;rport=17942
From: "201"<sip:201@85.140.XX.XXX>;tag=a6525a20
To: "200"<sip:200@85.140.XX.XXX>;tag=as280b3dda
Call-ID: ZDk1Y2JhMWVmOTc0NjMzYjU0YTBjN2M5ZDkxYzgyMjU.
CSeq: 2 INVITE
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Contact: <sip:200@85.140.XX.XXX>
Content-Type: application/sdp
Content-Length: 264
v=0
o=root 2586 2586 IN IP4 85.140.XX.XXX
s=session
c=IN IP4 85.140.XX.XXX
t=0 0
m=audio 13290 RTP/AVP 0 8 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv
---<>---
Reliably Transmitting (NAT) to 84.159.XX.XXX:17942:
OPTIONS sip:201@84.159.XX.XXX:17942;rinstance=e2f16100aff689b9 SIP/2.0
Via: SIP/2.0/UDP 85.140.XX.XXX:5060;branch=z9hG4bK32e5a005;rport
From: "Unknown" <sip:Unknown@85.140.XX.XXX>;tag=as7331d198
To: <sip:201@84.159.XX.XXX:17942;rinstance=e2f16100aff689b9>
Contact: <sip:Unknown@85.140.XX.XXX>
Call-ID: 5556d2bf4d8a8ad72bab4e6c6560d0d4@85.140.XX.XXX
CSeq: 102 OPTIONS
User-Agent: Asterisk PBX
Max-Forwards: 70
Date: Wed, 15 Jul 2009 12:50:26 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Content-Length: 0
----<>----
**************
Кусок лога когда внутренний абонент 200 звонит внешнему 201, тогда все хорошо:
Reliably Transmitting (NAT) to 84.159.XX.XXX:17942:
INVITE sip:201@84.159.XX.XXX:17942;rinstance=e2f16100aff689b9 SIP/2.0
Via: SIP/2.0/UDP 85.140.XX.XXX:5060;branch=z9hG4bK65ffe2dc;rport
From: "Extension 1" <sip:200@85.140.XX.XXX>;tag=as1adab477
To: <sip:201@84.159.XX.XXX:17942;rinstance=e2f16100aff689b9>
Contact: <sip:200@85.140.XX.XXX>
Call-ID: 4837fc5f2e76276d0efbc70247fe89b2@85.140.XX.XXX
CSeq: 102 INVITE
User-Agent: Asterisk PBX
Max-Forwards: 70
Date: Wed, 15 Jul 2009 12:46:01 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Content-Type: application/sdp
Content-Length: 264
v=0
o=root 2586 2586 IN IP4 85.140.XX.XXX
s=session
c=IN IP4 85.140.XX.XXX
t=0 0
m=audio 18022 RTP/AVP 0 8 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv
---
-- Called 201
rixbox1*CLI>
<--- SIP read from 84.159.XX.XXX:17942 --->
SIP/2.0 180 Ringing
Via: SIP/2.0/UDP 85.140.XX.XXX:5060;branch=z9hG4bK65ffe2dc;rport=5060
Contact: <sip:201@192.168.0.14:17942;rinstance=e2f16100aff689b9>
To: <sip:201@84.159.XX.XXX:17942;rinstance=e2f16100aff689b9>;tag=2b480c21
From: "Extension 1"<sip:200@85.140.XX.XXX>;tag=as1adab477
Call-ID: 4837fc5f2e76276d0efbc70247fe89b2@85.140.XX.XXX
CSeq: 102 INVITE
User-Agent: X-Lite release 1103d stamp 53117
Content-Length: 0
<------------->
--- (9 headers 0 lines) ---
-- SIP/201-08398e80 is ringing
rixbox1*CLI>
<--- SIP read from 84.159.XX.XXX:17942 --->
SIP/2.0 200 OK
Via: SIP/2.0/UDP 85.140.XX.XXX:5060;branch=z9hG4bK65ffe2dc;rport=5060
Contact: <sip:201@84.159.XX.XXX:17942;rinstance=e2f16100aff689b9>
To: <sip:201@84.159.XX.XXX:17942;rinstance=e2f16100aff689b9>;tag=2b480c21
From: "Extension 1"<sip:200@85.140.XX.XXX>;tag=as1adab477
Call-ID: 4837fc5f2e76276d0efbc70247fe89b2@85.140.XX.XXX
CSeq: 102 INVITE
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
Content-Type: application/sdp
User-Agent: X-Lite release 1103d stamp 53117
Content-Length: 187
v=0
o=- 7 2 IN IP4 84.159.XX.XXX
s=CounterPath X-Lite 3.0
c=IN IP4 84.159.XX.XXX
t=0 0
m=audio 38148 RTP/AVP 0 8 101
a=fmtp:101 0-15
a=rtpmap:101 telephone-event/8000
a=sendrecv
<------------->
--- (11 headers 9 lines) ---
Found RTP audio format 0
Found RTP audio format 8
Found RTP audio format 101
Peer audio RTP is at port 84.159.XX.XXX:38148
Found audio description format telephone-event for ID 101
Capabilities: us - 0xc (ulaw|alaw), peer - audio=0xc (ulaw|alaw)/video=0x0 (nothing), combined - 0xc (ulaw|alaw)
Non-codec capabilities (dtmf): us - 0x1 (telephone-event), peer - 0x1 (telephone-event), combined - 0x1 (telephone-event)
Peer audio RTP is at port 84.159.XX.XXX:38148
list_route: hop: <sip:201@84.159.XX.XXX:17942;rinstance=e2f16100aff689b9>
set_destination: Parsing <sip:201@84.159.XX.XXX:17942;rinstance=e2f16100aff689b9> for address/port to send to
set_destination: set destination to 84.159.XX.XXX, port 17942
Transmitting (NAT) to 84.159.XX.XXX:17942:
ACK sip:201@84.159.XX.XXX:17942;rinstance=e2f16100aff689b9 SIP/2.0
Via: SIP/2.0/UDP 85.140.XX.XXX:5060;branch=z9hG4bK61ff6213;rport
From: "Extension 1" <sip:200@85.140.XX.XXX>;tag=as1adab477
To: <sip:201@84.159.XX.XXX:17942;rinstance=e2f16100aff689b9>;tag=2b480c21
Contact: <sip:200@85.140.XX.XXX>
Call-ID: 4837fc5f2e76276d0efbc70247fe89b2@85.140.XX.XXX
CSeq: 102 ACK
User-Agent: Asterisk PBX
Max-Forwards: 70
Content-Length: 0
--------------
|
Сообщений: 1573
|
Re: При входящем звонке Asterisk обрывает связь через 20 сек. разговора.
canreinvite=no? (в настройках клиента)
|
Откуда: Нижний Новгород
Сообщений: 277
|
Re: При входящем звонке Asterisk обрывает связь через 20 сек. разговора.
ACK от внешнего клиента не доходит до астериска - 200 ОК ретрансмитится до посинения и звонок рвется
АСК посылается внутри диалога на контакт из 200 ОК - тоесть на Contact: <sip:200@85.140.XX.XXX>. По идее в контакте порта нету - тоесть должен пользоваться 5060 (по умолчанию) и форвардинг должен прокинуть его на астериск. Но его там нету. Вы точно не вырезали порт из контакта когда заменяли реальный IP XXX'ми?
Если порта там небыло значит надо смотреть tcpdump на стороне клиента - куда клиент посылает АСК.
Глянул еще раз на логи - подозреваю что проблема в том что 200 ОК посланный с астериска идет на 84.159.XX.XXX:17942 который есть дырка в НАТе на стороне клиента. Вроде все верно но вероятно форвардинг на НАТ'е астериска настроен только снаружи во внутрь (на астериск) - это вызывает создание дырки на посылку 200 ОК и он уходит не с 5060 порта внешнего адреса астериска а с порта дырки НАТ'а - это в свою очередь вызывает блокирование пакета на стороне НАТа клиента так как там НАТ вероятно симметричный.
Настройте форвардинг в обе стороны.
|
Откуда: Москва
Сообщений: 64
|
Re: При входящем звонке Asterisk обрывает связь через 20 сек. разговора.
cron333: canreinvite=no? (в настройках клиента)
Да стоит, вот настройки:
[general]
bindport=5060
bindaddr=0.0.0.0
disallow=all
allow=ulaw
allow=alaw
context=from-sip-external
callerid=Unknown
notifyringing=yes
notifyhold=yes
limitonpeers=yes
tos_sip=cs3
tos_audio=ef
tos_video=af41
[201]
type=friend
secret=201
record_out=Adhoc
record_in=Adhoc
qualify=yes
port=5060
pickupgroup=
nat=yes
mailbox=201@default
host=dynamic
dtmfmode=rfc2833
dial=SIP/201
context=from-internal
canreinvite=no
callgroup=
callerid=device <201>
|
Откуда: Москва
Сообщений: 64
|
Re: При входящем звонке Asterisk обрывает связь через 20 сек. разговора.
simax: ACK от внешнего клиента не доходит до астериска - 200 ОК ретрансмитится до посинения и звонок рвется
АСК посылается внутри диалога на контакт из 200 ОК - тоесть на Contact: <sip:200@85.140.XX.XXX>. По идее в контакте порта нету - тоесть должен пользоваться 5060 (по умолчанию) и форвардинг должен прокинуть его на астериск. Но его там нету. Вы точно не вырезали порт из контакта когда заменяли реальный IP XXX'ми?
Нет, порт не вырезал, проверил, все так как в оригинале.
|
Откуда: Нижний Новгород
Сообщений: 277
|
Re: При входящем звонке Asterisk обрывает связь через 20 сек. разговора.
delighter:
Нет, порт не вырезал, проверил, все так как в оригинале.
Может быть форвардинг на НАТе перед астериском настроен только снаружи во внутрь - должен быть в обе стороны.
|
Откуда: Санкт-Петербург
Сообщений: 931
|
Re: При входящем звонке Asterisk обрывает связь через 20 сек. разговора.
simax: должен быть в обе стороны
Это, простите, как?! Исходящий пакет и так уже попал на тот адрес и порт, на который отправлялся (5060). При nat=yes (или при nat=route - точно не помню), * отсылает пакеты не по полю contact, а туда, откуда пришел пакет.
Создам аварийную ситуацию. Дорого. На долго =)
|
Откуда: Москва
Сообщений: 64
|
Re: При входящем звонке Asterisk обрывает связь через 20 сек. разговора.
simax: delighter:
Нет, порт не вырезал, проверил, все так как в оригинале.
Может быть форвардинг на НАТе перед астериском настроен только снаружи во внутрь - должен быть в обе стороны.
На стороне Asterisk сделан входящий форвард портов 5060 10000-20000 UDP, исходящий трафик открыт полностью. Проблем с другими внешними пользователями не возникает. Причем, интересно то, что когда звонишь на номер 201 все работает отлично, нет обрывов.
|
Откуда: Нижний Новгород
Сообщений: 277
|
Re: При входящем звонке Asterisk обрывает связь через 20 сек. разговора.
delighter:
На стороне Asterisk сделан входящий форвард портов 5060 10000-20000 UDP, исходящий трафик открыт полностью. Проблем с другими внешними пользователями не возникает. Причем, интересно то, что когда звонишь на номер 201 все работает отлично, нет обрывов.
Говорю же нужен именно форвард иначе НАТ будет маппить (создаст дырку) на другой порт. То-есть 200 OK пойдет не с 5060 порта а с какого нибудь левого порта типа 12345 и НАТ на стороне клиента 200 ОК такой не пропустит так как он симметричный и строго пропускает пакеты с того IP:port на который был послан начальный пакет изнутри сети (тоесть INVITE с клиента).
Звонок на 201 будет работать ок - там все по другому
|
Откуда: Москва
Сообщений: 64
|
Re: При входящем звонке Asterisk обрывает связь через 20 сек. разговора.
simax: delighter:
На стороне Asterisk сделан входящий форвард портов 5060 10000-20000 UDP, исходящий трафик открыт полностью. Проблем с другими внешними пользователями не возникает. Причем, интересно то, что когда звонишь на номер 201 все работает отлично, нет обрывов.
Говорю же нужен именно форвард иначе НАТ будет маппить (создаст дырку) на другой порт. То-есть 200 OK пойдет не с 5060 порта а с какого нибудь левого порта типа 12345 и НАТ на стороне клиента 200 ОК такой не пропустит так как он симметричный и строго пропускает пакеты с того IP:port на который был послан начальный пакет изнутри сети (тоесть INVITE с клиента).
Звонок на 201 будет работать ок - там все по другому
Извини, но что-то я не пойму что сделать то нужно?
Еще раз, со стороны Asterisk сделан форвард входящих портов 5060 и 10000-20000, внутренний номер 200 подключается к Asterisk напрямую, одна локальная сеть. Для Asterisk весь трафик наружу разрешен. Со стороны клиента, стоит шлюз с NAT, для внутренних пользователей весь трафик открыт, входящий закрыт. Номер 201 регистрируется на сервере Asterisk.
На какой стороне нужно сделать еще форвард портов? На стороне клиента нельзя форвардить порт 5060, т.к. там не один клиент, а несколько и у всех одни симптомы, 20 сек. разговора и все при исходящем звонке.
Мапить исходящие порты 5060 на стороне Asterisk, но куда?
И опять же, я не понимаю, почему другие клиенты, которые находятся за NAT из разных концов света, нормально подключаются и все работает.
|
|