Два провайдера. Пакеты исчезают при маршрутизации

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

DSS
Сообщения: 390

Два провайдера. Пакеты исчезают при маршрутизации

Сообщение DSS »

Два провайдера, одна локалка.

Создал две дополнительных таблицы маршрутизации.
В каждую добавил информацию о сети соответствующего провайдера, локальной сети и 127.0.0.0/8. Добавил в каждую таблицу шлюз провайдера как default маршрут.
В основной таблице шлюз первого провайдера прописан как шлюз по умолчанию.

Дальше делаю так:

Код: Выделить всё

ip rule add fwmark 100 table ISP1
ip rule add fwmark 200 table ISP2

iptables -t mangle -A PREROUTING -i eth1 -j MARK --set-mark 100
iptables -t mangle -A PREROUTING -i eth2 -j MARK --set-mark 200

iptables -t mangle -A PREROUTING -d some_IP/32 -j MARK --set-mark 200

iptables -o eth1 -j MASQUERADE
iptables -o eth2 -j MASQUERADE

iptables -A FORWARD -s $LOCAL_NET -j ACCEPT
iptables -A FORWARD -d $LOCAL_NET -j ACCEPT


И получаю такую картину: при попытке соединиться из внутренней сети на some_IP пакет проходит PREROUTING, где успешно маркируется правильной меткой; потом попадает в FORWARD, где видно, что выходной интерфейс определён верно (т.е. пакет попал по метке в нужную таблицу); выходит на нужном интерфейсе через POSTROUTING с NAT'ом. tcpdump показывает вылетающий пакет. Т.е. всё правильно.
Только соединения нет, потому что в обратном направлении пакеты пропадают. tcpdump показывает, что пакет проходит по правильному интерфейсу. В PREROUTING пакет проходит, успешно маркируется правильной меткой. И всё. Дальше его уже нету. В FORWARD - тишина.
Спасибо сказали:
Аватара пользователя
mandreika
Сообщения: 217
ОС: Debian 3,4,5,6

Re: Два провайдера. Пакеты исчезают при маршрутизации

Сообщение mandreika »

может
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

и еще

iptables -t mangle -A PREROUTING -i eth1 -j MARK --set-mark 100
iptables -t mangle -A PREROUTING -i eth2 -j MARK --set-mark 200

ты помечаешь входящие пакеты - дай вывод ip rule ip route list table ISP1 и ISP2


По мне - так достаточно сделать
iptables -t mangle -A PREROUTING -d some_IP/32 -j MARK --set-mark 200
iptables -A FORWARD -s $LOCAL_NET -d some_IP/32 -j ACCEPT
iptables -t filter -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
Спасибо сказали:
DSS
Сообщения: 390

Re: Два провайдера. Пакеты исчезают при маршрутизации

Сообщение DSS »

user@host

# ip rule list 0: from all lookup local 32762: from all fwmark 0xc8 lookup ISP2 32763: from all fwmark 0x64 lookup ISP1 32764: from 172.20.2.0/24 lookup ISP2 32765: from 172.20.1.0/24 lookup ISP1 32766: from all lookup main 32767: from all lookup default # ip route list table ISP1 172.20.100.0/24 dev eth3 scope link src 172.20.100.1 172.20.1.0/24 dev eth1 scope link src 172.20.1.50 127.0.0.0/8 dev lo scope link default via 172.20.1.1 dev eth1 src 172.20.1.50 # ip route list table ISP2 172.20.100.0/24 dev eth3 scope link src 172.20.100.1 172.20.2.0/24 dev eth2 scope link src 172.20.2.35 127.0.0.0/8 dev lo scope link default via 172.20.2.1 dev eth2 src 172.20.2.35


Правила на счёт RELATED и ESTABLISHED имеются - у меня openSuSE - она сама их дописывает.

В цепочке FORWARD - второе правило (первое - про TCPMSS) - написанное мной -j LOG. Так вот когда пакет приходит из сети провайдера (например, ответ на пинг), то в FORWARD он не попадает. Хотя в PREROUTING он есть и помечается правильной меткой (там тоже -j LOG вставил, чтобы глядеть). В прямом направлении всё без проблем.
Спасибо сказали:
DSS
Сообщения: 390

Re: Два провайдера. Пакеты исчезают при маршрутизации

Сообщение DSS »

Проблема в частности решена.
В общем - не решена.

Для того, чтобы хоть как-то заработало - надо отключить rp_filter на сетевом интерфейсе, который не является маршрутом по умолчанию.
При этом в sysctl.conf присутствует параметр proc.sys.net.ipv4.conf.all.rp_filter, который перекрывает параметры, установленные для каждого конкретного интерфейса.
Кроме того, в SuSE SuSEfirewall2 имеет параметр FW_KERNEL_SECURITY, который также влияет на rp_filter. Надо либо править /sbin/SuSEfirewall2, либо ставить FW_KERNEL_SECURITY="no", что не есть хорошо.

З.Ы.: Вообще, взаимодействие ядра, утилит ip и iptables - это форменный дурдом.
Спасибо сказали: