У меня есть рецепт, который я уже использую во многих случаях, но на этот раз он не работает в Debian 11 (ядро 5.10.0-10-amd64)
моя установка в основном представляет собой внутренний интерфейс eth0 для локальной сети RFC1918 и два внешних интерфейса, подключенных к некоторому ISP Box:
eth1 для ISP1 в качестве маршрутизатора по умолчанию на 10.0.0.254 с общедоступным IP-адресом 1.2.3.4 (образно)
eth2 для ISP2 имеет маршрутизатор 10.0.3.254 с общедоступным 2.3.4.5
У меня другой возможный маршрут. Я хочу контролировать, какой маршрут проходит мой пакет, поэтому я создаю некоторое правило и fwmark. Сначала я добавляю 2<tab>второй маршрутизатор
в /etc/iproute2/rt_tables
ip правило добавить fwmark 0x3 поиск secondrouter
ip route добавить по умолчанию через таблицу 10.0.3.254 secondrouter
все в порядке относительно Таблица списка IP-маршрутов secondrouter
и список IP-правил
в это время я могу сделать:
curl -4 ifconfig.me
1.2.3.4 #<- общедоступный IP-адрес моего маршрута по умолчанию
Тогда я делаю
iptables-legacy -t mangle -A ВЫВОД -d 34.117.59.81 -j MARK --set-mark 0x3
теперь, если я сделаю
curl -4 ifconfig.me
<время ожидания>
Где я ожидал 2.3.4.5 как общедоступный IP.
Таким образом, явно помеченный пакет не берет маршрут из таблицы маршрутизации ip, хуже того, он истекает по тайм-ауту.
Если я сделаю это точно так же на старом Debian, все будет работать отлично.
NB: если я сделаю
ip route add 34.117.59.81 через <второй IP-адрес маршрутизатора>
мой тест на завиток работает отлично, как и ожидалось
curl -4 ifconfig.me
2.3.4.5 #<- Pub IP-адрес моего второго маршрутизатора
Моя проблема возникает при использовании iptables
или же iptables-legacy
пометить пакеты для маршрутизации.
Кстати, у меня есть много правил iptables, которые отлично работают, так что это не похоже на проблему с iptables.
iptables-legacy-сохранить
# Сгенерировано iptables-save v1.8.7, воскресенье, 23 января, 22:35:06 2022 г.
* калечить
: ПРЕДВАРИТЕЛЬНОЕ ПРИНЯТИЕ [41:5019]
:ВВОД ПРИНЯТЬ [41:5019]
:ВПЕРЕД ПРИНЯТЬ [0:0]
: ВЫВОД ПРИНЯТ [44:4752]
:ОТПРАВКА ПРИНЯТИЯ [44:4752]
-A ВЫХОД -d 192.168.0.0/16 -j ВОЗВРАТ
-A ВЫХОД -d 172.16.0.0/12 -j ВОЗВРАТ
-A ВЫХОД -d 10.0.0.0/8 -j ВОЗВРАТ
-A ВЫХОД -d 34.117.59.81/32 -j MARK --set-xmark 0x3/0xffffffff
СОВЕРШИТЬ
# Завершено в воскресенье, 23 января, 22:35:06 2022 г.
# Сгенерировано iptables-save v1.8.7, воскресенье, 23 января, 22:35:06 2022 г.
*фильтр
:ВВОД DROP [19:7746]
:ВПЕРЕД КАПИТЬ [0:0]
: ВЫВОД ПРИНЯТ [846:62420]
-A ВВОД -m состояние --state НЕДЕЙСТВИТЕЛЬНО -j DROP
-A ВВОД -m состояние --state СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
-A ВВОД -i lo -j ПРИНЯТЬ
-A ВВОД -p icmp -j ПРИНЯТЬ
-A ВВОД -p udp -m udp --dport 500 -j ПРИНЯТЬ
-A ВВОД -p esp -j ПРИНЯТЬ
-A ВВОД -p ah -j ПРИНЯТЬ
-A INPUT -p tcp -m tcp --dport 22 -j ПРИНЯТЬ
-A INPUT -s 192.168.0.0/16 -p tcp -m tcp --dport 3128 -j ПРИНЯТЬ
-A INPUT -s 172.16.0.0/12 -p tcp -m tcp --dport 3128 -j ПРИНЯТЬ
-A INPUT -s 10.0.0.0/8 -p tcp -m tcp --dport 3128 -j ПРИНЯТЬ
-A FORWARD -m состояние --state INVALID -j DROP
-A ВПЕРЕД -m состояние --state СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
-A ВПЕРЕД -s 192.168.0.0/16 -d 10.0.6.0/24 -j ПРИНЯТЬ
-A ВПЕРЕД -s 10.0.6.0/24 -d 192.168.0.0/16 -j ПРИНЯТЬ
СОВЕРШИТЬ
# Завершено в воскресенье, 23 января, 22:35:06 2022 г.