Рейтинг:0

Невозможно использовать fwmark в Debian 11 (bulleyes) для изменения поведения маршрутизации

флаг gf

У меня есть рецепт, который я уже использую во многих случаях, но на этот раз он не работает в 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 г.
флаг us
Пожалуйста, добавьте вывод `iptables-save` к вопросу.
dominix avatar
флаг gf
@tero-kilkanen ... готово
Рейтинг:0
флаг gf

Когда пакет выходит из машины, ему присваивается исходный IP-адрес, соответствующий выходному интерфейсу по умолчанию.

Таким образом, необходимо добавить правило MASQUERADE на выходной интерфейс, потому что правила маркировки дают нашему пакету другое назначение, чем запланированное.

iptables-legacy -t nat -A POSTROUTING -o eth2 -j MASQUERADE

для понимания порядка обработки сетевого фильтра: (через пуф)

                     (входной интерфейс)
                             |
                             в
                     /-------+-------\
                     | проверки вменяемости |
                     \-------+-------/
                             |
                             v ловушка NF_IP_PRE_ROUTING
                      +------+------+
                      | Контрак |
                      | дефрагментация |
                      +-------------+
                      | калечить |
                      | ПОДГОТОВКА |
                      +-------------+
                      | нат (дст) |
                      | ПОДГОТОВКА |
                      +------+------+
                             |
                             в
        местная доставка /----+----\ вперед
       +---------------+ маршрут +---------------+
       | \---------/ |
       в в
 /-----+-----\ /-----+-----\
 | дефрагментация | | проверка TTL |
 \-----+-----/ | дек. ТТЛ |
       | \-----+-----/
       v ловушка NF_IP_LOCAL_IN |
+------+------+ |
| мангл (1) | |
| ВВОД | |
+-------------+ |
| фильтр | в
| ВВОД | /-----+-----\
+-------------+ | проверка ДФ |
| нат (источник)(2)| \-----+-----/
+-------------+ |
| Контрак | |
| подтвердить | | 
+------+------+ ловушка v NF_IP_FORWARD
       | +------+------+
       в | мангл (1) |
/------+--------\ | ВПЕРЕД |
| локальный процесс | +-------------|
\------+--------/ | фильтр |
       | | ВПЕРЕД |
       v +------+------+
 /-----+-----\ |
 | маршрут | |
 | фраг. | |
 \-----+-----/ |
       | |
       v ловушка NF_IP_LOCAL_OUT |
+------+------+ |
| Контрак | |
| дефрагментация | |
+-------------+ |
| калечить | |
| ВЫХОД | |
+-------------+ v
| нат (дст)(3)| /-----+-----\
| ВЫХОД | | фраг. |
+-------------+ \-----+-----/
| фильтр | |
| ВЫХОД | |
+------+------+ |
       | |
       в |
 /-----+-----\ |
 | перенаправить | |
 \-----+-----/ |
       | |
       +------------------+ +------------------+
                          | |
                          v v ловушка NF_IP_POST_ROUTING
                      +---+-----+---+
                      | мангл (1) |
                      | РАЗМЕЩЕНИЕ |
                      +-------------+
                      | нат (источник) |
                      | дефрагментация |
                      | РАЗМЕЩЕНИЕ |
                      +-------------+
                      | Контрак |
                      | подтвердить |
                      | фраг. |
                      +------+------+
                             |
                             в
                   (выходной интерфейс)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.