<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/
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
Всем спасибо.