LINUX.ORG.RU
ФорумAdmin

Linux, PBR, маркировка пакетов

 ,


0

3

Есть локальная сеть интернет-шлюз на Linux Oracle 9(клон редхат 9, аналог almalinux/rocky)

Интернет шлюз имеет три сетевых интерфейса:

eth0 - 192.168.0.1/24 локальная сеть

eth1 - основной провайдер, адрес интерфейса X.X.X.X, дефолтный шлюз шлюз X.X.X.1

eth2 - резервный провайдер, адрес интерфейса Y.Y.Y.Y, дефолтный шлюз шлюз Y.Y.Y.1

В дефолтной таблице маршрутизации main шлюз по-умолчанию X.X.X.1

Также есть две дополнительные таблицы маршрутизации isp1 и isp2:

# ip ro show table isp1
default via X.X.X.1 dev eth1 proto static metric 410

# ip ro show table isp2
default via Y.Y.Y.1 dev eth2 proto static metric 404

То есть дефолтный маршрут через каждого провайдера.

Правила:

# ip ru
10:     from X.X.X.X lookup isp1 proto static
20:     from Y.Y.Y.Y lookup isp2 proto static

Настроен выход в интернет через нат хостов локальной сети:

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

Задача: пустить трафик от хоста 192.168.0.10 в интернет через второго провайдера.

С помощью правила

ip rule add from 192.168.0.10 lookup isp2

все работает как и ожидается, хост 192.168.0.10 ходит в интернет через шлюз второго проавайдера Y.Y.Y.Y traceroute и tcpdump это подтверждают.

НО, возможностей ip rule мне не достаточно, хотел использовать маркировку пакетов и вот тут ничего не получилось.

Маркирую пакеты от хоста 192.168.0.10:

iptables -t mangle -A PREROUTING -s 192.168.0.10 -j MARK --set-mark 101

Отправляю в нужную таблицу маршрутизации:

ip rule add fwmark 0x65 lookup isp2

Интернет на хосте 192.168.0.10 перестает работать. Для теста с хоста 192.168.0.1 пингую 1.1.1.1 На стороне инетрнет-шлюза tcpdump’ом вижу:

11:31:20.955376 eth0 In  IP 192.168.0.10 > 1.1.1.1: ICMP echo request, id 1, seq 38, length 40
11:31:20.955409 eth2 Out IP Y.Y.Y.Y > 1.1.1.1: ICMP echo request, id 1, seq 38, length 40
11:31:20.965156 eth2 In  IP 1.1.1.1 > Y.Y.Y.Y: ICMP echo reply, id 1, seq 38, length 40

То есть:

первый пакет от хоста 192.168.0.10 приходит на шлюз через интерфейс локальной сети eth0

второй пакет с шлюза уходит на хост назначения через правильный интерфей второго провайдера eth2

третий пакет от хоста назначения возвращает echo reply на шлюз через интерфей второго провайдера eth2

и на этом все, пакет со шлюза больше никуда не уходит, хотя дальше должно быть так(с правилом ip rule add from 192.168.0.10 lookup isp2 так работает):

12:20:38.567546 eth0 Out IP 1.1.1.1 > 192.168.0.10: ICMP echo reply, id 1, seq 54, length 40

В чем может быть причина?



Последнее исправление: andreyche (всего исправлений: 2)