AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Kamailio и NAT

OpenSER 7 сообщений -
#1

Добрый день!

Стоит Kamailio в сети с IP RFC1918.
Есть пользователи, у которых за роутерами также используются эти же сети.
Проблему с маршрутизацией как-то они решают, моя задача объяснить Kamailio, что данные пользователи стоят за NAT.
Я решил проверять только сеть 172.16, с остальными сетями пользователи сами пусть мудохаются.
Пытался сделать так:
Код:

route[2]{
force_rport();
if (nat_uac_test("18")) {
if (method=="REGISTER") {
fix_nated_register();
} else {
fix_nated_contact();
};
setflag(5);
}
# Contact:: sip:22222@172.16.0.2:5061 Q=0
else if search('Contact:.*sip:[0-9].+@172\.16\..+') {
xlog("L_INFO","Fix NAT user with src_ip=$src_ip\n");
if (method=="REGISTER")
{
nat_keepalive();
$avp(s:received_uri) = $source_uri;
fix_nated_register();
} else {
$avp(s:received_uri) = $source_uri;
fix_nated_contact();
}
setflag(5);
}


Но видимо не правильно search пишу, т.к. проверка не срабатывает.

Отсюда два вопроса:
1. Как правильно написать search
2. Какой еще способ подскажете?

P.S. Kamailio version: 1.4.3

_________________
Maksim Timofejev
#2

Я делаю так - проверяю если IP и/или порт из верхнего Via хидера не равно IP и/или порту с которого пришел запрос тогда считаю что запрос пришел из-за NATа:


Цитата:

....
#
# If (received.ip != topmost_via.ip) ||
# (received.port != topmost_via.port)
#
if(nat_uac_test("18")) {
xlog("L_INFO", "Request is behind NAT");
....
}
....
#3

Это производится этим кодом?
Попробую, спасибо.

Код:

# If (received.ip != topmost_via.ip) ||
# (received.port != topmost_via.port)


Код
Код:
if(nat_uac_test("18"))
я уже использую, но не во всех случаях это подходит.
_________________
Maksim Timofejev
#4

tma писал(а):

Код
Код:
if(nat_uac_test("18"))
я уже использую, но не во всех случаях это подходит.
И в каких неработает?
#5

Пока это неподтвержденное мнение.
Лично у меня все работает, только два телефона за одним NAT'ом не работают. Не разбирался еще (есть идеи?).
А вот пользователи жаловались, но они всегда жалуются и чаще всего не по делу, так что возможно я и не прав.

_________________
Maksim Timofejev
#6

Идей много - уже искурил огромное количество проблем с NATом - плюс проблем с sip-enabled NATами которые меняют в SIP запросах IP и порты на внешние и наоборот какбы маскируя внутреннюю сеть. В большинстве случаев они или работают неверно или тупо забывают про rport или про contact из-за неверных настроек.
Только вот по куску конфига и отсутствию логов проблемных звонков врятли можно генерировать правильные идеи...
#7

simax писал(а):
Только вот по куску конфига и отсутствию логов проблемных звонков врятли можно генерировать правильные идеи...

Как только будут -- выложу.
Пока я столкнулся с проблемами, описанными в соседних топиках:
1. Kamailio падает при использовании БД. Причем пока не смог выявить в какой момент, хотя есть варианты.
2. Преобразование номера в e164 для биллинга (авторизация через radius).

_________________
Maksim Timofejev