<SOLVED>Вопрос про policy route

Добрый день.
Возникла вот такая задача:

Есть 4 машины.
Клиент, server, out1, out2
client (192.168.1.4 eth0)

server (192.168.1.3 eth0
192.168.101.3 eth1
192.168.102.3 eth2

out1 (192.168.101.2 eth0)
out2 (192.168.102.2 eth0)

client подключается к server по порту 10100.
На comm-server этот порт пробрасывается с помощью DNAT на другой ip:port

server# iptables -t nat -A PREROUTING -p tcp --dport 10100 -j DNAT --to-destination 192.168.101.3:42376
server# iptables -t nat -A PREROUTING -p tcp --dport 10200 -j DNAT --to-destination 192.168.102.3:42376

Софтина которая там висит слушает 0.0.0.0
Собственно я даже могу к ней подключится телнетом на любой из портов которые я прописал и она ответит. tcp соединение устанавливается.

Дальше мне надо что бы соответственно трафик уходил на нужный шлюз через эту софтину. Сама софтина умеет отправлять с того адреса на который получила. эдакая прокси.
Прописываю роутинг

server# ip route add default via 192.168.101.2 table 101
server# ip rule add from 192.168.101.3 lookup 101

И если проверить ping -I 192.168.101.3 8.8.8.8 - то все отлично работает. Трафик уходит.
А вот теперь проблема:
Но почему то в этот момент ломается DNAT.
То есть соединение от client к server перестает устанавливаться.
Смотрю в tcpdump и вижу только syn-ы который от клиента и все. при этом я даже вижу как счетчик в iptables на правиле с DNAT увеличивается.
Явно как то не так я прописываю роутинг. Как только убираю rule - соединение устанавливается но мне то еще надо и дальше как то трафик пробросить.
В чем может быть дело? Явно где то я не понимаю чего то.

http://lartc.org/howto/

Спасибо конечно. Я читал но

Спасибо конечно. Я читал но видимо чего то не понял. Если знаете - объясните.

Вообщем я решил

Вообщем я решил проблему.
Может кому то будет полезно а может кто то даст лучшее решение.
1) Надо отключить в /etc/sysctl.conf

net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0

Reverse Path Filtering
то есть разрешить что бы ответные пакеты ходили через другие интерфейсы.

2) Надо прописать маркировку соединений на порт который dnatируем

iptables -t mangle -A PREROUTING -p tcp --dport 10100 -j CONNMARK --set-mark=4
iptables -t mangle -A PREROUTING -p tcp --dport 10200 -j CONNMARK --set-mark=4
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark

3) Ну и отправить пакеты в main

ip rule add fwmark 4 table main

Всем спасибо.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".