VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

401 на INVITE с использованием nat

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

mapt
Сообщения: 62
Зарегистрирован: 25 июл 2012, 11:50
Откуда: Россия, Волгоград

Re: 401 на INVITE с использованием nat

Сообщение mapt »

Glukinho писал(а):
mapt писал(а):он у вас видимо с белым айпи, а не внутри локалки
С серым айпи, внутри локалки.
mapt писал(а):ну или тогда вопрос: где externalip ?
Изображение


С externalip/localnet Эртелеком ругался на мои пакеты REGISTER. Уж хрен их знает, почему.
Спасибо за наводку, она очень ценна, т.к. это меняет дело.
А отклонялись именно REGISTER, и как они отклонялись, если не секрет?

Просто без externalip и у меня все работает (вход/исх), но тогда отваливается t38, т.к. эртелекомовские сервера пытаются отправлять данные на локальный адрес, что естественно из внешней сети у них не получается.
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: 401 на INVITE с использованием nat

Сообщение Vlad1983 »

на шлюзе

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

iptables -t nat -I PREROUTING -i ppp0 -p udp --dport 10000:20000 -j DNAT --to-destination 192.168.0.65
iptables -t filter -I FORWARD -p udp -s 192.168.0.65 --sport 10000:20000 -j ACCEPT
iptables -t filter -I FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
лишние фильтры не городить, т.к. это RTP
и обязательно

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

rmmod nf_conntrack_sip
если после этого не заработает снимите дамп сигналки на астериске, а не шлюзе
что-то явно с коверканием заголовков при пробросе
ЛС: @rostel
awsswa
Сообщения: 2390
Зарегистрирован: 09 июн 2012, 10:52
Откуда: Россия, Пермь skype: yarick_perm

Re: 401 на INVITE с использованием nat

Сообщение awsswa »

порты 4000-4999 UDP для t38 не забутьте
платный суппорт по мере возможностей
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: 401 на INVITE с использованием nat

Сообщение Vlad1983 »

немного с направлением ошибся
iptables -t filter -I FORWARD -p udp -s 192.168.0.65 --sport 10000:20000 -j ACCEPT
на
iptables -t filter -I FORWARD -p udp -d 192.168.0.65 --sport 10000:20000 -j ACCEPT
и, да, по факсам тоже
iptables -t nat -I PREROUTING 2 -i ppp0 -p udp --dport 4000:4999 -j DNAT --to-destination 192.168.0.65
iptables -t filter -I FORWARD 3 -p udp -d 192.168.0.65 --sport 4000:4999 -j ACCEPT
ЛС: @rostel
mapt
Сообщения: 62
Зарегистрирован: 25 июл 2012, 11:50
Откуда: Россия, Волгоград

Re: 401 на INVITE с использованием nat

Сообщение mapt »

Vlad1983 писал(а):на шлюзе

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

iptables -t nat -I PREROUTING -i ppp0 -p udp --dport 10000:20000 -j DNAT --to-destination 192.168.0.65
iptables -t filter -I FORWARD -p udp -s 192.168.0.65 --sport 10000:20000 -j ACCEPT
iptables -t filter -I FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
лишние фильтры не городить, т.к. это RTP
и обязательно

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

rmmod nf_conntrack_sip
если после этого не заработает снимите дамп сигналки на астериске, а не шлюзе
что-то явно с коверканием заголовков при пробросе
это все безусловно сделано.
сейчас задача делится на два пути решения:
а) делаем без ната. убираем localnet/externalip из sip.conf, выставляем nat=no, убираем проброс. в данном случае отлично работают входящие/исходящие, но отваливается t38 (наш сервер пакеты эртелекому отправляет, но с адресатом 192.168.0.65, соответственно обратные пакеты тупо не приходят к нам (фильтруются где-то в эртелекомовской сети). проброс портов проблемы не решает

б) делаем с натом. выставляем localnet/externalip, nat=yes, делаем проброс всех портов (5060,udptl,rtp). в итоге работает исходящая связь, бегают факсы, все ок. но при входящем инвайте получаем 401.

собственно я считаю второй вариант более православным, поэтому и открыл данный топик и пытаюсь решить проблему в этом направлении. insecure=port,invite имеется. соответственно вопрос, что не так? при allowguest, естественно, начинает работать. но это блин печально как-то... я конечно на шлюзе трафик порежу, в файерволе на сервере тоже, но тем не менее это не гуд.
Аватара пользователя
Wapo
Сообщения: 795
Зарегистрирован: 02 мар 2011, 17:53

Re: 401 на INVITE с использованием nat

Сообщение Wapo »

Попробуйте прописать еще и параметр fromdomain=..... чтобы t38 правильно летели.
mapt
Сообщения: 62
Зарегистрирован: 25 июл 2012, 11:50
Откуда: Россия, Волгоград

Re: 401 на INVITE с использованием nat

Сообщение mapt »

Wapo писал(а):Попробуйте прописать еще и параметр fromdomain=..... чтобы t38 правильно летели.
в sip.conf?
тут а) домена нет, только ip. б) проблема не в том что пакеты отбрасываются, а в том что тупо не приходят.

и если честно я не совсем понимаю, как fromdomain связан с t38 при условии что это не входящий факс а исходящий, и t38 ложится только поверх SIP. если вас не затруднит, опишите подробнее.
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: 401 на INVITE с использованием nat

Сообщение Vlad1983 »

покажите дамп на машине с астериском
ЛС: @rostel
mapt
Сообщения: 62
Зарегистрирован: 25 июл 2012, 11:50
Откуда: Россия, Волгоград

Re: 401 на INVITE с использованием nat

Сообщение mapt »

Vlad1983 писал(а):покажите дамп на машине с астериском
ок, большое спасибо за участие в решении проблемы.

дамп пришлю вечером, т.к. сейчас все работают и на эксперименты времени не дают, а трафика с клиентов много, поэтому просто не сниму его. если есть желание добиться решения проблемы, то я даже готов на платный саппорт ( skype mapt34). в любом случае вечером сниму дамп.
mapt
Сообщения: 62
Зарегистрирован: 25 июл 2012, 11:50
Откуда: Россия, Волгоград

Re: 401 на INVITE с использованием nat

Сообщение mapt »

Vlad1983 писал(а):покажите дамп на машине с астериском
собственно, начнем.

Вариант реализации с nat'ом

первое что хотелось бы отметить
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: настройки фаера на сервере
astsrv ~ # iptables -L

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

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
далее текущий конфиг на сервере
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: sip.conf
[general]
context=public
allowoverlap=no
bindport=5060
bindaddr=0.0.0.0
udpbindaddr=0.0.0.0
tcpenable=no
transport=udp
srvlookup=no

allowguest=no
dtmfmode=rfc2833
disallow=all
allow=alaw
language=ru
alwaysauthreject=yes
t38pt_udptl=yes
canreinvite=no
localnet=192.168.0.0/255.255.255.0
externip=88.87.76.35

register => 78442526660:**************:526660@188.187.253.3:5060

[ertelecom-in](!)
type=peer
context=incoming
nat=no
insecure=port,invite

[ertelecom-in-1](ertelecom-in)
host=188.187.253.1

[ertelecom-in-2](ertelecom-in)
host=188.187.253.2

[ertelecom-in-3](ertelecom-in)
host=188.187.253.3

[ertelecom-line](!)
t38pt_udptl=yes,redundancy,maxdatagram=400
type=peer
host=188.187.253.3
call-limit=1
nat=force_rport,comedia
directmedia=yes

[ertelecom526660](ertelecom-line)
username=78442526660
fromuser=78442526660
secret=**************
далее немного настроек
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: rtp.conf
[general]
rtpstart=10000
rtpend=20000
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: udptl.conf
[general]
udptlstart=4000
udptlend=4999
;udptlchecksums=no
udptlfecentries = 3
udptlfecspan = 3
use_even_ports = no
настройки фаервола на шлюзе
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: iptables_rules
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -F
iptables -F
iptables -F FORWARD
iptables -F INPUT
iptables -F OUTPUT

iptables -P FORWARD DROP
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT

iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source 88.87.76.35
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.0.51

#проброс asterisk
iptables -t nat -A PREROUTING -p udp -d 192.168.0.51 --dport 5060 -j DNAT --to-destination 192.168.0.65:5060
iptables -t nat -A POSTROUTING -p udp --dst 192.168.0.65 --dport 5060 -j SNAT --to-source 192.168.0.51
iptables -t nat -A PREROUTING -p udp --dport 5060 -i ppp0 -j DNAT --to 192.168.0.65
#проброс asterisk

iptables -t nat -A PREROUTING -p udp -d 192.168.0.51 --dport 4000:4999 -j DNAT --to-destination 192.168.0.65
iptables -t nat -A POSTROUTING -p udp --dst 192.168.0.65 --dport 4000:4999 -j SNAT --to-source 192.168.0.51
iptables -t nat -A PREROUTING -p udp --dport 4000:4999 -i ppp0 -j DNAT --to 192.168.0.65

iptables -t nat -A PREROUTING -p udp -d 192.168.0.51 --dport 10000:20000 -j DNAT --to-destination 192.168.0.65
iptables -t nat -A POSTROUTING -p udp --dst 192.168.0.65 --dport 10000:20000 -j SNAT --to-source 192.168.0.51
iptables -t nat -A PREROUTING -p udp --dport 10000:20000 -i ppp0 -j DNAT --to 192.168.0.65

iptables -A FORWARD -m iprange --dst-range 192.168.0.1-192.168.0.254 -j ACCEPT
iptables -A FORWARD -m iprange --src-range 192.168.0.1-192.168.0.254 -j ACCEPT
собственно имеем в такой компоновке:
1. исходящие звонки вполне себе работают (и соединение есть и голос в обе стороны)
2. отправка факса. звоним на внешний номер, sip соединение устанавливается, есть звук в обе стороны, далее с помощью SendFAX с опциями dfzs успешно проходит факс с использованием t38. лог отправки факса можно посмотреть тут http://mdc-vlg.ru/astsrv.fax.nat.dump (снимался на сервере при помощи tcpdump -nn -v -s0 port 5060 or portrange 4000-4999 or portrange 10000-20000)
3. а вот при попытке сделать входящий звонок - беда.

лог с сервера
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: tcpdump -nn -v -s0 port 5060

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

19:15:12.937845 IP (tos 0xb8, ttl 62, id 51650, offset 0, flags [DF], proto UDP (17), length 1141)
    192.168.0.51.1149 > 192.168.0.65.5060: SIP, length: 1113
        INVITE sip:s@88.87.76.35:5060 SIP/2.0
        Via: SIP/2.0/UDP 188.187.253.2:5161;rport;branch=z9hG4bK-3793281038-3809572128-4082921892-1817713916
        From: "78442374901" <sip:78442374901@188.187.253.2:5161;user=phone>;tag=470933518-3809572128-4082921892-1817713916
        To: <sip:78442526660@88.87.76.35;user=phone>
        Call-ID: 0ee0114e207511e3a4715cf3fc1c586c@188.187.253.2
        CSeq: 1 INVITE
        Contact: "78442374901" <sip:78442374901@188.187.253.2:5161;user=phone>
        Content-Type: application/sdp
        Allow: ACK, BYE, CANCEL, INFO, INVITE, OPTIONS, REFER, REGISTER, SUBSCRIBE, UPDATE
        Max-Forwards: 70
        User-Agent: MERA MVTS3G v.4.3.0-38t
        Cisco-Guid: 248558568-544543203-2758892787-4229716076
        Content-Length:   415

        v=0
        o=- 1379517314 1379517314 IN IP4 188.187.253.2
        s=-
        c=IN IP4 188.187.253.2
        t=0 0
        m=audio 42136 RTP/AVP 8 0 18 97 98 99 96
        a=rtpmap:8 PCMA/8000
        a=rtpmap:0 PCMU/8000
        a=rtpmap:18 G729/8000
        a=fmtp:18 annexb=no
        a=rtpmap:97 G729/8000
        a=fmtp:97 annexb=yes
        a=rtpmap:98 G729/8000
        a=fmtp:98 annexb=no
        a=rtpmap:99 G729/8000
        a=fmtp:99 annexb=yes
        a=rtpmap:96 telephone-event/8000
        a=fmtp:96 0-15
        a=sendrecv

19:15:12.938166 IP (tos 0x0, ttl 64, id 541, offset 0, flags [none], proto UDP (17), length 670)
    192.168.0.65.5060 > 192.168.0.51.1149: SIP, length: 642
        SIP/2.0 401 Unauthorized
        Via: SIP/2.0/UDP 188.187.253.2:5161;branch=z9hG4bK-3793281038-3809572128-4082921892-1817713916;received=192.168.0.51;rport=1149
        From: "78442374901" <sip:78442374901@188.187.253.2:5161;user=phone>;tag=470933518-3809572128-4082921892-1817713916
        To: <sip:78442526660@88.87.76.35;user=phone>;tag=as083e2094
        Call-ID: 0ee0114e207511e3a4715cf3fc1c586c@188.187.253.2
        CSeq: 1 INVITE
        Server: Asterisk PBX 11.5.1
        Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
        Supported: replaces, timer
        WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="12e41015"
        Content-Length: 0


19:15:12.939307 IP (tos 0xb8, ttl 62, id 51651, offset 0, flags [DF], proto UDP (17), length 489)
    192.168.0.51.1149 > 192.168.0.65.5060: SIP, length: 461
        ACK sip:s@88.87.76.35:5060 SIP/2.0
        Via: SIP/2.0/UDP 188.187.253.2:5161;rport;branch=z9hG4bK-3793281038-3809572128-4082921892-1817713916
        From: "78442374901" <sip:78442374901@188.187.253.2:5161;user=phone>;tag=470933518-3809572128-4082921892-1817713916
        To: <sip:78442526660@88.87.76.35;user=phone>;tag=as083e2094
        Call-ID: 0ee0114e207511e3a4715cf3fc1c586c@188.187.253.2
        CSeq: 1 ACK
        Max-Forwards: 70
        User-Agent: MERA MVTS3G v.4.3.0-38t
        Content-Length: 0
лог со шлюза
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: tcpdump -nn -v -s0 port 5060

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

19:15:14.682838 IP (tos 0xb8, ttl 63, id 51650, offset 0, flags [DF], proto UDP (17), length 1141) 188.187.253.2.5161 > 88.87.76.35.5060: SIP, length: 1113
        INVITE sip:s@88.87.76.35:5060 SIP/2.0
        Via: SIP/2.0/UDP 188.187.253.2:5161;rport;branch=z9hG4bK-3793281038-3809572128-4082921892-1817713916
        From: "78442374901" <sip:78442374901@188.187.253.2:5161;user=phone>;tag=470933518-3809572128-4082921892-1817713916
        To: <sip:78442526660@88.87.76.35;user=phone>
        Call-ID: 0ee0114e207511e3a4715cf3fc1c586c@188.187.253.2
        CSeq: 1 INVITE
        Contact: "78442374901" <sip:78442374901@188.187.253.2:5161;user=phone>
        Content-Type: application/sdp
        Allow: ACK, BYE, CANCEL, INFO, INVITE, OPTIONS, REFER, REGISTER, SUBSCRIBE, UPDATE
        Max-Forwards: 70
        User-Agent: MERA MVTS3G v.4.3.0-38t
        Cisco-Guid: 248558568-544543203-2758892787-4229716076
        Content-Length:   415

        v=0
        o=- 1379517314 1379517314 IN IP4 188.187.253.2
        s=-
        c=IN IP4 188.187.253.2
        t=0 0
        m=audio 42136 RTP/AVP 8 0 18 97 98 99 96
        a=rtpmap:8 PCMA/8000
        a=rtpmap:0 PCMU/8000
        a=rtpmap:18 G729/8000
        a=fmtp:18 annexb=no
        a=rtpmap:97 G729/8000
        a=fmtp:97 annexb=yes
        a=rtpmap:98 G729/8000
        a=fmtp:98 annexb=no
        a=rtpmap:99 G729/8000
        a=fmtp:99 annexb=yes
        a=rtpmap:96 telephone-event/8000
        a=fmtp:96 0-15
        a=sendrecv

19:15:14.683548 IP (tos 0x0, ttl 63, id 541, offset 0, flags [none], proto UDP (17), length 670) 88.87.76.35.5060 > 188.187.253.2.5161: SIP, length: 642
        SIP/2.0 401 Unauthorized
        Via: SIP/2.0/UDP 188.187.253.2:5161;branch=z9hG4bK-3793281038-3809572128-4082921892-1817713916;received=192.168.0.51;rport=1149
        From: "78442374901" <sip:78442374901@188.187.253.2:5161;user=phone>;tag=470933518-3809572128-4082921892-1817713916
        To: <sip:78442526660@88.87.76.35;user=phone>;tag=as083e2094
        Call-ID: 0ee0114e207511e3a4715cf3fc1c586c@188.187.253.2
        CSeq: 1 INVITE
        Server: Asterisk PBX 11.5.1
        Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
        Supported: replaces, timer
        WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="12e41015"
        Content-Length: 0


19:15:14.684418 IP (tos 0xb8, ttl 63, id 51651, offset 0, flags [DF], proto UDP (17), length 489) 188.187.253.2.5161 > 88.87.76.35.5060: SIP, length: 461
        ACK sip:s@88.87.76.35:5060 SIP/2.0
        Via: SIP/2.0/UDP 188.187.253.2:5161;rport;branch=z9hG4bK-3793281038-3809572128-4082921892-1817713916
        From: "78442374901" <sip:78442374901@188.187.253.2:5161;user=phone>;tag=470933518-3809572128-4082921892-1817713916
        To: <sip:78442526660@88.87.76.35;user=phone>;tag=as083e2094
        Call-ID: 0ee0114e207511e3a4715cf3fc1c586c@188.187.253.2
        CSeq: 1 ACK
        Max-Forwards: 70
        User-Agent: MERA MVTS3G v.4.3.0-38t
        Content-Length: 0
итог: фейл.

Вариант без ната

настройки фаервола на сервере не меняем.
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: sip.conf
[general]
context=public
allowoverlap=no
bindport=5060
bindaddr=0.0.0.0
udpbindaddr=0.0.0.0
tcpenable=no
transport=udp
srvlookup=no

allowguest=no
dtmfmode=rfc2833
disallow=all
allow=alaw
language=ru
alwaysauthreject=yes
t38pt_udptl=yes
canreinvite=no
;;;;;;;;;;;;;localnet=192.168.0.0/255.255.255.0
;;;;;;;;;;;;;externip=88.87.76.35

register => 78442526660:****************:526660@188.187.253.3:5060

[ertelecom-in](!)
type=peer
context=incoming
nat=no
insecure=port,invite

[ertelecom-in-1](ertelecom-in)
host=188.187.253.1

[ertelecom-in-2](ertelecom-in)
host=188.187.253.2

[ertelecom-in-3](ertelecom-in)
host=188.187.253.3

[ertelecom-line](!)
t38pt_udptl=yes,redundancy,maxdatagram=400
type=peer
host=188.187.253.3
call-limit=1
;;;;;;;;;;;;;;nat=force_rport,comedia
nat=no
directmedia=yes

[ertelecom526660](ertelecom-line)
username=78442526660
fromuser=78442526660
secret=****************
настройки iptables на шлюзе аналогичны тем что выше, но без блока "проброс asterisk", т.е. 5060 не пробрасываем, только rtp и udptl

в сухом остатке:
1. исходящая связь работает, устанавливается соединение, есть звук в обе стороны
2. входящая связь работает, устанавливается соединение, есть звук в обе стороны
3. а вот факс увы не отправляется (устанаваливаеся исходящее sip соединение, имеем звук в обе стороны, отправляем факс с помощью SendFAX с опциями dfzs и получаем что наш астериск не услышал факс, а на факсе видим что он не услышал астериск...

логи тут поинтереснее:
дамп со шлюза (снимался при помощи tcpdump -nn -v -s0 \(port 5060 or portrange 4000-4999 or portrange 10000-20000\) and \(src 188.187.253.3 or dst 188.187.253.3 or src 188.187.253.1 or dst 188.187.253.1 or src 188.187.253.2 or dst 188.187.253.2 or src 192.168.0.65 or dst 192.168.0.65\) ) http://mdc-vlg.ru/mgsrv.fax.nonat.dump
и дамп с самого сервера http://mdc-vlg.ru/astsrv.fax.nonat.dump

итог: фейл.

P.S. потратил несколько часов на полную аналитику и разбор полетов. все привел как можно подробнее, чтобы было как можно меньше неясностей. заранее всем спасибо.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH