Есть локальная сеть интернет-шлюз на 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
В чем может быть причина?
