LINUX.ORG.RU
ФорумAdmin

Перенаправление по порту в iptables

 ,


0

1

Добрый день.

Есть две подсети, подключенные к двум сетевым адаптерам: eth0: 192.168.0.2 подсеть 192.168.0.0/24 eth1: 192.168.1.2 подсеть 192.168.1.0/24 Нужно чтобы трафик приходящий на оба интерфейса на порт 2102 перенаправлялся на eth0 и 192.168.0.10:2102.

Попробовал создать правила хотя бы для eth0:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 192.168.0.10 --dport 2102 -j DNAT --to-destination 192.168.0.2:2102
iptables -t nat -A POSTROUTING -p tcp -m tcp -d 192.168.0.2 --dport 2102 -j SNAT --to-source 192.168.0.10:2102
А не работает.

Что не так? Кто-нибудь сможет помочь разобраться? Заранее спасибо.


echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 2102 -j DNAT --to-destination 192.168.0.10
iptables -t nat -A POSTROUTING -p tcp -m tcp -d 192.168.0.10 --dport 2102 -j MASQUERADE
Black_Shadow ★★★★★
()
Ответ на: комментарий от zuxla

Не охота мозг напрягать.
Может ip forward в sysctl.conf включи. Ну и соответственно в iptables тоже.

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

echo 1 > /proc/sys/net/ipv4/ip_forward

Звиняй. Просмотрел... :)

hbars ★★★★★
()

полная хрень!

первая строка не работает, т.к. пакеты с адресом назначения 192.168.0.10 не должны приходить на машину с адресом 192.168.0.2 через eth0 ( proxy-arp может помочь). Вторая причина - ответы от 192.168.0.10 клиентам сети 192.168.0.0/24 пойдут напрямую, что делает неработоспособной tcp-сессию: клиент ожидает ответа от .10, а он приходит с .2

для приходящих через eth1 это правило должно работать ( если нет других косяков)

вторая строка вообще непонятно зачем. Если имелось ввиду обработка ответные пакетов, то о них заботится conntrack.

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

Работает, спасибо огромное! И если не сложно, можно обьяснить: для чего во втором правиле нужно маскарадить пакет, а не snat, как у меня?

zuxla
() автор топика
Ответ на: комментарий от Black_Shadow

И какой вид приймут правила, если нужно пробросить с порта 5820 eth0/eth1 на 192.168.0.10 порт 2102?

С первым правилом все понятно:

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 5820 -j DNAT --to-destination 192.168.0.10:2102

а второе как?

zuxla
() автор топика
Ответ на: комментарий от hbars

Не заню нужно ли, но походу я разобрался. Если на примере проброса UltraVNC с тех же адаптеров 192.168.0.2 и .1.2.

c порта 5846 отпарвляем на 192.168.1.16:5811

с порта 5841 отправляем на 192.168.1.11:5811

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 5846 -j DNAT --to-destination 192.168.1.16:5811
iptables -t nat -A POSTROUTING -p tcp -m tcp -d 192.168.1.16/32 --dport 5811 -j MASQUERADE --to-ports 5846

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 5841 -j DNAT --to-destination 192.168.1.11:5811
iptables -t nat -A POSTROUTING -p tcp -m tcp -d 192.168.1.11/32 --dport 5811 -j MASQUERADE --to-ports 5841

Вроде UltraVNC клиент работает и показывает в заголовке окна адреса 1.16 и 1.11. Но правильно ли так?

zuxla
() автор топика
Ответ на: комментарий от hbars

А оно и не нужно.

Нужно, если между сетями нет маршрутов. Если есть - то нафига порты пробрасывать?

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

Маскарад и SNAT - это почти одно и то же, просто в случае с маскарадом система сама определяет, какой адрес источника подставить. В случае с SNAT, адрес надо указывать.

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

Разобрались, всем спасибо.

PS: В моем самом первом случае нужно было пробрасывать порты потому что БД пеерахала на Linux, а сервер защиты (порт 2102) на винду :) в самой программе-клиенте не разделить на каком IP висит БД, а на каком - сервер защиты.

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