LINUX.ORG.RU
решено ФорумAdmin

Перенаправить трафик с источника к назначение:порт на адрес:порт

 


0

1

Приветствую господа! Имею вопрос, и надеюсь на помощь от знатоков.

Есть два сервера: 10.0.0.2 (основной) и 10.0.0.3 (запасной) также машина выступающая в роли шлюза 10.0.0.100

необходимо адресу 10.0.0.8 подменить назначение только в случае обращения к адресу 10.0.0.2:80 на 10.0.0.3:80 и ответ вернуть обратно.

Задумка такова, выполнив скрипт на шлюзе все запросы к основному серверу от моего ПК должный уйти на запасной и назад должны вернуться ответы, при этом другие порты и другие ПК в сети не должны участвовать в этом условии.

Пробую сырой вариант без --source и --dport просто подменить назначение.

iptables -t nat -A PREROUTING -d 10.0.0.2 -j DNAT --to-destination 10.0.0.3
iptables -t nat -A POSTROUTING -s 10.0.0.3 -j SNAT --to-source 10.0.0.3
Отправка отрабатывает, пинги уходят на 10.0.0.3, но обратной связи уже нет. Пробовал маскарадить но так не сработало. Чувствую, что решение на поверхности но не понимаю.

Будьте любезны, пните в нужном направлении.

Ваше SNAT-правило не имеет смысла. Проблема у вас, скорее всего, в том, что пакеты от 10.0.0.3 идут напрямую, а не через 10.0.0.2, но для точного определения этого есть tcpdump.

mky ★★★★★ ()

не совсем понятно при чем тут шлюз 10.0.0.100.

размер сети /24 и все эти машины в одной подсети ?

Какой смысл действия iptables -t nat -A POSTROUTING -s 10.0.0.3 -j SNAT --to-source 10.0.0.3 если адрес не меняется?

Главное условие работоспособности NAT - пакеты в обе стороны должны идти через машину выполняющего NAT.

Если сделать DNAT на 10.0.0.3:80 для пакета 10.0.0.8:1024->10.0.0.2:80, то назад пойдет пакет 10.0.0.3:80->10.0.0.8:1024, т.е. мимо 10.0.0.2 , да и 10.0.0.8 такой ответ совсем не ожидает

Один из выходов - двойной nat (snat + dnat). Выглядит это примерно так:

-A PREROUTING -p tcp -s 10.0.0.8 -d 10.0.0.2 --dport 80 -j DNAT --to-destination 10.0.0.3:80
-A POSTROUTING p tcp -s 10.0.0.8 -d 10.0.0.3 --dport 80 -j SNAT --to-source 10.0.0.2

Ну и tcpdump в помощь.

vel ★★★★★ ()

У вас все машины в одной сети, поэтому трафик идет напрямую, минуя шлюз. Надо на хосте 10.0.0.8 завернуть трафик через шлюз. Попробуйте прописать маршрут до 10.0.0.2 через шлюз 10.0.0.100 на хосте 10.0.0.8. Но это бред, т.к. тогда проще на этом же хосте и сделать DNAT.

Ну и с nat-ом на шлюзе как то так:

iptables -t nat -A PREROUTING -s 10.0.0.8 -d 10.0.0.2 -j DNAT --to-destination 10.0.0.3
iptables -t nat -A POSTROUTING -s 10.0.0.8 -d 10.0.0.0/24 -o eth0 -j SNAT --to-source 10.0.0.100

# eth0 - LAN interface
как уже сказано выше, не хватает SNAT/MASQUERADE что бы подменить адрес источника.

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