LINUX.ORG.RU
ФорумAdmin

Помогите с SNAT+iproute


0

0

Хочу, чтобы UDP пакеты из локальной сети натились на сервере через сетевой интерфейс out1. Локальная сеть имеет адрес $LIP. Интерфейс out1 имеет реальный ip $RIP1. За интерфейсом out1 есть шлюз $GIP1 и это не шлюз по умолчанию. Шлюз по умолчанию имеет адрес $GIP0 и доступен через интерфейс out0, адрес интерфейса $RIP0. Делаю так: 1.iptables -t mangle -A PREROUTING -s $LIP -p udp -j MARK --set-mark 0x1 2.iptables -t nat -A POSTROUTING -s $LIP -p udp -j SNAT --to-source $RIP1 3.iptables -t mangle -A OUTPUT -s $RIP1 -j MARK --set-mark 0x1 4.echo 0 >/proc/sys/net/ipv4/conf/out1/rp_filter 5.ip route add default via $GIP1 table 1 6.ip rule add fwmark 0x1 lookup 1 После этого udp пакеты совсем никуда из сервера не уходят. Если п.1 отменить, пакеты появляются на интерфейсе out0 от адреса $RIP1. То есть SNAT работает.

На сервере работает squid и он в зависимости от запрошенного контента, выбирает себе выходной IP. Чтобы пакеты перенаправлялись в другой интерфейс добавлен п.3. Пакеты от sauid-а ходят правильно, через нужные интерфейсы и с нужными адресами. То есть маршрутизация по условию тоже работает. Почему UDP совсем никуда не уходят? Что надо сделать чтобы работала маршрутизация для UDP из локальной сети?

anonymous

Глаза сломал разбирать это сообщение, поэтому ничего умнее, чем поставить в начало каждой цепочки в iptables -j LOG правило для udp пакетов, посоветовать не могу. Может у вас в FORWARD рубятся маркированные пакеты... Ну и не забывате делать "ip route flush cache" когда добавляете/удаляете правило пункта 1.

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