Iptables: как заставить хосты выходить через определенный внешний IP?

Пусть есть Linux-router.
Пусть есть 3 внешних IP (eth0=EXT_IP0, eth0:1=EXT_IP1, eth0:2=EXT_IP2).
Пусть у него есть внутренний eth1=192.168.0.1.
И пусть есть некий 192.168.0.2 — сервер терминалов.
Задача:
1. прокидывать снаружи с EXT_IP1 порт терминалов на сервер терминалов.
2. но чтобы с последнего наружу трафик (новый) выезжал по EXT_IP2.

Первая часть решена (CentOS6, /etc/sysconfig/iptables):
*nat
-A PREROUTING -i eth0 -d <EXT_IP1> -p tcp --dport 3389 -j DNAT --to-destination 192.168.0.2:3389
*filter
-A FORWARD -i eth0 -m state --state NEW -m tcp -p tcp -d 192.168.0.2 --dport 3389 -j ACCEPT

Маскарад тоже:
-A POSTROUTING -o eth0 -j MASQUERADE

Но выезжают все, ессно, через EXT_IP0.
А надо — через EXT_IP2.
  • Вопрос задан
  • 5622 просмотра
Решения вопроса 1
polyakstar
@polyakstar
И еще, совет, если вы точно знаете ip-адрес (фиксированный) на внешнем интерфейсе, то вместо -j MASQUERADE лучше используйте -j SNAT
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
polyakstar
@polyakstar
создаем 2 таблицы маршрутизации
echo 101 wan101 >> /etc/iproute2/rt_tables
echo 102 wan102 >> /etc/iproute2/rt_tables

Помечаем исходящий трафик с нужной машины соответствующими метками в iptables:
iptables -t mangle -A PREROUTING -s 192.168.0.2 -j MARK --set-mark 102
iptables -t mangle -A PREROUTING #все остальное# -j MARK --set-mark 101

Настраиваем корректно обе таблицы маршрутизации:
ip route add $сеть_провайдера via $внешнийIP dev eth0:2 table wan102

ip rule add fwmark 102 table wan102

И по аналогии настраиваем таблицу для остальных wan101
Ответ написан
TIEugene
@TIEugene Автор вопроса
Не выходит каменный цветок…

А зачем выезжать с другого IP? Ну, например, если анонимный прокси. Чтобы IP выезда не совпадал с IP выезда.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы