LINUX.ORG.RU
ФорумAdmin

Подмена адреса источника в SIP пакетах

 , ,


1

1

Есть проблема. Есть маленькая локальная сеть на входе стоит роутер на linux, в этой сети стоит Цифровая АТС panasonic. К этой АТС можно подключать SIP телефоны ТОЛЬКО из подсети АТС. Мне требуется подключать телефон из любой сети (с сотового из приложения).

Вопрос. Можно ли и как сделать прозрачную подмену адреса (ОТ и К) АТС?

Если я правильно понимаю, то нужно при поступлении пакета от телефона (из интернета) реальный ip заменить на внутри сетевой (192.168.101.181), а при поступлении пакета от АТС к подменному (192.168.101.181) заменить его на реальный внешний. Смотрел в сторону POSTROUTING, но чего то либо недопонимаю либо делаю неверно.

-A POSTROUTING ! -s 192.168.101.250 -p tcp --dport 5060 -o eth1 -j SNAT --to-source 192.168.101.181

192.168.101.250 - адрес АТС
192.168.101.181 - подменный адрес телефона
eth1 - интерфейс в подсеть с АТС

нифига не смыслю в SIP, но там вроде внутри пакета SIP есть адреса и порты.
https://ru.wikipedia.org/wiki/Протокол_установления_сеанса#Сообщения_протокол...
А посему на iptables - этого не сделаешь.

Atlant ★★★★★ ()
Последнее исправление: Atlant (всего исправлений: 1)
Ответ на: комментарий от zhukovia

Можно попробовать загрузить модули ядра nf_conntrack_sip и nf_nat_sip и настроить нужный нат (собственно эти модули и нужны, чтобы смотреть внутрь sip-пакетов и что-то менять)

Есть вероятность, что все заработает и netfilter будет подменять адреса как в заголовках, так и в SDP вложениях. Плюс динамически открывать порты (нужно разрешение на RELATED соединения) для rtp-потоков

Но гарантий, что это заработает без косяков нет

CaHbl4 ()
Ответ на: комментарий от zhukovia

Ну вот тут, например. Только тут имена модулей старые, ip_conntrack_sip и ip_nat_sip, но сути не меняет

Правила нат для sip примерно такие (протокол указал udp, т.к. он чаще используется; если нужен именно tcp, можно поменять или добавить еще пару правил).

# Перенаправить пакеты с внешнего интерфейса на внутренний адрес АТС
-A PREROUTING -d ${внешний адрес} -p udp --dport 5060 -i ${внешний интерфейс} -j DNAT --to-destination 192.168.101.250

# Подменить source адрес пакетов
-A POSTROUTING -d 192.168.101.250 -p udp --dport 5060 -o eth1 -j SNAT --to-source 192.168.101.181

Ну и tcpdump/wireshark etc. Смотреть, что присходит, донастраивать. Не уверен, что так сходу нормально пойдут rtp-потоки

CaHbl4 ()

К этой АТС можно подключать SIP телефоны ТОЛЬКО из подсети АТС

поставь в эту подсеть астериск, сделай на астериске всё, что хочешь, настрой переадресацию с номера панасоника на номер астериска. :)

aol ★★★★★ ()
Ответ на: комментарий от aol

поставь в эту подсеть астериск, сделай на астериске всё, что хочешь, настрой переадресацию с номера панасоника на номер астериска. :)

Я тоже об этом подумал, вот только пока не понимаю как на астериске настроить несколько СИП с разными IP. Как я полагаю, Panasonic не даст подключать несколько учеток СИП на 1 IP.

Я уже думал как нибудь через физические порты Ponas АТС это сделать, но тогда как конвертировать из 2-х проводного в СИП и обратно.

Может я конечно ерунду говорю, но есть ли у Asterisk функция Forward Sip учеток (что то типа NAT). Чтобы для Panas АТС он выглядел как SIP телефон, а для SIP телефона как АТС. Надеюсь понятно донес мысль.

Хочу понять в каком направлении будет лучше «грести».

zhukovia ()
Ответ на: комментарий от zhukovia

но тогда как конвертировать из 2-х проводного в СИП и обратно.

стык (переход) между цифрой и аналоговыми - дополнительный гемор и снижение качества сигнала (эхо и т.п.)

как на астериске настроить несколько СИП с разными IP

зачем с разными? клиент регистрируется на астериске, у него ури <номерНаАстериске@<адресАстериска> и так у каждого, кто зарегается на астериске: <номер1НаАстериске@<адресАстериска>, <номер2НаАстериске@<адресАстериска>.

дальше маршрутизируешь на панасе (яхз, как - не тыкал их)

<номер1НаПанасе> -> <номер1НаАстериске@<адресАстериска>
<номер2НаПанасе> -> <номер2НаАстериске@<адресАстериска>

и т.д.

И обратные маршруты настрой на астериске. что-нибудь типа

<всеНомераНаАстериске> -> <транкДляИсходящих>

И тогда регистранты астериска вообще не будут знать про панас ничего. у них своя АТС с удобствами.

aol ★★★★★ ()

Тебе нужно пробросить порт для сигналки (по дефолту 5060) и порты для RTP (ты их сам выбираешь в rtp.conf). И если ты все-таки решишься это сделать, то я крайне рекомендую заранее позаботится о секьюрности.

Разрешай регистрацию с внешки только тем, кому это реально необходимо. Проверь, что все пароли имеют достойный уровень энтропии. И что вызовы от незареганых эндпойнтов летят строго в мусорку. В идеале надо ставить SBC (https://opensips.org/) или цепляться только через выделенный VPN.

Наши китайские и иранские друзья давно придрочились ломать астериски, настроенные по васяновским гайдам из интернета.

emcode ()
Ответ на: комментарий от aol

стык (переход) между цифрой и аналоговыми - дополнительный гемор и снижение качества сигнала (эхо и т.п.)

Да я уже передумал так делать. Т.к. помимо описанных проблем, еще и железки покупать надо.

дальше маршрутизируешь на панасе (яхз, как - не тыкал их) ''' <номер1НаПанасе> -> <номер1НаАстериске@<адресАстериска> <номер2НаПанасе> -> <номер2НаАстериске@<адресАстериска> ''' и т.д.

Надо пробовать, но возможно, Панаса будут с этим проблемы. Ведь запросы по сип будут идти с одного и того же IP. Вообщем буду дальше думать.

zhukovia ()