LINUX.ORG.RU
ФорумAdmin

iptables+vds+openvpn

 , , ,


1

2

Здравствуйте! Подскажите, пожалуйста, кто стыкался и нашел решение следующей задачи. Есть VDS-сервер с выделенным ip-адресом, на котором поднят Openvpn-сервер. Нужно «пробросить порты» с адреса вдс-сервера (например xxx.xxx.xxx.xxx) на компьютер в подсети openvpn (10.8.0.7).

Нужно разрешить форвард пакетов в ядре (net.ipv4.ip_forward в sysctl.conf), разрешить форвард правилами iptables и отдельно пробросить порты правилами iptables. Лучше всего немного почитать мануал по iptables, а также подумать над картинкой.

pianolender ★★★ ()

Как-то так:

Прописать net.ipv4.ip_forward = 1 в /etc/sysctl.conf
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A PREROUTING -d xxx.xxx.xxx.xxx --dport 80 -j DNAT --to-destination 10.8.0.7
iptables -A POSTROUTING -d 10.8.0.7 --dport 80 -j SNAT --to-source 10.8.0.1
Пробрасывается порт 80, ip-адрес VDS в сети ВПН - 10.8.0.1. Писал по памяти, так что проверь на всякий случай.

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

Ребят, а что делать если матерится: iptables: No chain/target/match by that name.

пишу так: iptables -A PREROUTING --dst ххх.ххх.ххх.ххх -p tcp --dport 5060 -j DNAT --to-destination 10.8.0.7

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

nf_nat 22759 2 ipt_MASQUERADE,iptable_nat nf_conntrack_ipv4 9506 7 iptable_nat,nf_nat nf_conntrack 79645 6 ipt_MASQUERADE,xt_state,xt_conntrack,iptable_nat,nf_nat,nf_conntrack_ipv4 nf_defrag_ipv4 1483 1 nf_conntrack_ipv4

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

Извините, протупил

nf_nat                 22759  2 ipt_MASQUERADE,iptable_nat
nf_conntrack_ipv4       9506  7 iptable_nat,nf_nat
nf_conntrack           79645  6 ipt_MASQUERADE,xt_state,xt_conntrack,iptable_nat,nf_nat,nf_conntrack_ipv4
nf_defrag_ipv4          1483  1 nf_conntrack_ipv4
ssyuzev ()
Ответ на: комментарий от ssyuzev

Тьфу. цепочка PREROUTING не в таблице filter (которая по умолчанию берется), а в таблице nat, поэтому:

iptables -t nat -A PREROUTING --dst ххх.ххх.ххх.ххх -p tcp --dport 5060 -j DNAT --to-destination 10.8.0.7

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

Но есть одно но. Это все делается для связи 2 ip-телефонов. Так звонок идет, но при поднятии трубки связь обрывается. Что делать? Куда ковырять...

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

Нужно грузить специализированные модули, искать их надо рядом с обычными. Например, nf_nat_h323 и nf_conntrack_h323

modprobe nf_nat_h323
modprobe nf_conntrack_h323
pianolender ★★★ ()
Последнее исправление: pianolender (всего исправлений: 2)
Ответ на: комментарий от ssyuzev

Аналогичные модули: nf_nat_sip, nfs_conntrack_sip

Хотя я сомневаюсь, что это поможет. Туту уже скорее отлаживать надо: логировать трафик, который идет не через openvpn между телефонами, и смотреть, все ли такое проходит через туннель

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

Согласен полностью, варю кофе и вперед. Еще почитал что нужно udp порты перекинуть

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

нашел следующее:

Что открывать или «пробрасывать» для SIP устройств.

Открыть исходящий SIP-траффик с ip-телефона:

исходящий TCP с адреса ip-телефона с порта 5060 на все адреса на порты 1024-65535 Открыть входящий SIP-траффик на ip-телефон:

входящий TCP на адрес ip-телефона на порт 5060 со всех адресов с портов 1024-65535 Открыть исходящий RTP-траффик с ip-телефона:

исходящий UDP с адреса ip-телефона с портов {базовый порт из настройки устройства} - {базовый порт из настройки устройства + 10} на все адреса на порты 1024-65535 Открыть входящий RTP-траффик на ip-телефон:

входящий UDP на адрес ip-телефона на порты {базовый порт из настройки устройства} - {базовый порт из настройки устройства + 10} со всех адресов с портов 1024-65535 Открыть исходящий траффик с ip-телефона:

исходящий UDP с адреса ip-телефона с порта 69 на все адреса на порты 1024-65535 Открыть входящий траффик на ip-телефон:

входящий UDP на адрес ip-телефона на порт 69 со всех адресов с портов 1024-65535

Где «базовый порт из настройки устройства» для CISCO ATA-186 по умолчанию 16380-16390, а если брать настройки из моих примеров то 16500-16510; Для Grandstream по умолчанию 5000-5010. Иногда просто открывают (пробрасывают в случае работы за NAT) весь диапазон портов UDP 5000-65535.

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

Получается такая ситуация: - Будет сервер с Астериском в локалке с выходом в интернет. - Есть VDS-сервер с выделенным ip-адресом. - Есть ip-телефоны, раскиданные по разным городам.

Нужно поднять между ними связь (АТС).

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

Есть ip-телефоны, раскиданные по разным городам.

а вся эта радость умеет tls и zrtp например?

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

пока дошел до такого:


iptables -t nat -A PREROUTING --dst xxx.xxx.xxx.xxx -p tcp --dport 5060 -j DNAT --to-destination $vpn_client
iptables -t nat -A POSTROUTING --dst $vpn_client -p tcp --dport 5060 -j SNAT --to-source $vpn_server
iptables -t nat -A PREROUTING --dst xxx.xxx.xxx.xxx -p udp -m multiport --dport 5060,10000:20000 -j DNAT --to-destination $vpn_client
iptables -t nat -A POSTROUTING --dst $vpn_client -p udp -m multiport --dport 5060,10000:20000 -j SNAT --to-source $vpn_server

[code/]
ssyuzev ()
Ответ на: комментарий от generator

Походу есть решение, возможно корявое но работает. После перезагрузке подключаю скрипт:

iptables -t nat -A PREROUTING --dst xxx.xxx.xxx.xxx -p tcp --dport 5060 -j DNAT --to-destination $vpn_client
iptables -t nat -A POSTROUTING --dst $vpn_client -p tcp --dport 5060 -j SNAT --to-source $vpn_server
iptables -t nat -A PREROUTING --dst xxx.xxx.xxx.xxx -p udp -m multiport --dport 5060,10000:20000 -j DNAT --to-destination $vpn_client
iptables -t nat -A POSTROUTING --dst $vpn_client -p udp -m multiport --dport 5060,10000:20000 -j SNAT --to-source $vpn_server
modprobe nf_nat_sip
modprobe nf_conntrack_sip
modprobe ip_conntrack_sip

Проверено, методом тыка.

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

Фишка в том, что можно подключать абонентов еще и с помощью софтфонов. Т.е. решение более универсально и доступно обычным пользователям

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

Ну никто не мешает выпускать ip-телефоны напрямую в интернет, а софтфоны через vpn-шлюз

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

у меня похожая ситуация. Есть IP атс за шлюзом с centos, а клиент за обычной железкой-роутером в интернете. Выяснил, что ip_nat_sip не подменяет локальные адреса в уходящих пакетах и клиент пытается ответить на локальный адрес атс и, естественно пакет отбрасывается. При звонке от клиента все нормально и голос в обе стороны. При звонке с атс звонок приходит но в трубке тишина на обоих концах. Вот пример пакета уходящего в centos в инет клиенту:

Session Initiation Protocol
Request-Line: INVITE sip:118@XXX:5060 SIP/2.0
Message Header
Via: SIP/2.0/UDP 192.168.0.248:5060;branch=z9hG4bK00005aac
Max-Forwards: 70
To: sip:118@192.168.0.248
From: "L-001" <sip:192.168.0.248>;tag=29307
Call-ID: 00006659-0b75625e2c88100088ff0080f0ccbddc@192.168.0.248
CSeq: 1 INVITE
Contact: sip:192.168.0.248:5060
Supported: timer
Session-Expires: 90;refresher=uac
Min-SE: 90
Allow: INVITE,ACK,CANCEL,BYE,REGISTER
Content-Type: application/sdp
Content-Length: 258
Message Body
XXX-белый адрес centos`а. 0.248 -атс Насколько знаю модуль ip_nat_sip (nf_nat_sip) не настраивается никак. Почему же он не заглядывает в пакеты?

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

ЗЫ: я имел ввиду именно SIP пакет, а не RTP. Т.е. клиент получает INVITE от атс, начинает звонить, но его ответ на атс не приходит и атс снова посылает инвайт, и так по кругу. И звонок даже у клиента соответственный- рывками

nebel ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.