Как пробросить SIP с помощью iptables между двумя VPN?
Добрый день. Никогда не имел дело с iptables и вот опять))
Ситуация такая: Есть машина с UBUNTU, она стоит за роутером, на роутере белый айпи. На этой машине поднято два VPN, одна к сети предприятия kvnet (10.10.0.0/24), вторая на смартфон wghub (10.20.0.0/24) и локальный интерфейс enp0s3 (192.168.0.0/24).
Разрешаю форвардинг:
sudo sysctl -q -w net.ipv4.ip_forward=1
Разрешаю форвардинг между VPN интерфейсами (но похожу это совсем необязательно):
sudo iptables -A FORWARD -i wghub -o kvnet -j ACCEPT
sudo iptables -A FORWARD -i kvnet -o wghub -j ACCEPT
Включаю полный маскарад)):
sudo iptables -t nat -A POSTROUTING -o wghub -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -o kvnet -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
В итоге имею:
Со смартфона пингуются все машины домашней и все машины рабочей сети. RDP работает. Часть задачи выполнена.
Но хочется чтобы еще работала Voip звонилка на смартфоне, подключенная к АТС предприятия, а она этого не хочет. Дозвон проходит и даже собеседник меня слышит, а вот я его нет. В статистике звонка видно, что входящих пакетов нет вобще. Делаю вывод что для SIP нужно входящее соединение и через мой импровизированный NAT оно не пролазит, сервер шлет пакеты на UBUNTU, а дальше что с ними делать ей неизвестно. И тут бы я и успокоился, да вот странная штука, несколько звонков удалось выполнить с двухсторонней связью, при этом я так и не понял как это произошло, разобраться как такое повторить не получилось))
Пытался вместо маскарада прописывать жесткие правила, но ничего это не дало.
Включаю NAT:
sudo iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o kvnet -j SNAT --to-source 10.10.0.2
Правила для форвардинга sip и rtp портов на смартфон:
sudo iptables -t nat -A PREROUTING -i kvnet -p udp -m udp --dport 5004:5089 -j DNAT --to-destination 10.20.0.2:5004-5089
sudo iptables -t nat -A PREROUTING -i kvnet -p udp -m udp --dport 10000:20000 -j DNAT --to-destination 10.20.0.2:10000-20000
Подтолкните пожалуйста в нужном направлении, опыта работы с iptables совсем нет((
UPD: Вопрос решен. Посмотрел открытые соединения в свою сторону с сервера VPN предприятия и увидел, что RTP пакеты идут не по портам диапазона 10000-20000, а по одному порту 8000. Почему так не знаю, в настройках АТС указан стандартный диапазон, но уже не суть. В итоге прописал одно единственное правило: sudo iptables -t nat -A PREROUTING -i kvnet -p udp -m udp --dport 8000 -j DNAT --to-destination 10.20.0.2:8000 и все пошло как надо.
Не нашел такого в настройках сип абонентов. АТС Eltex. Но уже не важно, получилось и без этого. Всего одно правило проброса порта нужно было, просто порт почему-то не из диапазона 10000-20000 а 8000 оказался.
А как тогда между сетями обмен пакетами организовать? Если убрать маскарад, то машины этих сетей друг для друга недоступны. Рабочая сеть не знает о существовании сети в которой смартфон, а прописывать маршрут на шлюзе предприятия из-за этой задачи не хотелось бы.
Или речь не про это? Я не сильно шарю в данном вопросе, если не сложно, напишите свою мысль более детально. Спс.
а прописывать маршрут на шлюзе предприятия из-за этой задачи не хотелось бы
прописывать маршрут должно хотеться гораздо сильнее, чем прописывать NAT. Маршрутизация - более прозрачный, более человеческий метод. Где можно обойтись маршрутизацией, там следует обходиться маршрутизацией.
Yuhter, это самое просто решение. Другие решения включают реализацию прохождения sip и rtp через nat по всей цепочке, я бы не рекомендовал подобную конфигурацию без хорошего знания сетей и особенностей реализации на конкретном оборудовании.
nApoBo3, в общем в моем случае мне хватило одного правила. Глянул я на VPN сервере открытые соединения в свою сторону. И обнаружил там, что rtp идет не по 10000-20000 портам, а по 8000. Сделал правило в iptables на проброс этого порта на конкретный ip своего смартфона и все заработало. Если конечно понадобится несколько абонентов так подключить, то буду копать уже в сторону нормальной маршрутизации. Спасибо.