Проблема с iptables модулем conntrack_sip
В случае использования «Заводской версии» Fedora 8 в качестве nat роутера имеем следующую проблему. Звонки на абонентов за NAT через SIP Proxy совмещенный с RTP proxy происходят без проблем.
В случае звонков на абонентов находящихся в интернете, как показано на рисунке:
получается односторонняя слышимость. Абонент находящийся в интернете не слышит абонента за NAT.
После исследования выяснилось, что модуль conntrack_sip подменяет в SDP записи пакета «OK» , приходящего после снятия трубки дальней стороной ip адрес RTP потока. Для случая на рисунке с 555.555.184.2 на 555.555.184.13. То есть фактически делает reinvite не сообщая об этом абоненту в интернете.
Вот dump соответствующих пакетов снятых на маршрутизаторе с FC8
U 2009/03/05 21:00:11.899191 555.555.184.13:5060 -> 192.168.2.24:5060
SIP/2.0 183 Session Progress..Via: SIP/2.0/UDP 555.555.184.13:5060;branch=z9hG4bK878912355;rport=1025..From: «212ua1″ <sip
:[email protected]>;tag=66346232..To: <sip:[email protected]>;tag=as41f52f95..Call-ID: [email protected]
Seq: 31 INVITE..User-Agent: XXXX..Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY..Suppor
ted: replaces..Contact: <sip:[email protected]>..Content-Type: application/sdp..Content-Length: 263….v=0..o=root 277
97 27797 IN IP4 555.555.184.2..s=session..c=IN IP4 555.555.184.2..t=0 0..m=audio 29444 RTP/AVP 18 101..a=rtpmap:18 G729/800
0..a=fmtp:18 annexb=no..a=rtpmap:101 telephone-event/8000..a=fmtp:101 0-16..a=silenceSupp:off — - — -..a=ptime:20..a=send
recv..
#
U 2009/03/05 21:00:18.573018 555.555.184.13:5060 -> 192.168.2.24:5060
SIP/2.0 180 Ringing..Via: SIP/2.0/UDP 555.555.184.13:5060;branch=z9hG4bK878912355;rport=1025..From: «212ua1″ <sip:[email protected]>;tag=66346232..To: <sip:[email protected]>;tag=as41f52f95..Call-ID: [email protected]: 31 I
NVITE..User-Agent: xxx..Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY..Supported: repl
aces..Contact: <sip:[email protected]>..Content-Length: 0….
#
U 2009/03/05 21:00:20.753646 555.555.184.13:5060 -> 192.168.2.24:5060
SIP/2.0 200 OK..Via: SIP/2.0/UDP 555.555.184.13:5060;branch=z9hG4bK878912355;rport=1025..Record-Route: <sip:555.555.184.13;
lr=on;ftag=66346232>..From: «212ua1″ <sip:[email protected]>;tag=66346232..To: <sip:[email protected]>;tag=as41f52f95..C
all-ID: [email protected]: 31 INVITE..User-Agent: XXXXX..Allow: INVITE, ACK, CANCEL, OPTIO
NS, BYE, REFER, SUBSCRIBE, NOTIFY..Supported: replaces..Contact: <sip:[email protected]>..Content-Type: application/sd
p..Content-Length: 265….v=0..o=root 27797 27798 IN IP4 555.555.184.13..s=session..c=IN IP4 555.555.184.13..t=0 0..m=audio
29444 RTP/AVP 18 101..a=rtpmap:18 G729/8000..a=fmtp:18 annexb=no..a=rtpmap:101 telephone-event/8000..a=fmtp:101 0-16..a=
silenceSupp:off — - — -..a=ptime:20..a=sendrecv..
#
Пока жду реакции от developer-ов модуля conntract_sip. Но судя по всему, что удалось найти в интернете, никто особенно данной проблемой не занимается. Самое худшее то, что модуль conntract_sip для данного Liux дистрибутива вкомпилен в ядро и просто так отключить его, без пересборки ядра возможности нет.
Решение проблемы опубликовано здесь
Июль 13th, 2009 | 19:24
Интересно, сохраняется ли данная проблема в Ubuntu 9.04.
На работе стоит шлюз Ubuntu 9.04, внутренняя сеть спрятана за NAT-ом.
Сейчас пытаюсь максимально вникнуть в ситуацию с SIP + NAT.
Работает ли оно, что нужно настроить.
Как я понимаю, если не ограничивать прохождение пакетов через FORWARD на маршрутизаторе, то всё должно работать.
Проблемы возникнут при использовании nf_conntrack_sip для динамического разрешения прохождения пакетов (iptables RELATED)
Июль 14th, 2009 | 09:07
Я собственно разработчиков SIP conntrack носом ткнул.
Вот ответ. Дальше смотрите по версии:
>> Look at nf_conntrack_sip.c
>> after comments
>> /* RTP info only in some SDP pkts */
>
>Ah I see That version is completely out of date and known to be broken.
>2.6.26 includes a rewritten version that should work fine, please try
>that or the 2.6.25 backport available at:
git://git.kernel.org/pub/scm/linux/kernel/git/kaber/nf-2.6.25-sip.git
Июль 14th, 2009 | 15:57
В данный момент активно тестирую X-Lite с оператором sipnet.
с модулями nf_conntrack_sip,nf_nat_sip или без них — звонки всегда проходят нормально (входящие и исходящие), голосовая связь двустороняя (нет проблем, что какая-то из сторон не слышит собеседника).
Возможно это благодаря самому оператору sipnet, на его сайте написано, что никаких специльных настроек не требуется и их сервера «всё сделают сами» для прохождения NAT.
В ближайшие дни поставлю нескольким сотрудникам X-Lite, потетстируем.
Октябрь 6th, 2009 | 09:25
Вообще я отказался бы от Fedora 8, старовата, современные дистры уже чуть более оптимизированы под VoIP.