Почему эта конфигурация не вызывает бесконечный цикл маршрутизации? (Tun + Политика маршрутизации)Linux

Ответить
Anonymous
 Почему эта конфигурация не вызывает бесконечный цикл маршрутизации? (Tun + Политика маршрутизации)

Сообщение Anonymous »

Я пытаюсь понять логику маршрутизации моего VPN-клиента (ядро Hiddify/Sing-box), работающего в режиме TUN. Я проанализировал таблицы и правила маршрутизации, и, согласно моему пониманию политики маршрутизации Linux, собственный зашифрованный трафик VPN *должен* застревать в петле. Но все работает нормально.
Я пытаюсь найти недостающую часть головоломки.
Настройка:
*
  • интерфейс: tun0 (VPN), wlp3s0 (физический/Интернет)
  • IP-адрес сервера: 46.38.146.91 (проверено через Wireshark)
  • Логика маршрутизации: маршрутизация на основе политик с использованием правила IP
1. Правила интеллектуальной собственности

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

ip rule show
выход:

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

0:     from all lookup local
9000:  from all to 172.19.0.0/28 lookup 2022
9001:  from all lookup 2022 suppress_prefixlength 0
9002:  from all lookup 2022
...
32766: from all lookup main
2. Таблица маршрутизации (Таблица 2022)

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

ip route show table 2022
вывод (существует только одна запись):

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

default dev tun0 scope link
*Примечание: я подтвердил, что конкретного маршрута НЕТ (например,

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

46.38.146.91/32
) в таблице 2022.*
Теоретический цикл (логический разрыв):

Вот моя разбивка того, что должно произойти, когда VPN-клиент пытается отправить зашифрованный пакет на IP-адрес сервера (

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

46.38.146.91
):
1. Генерация пакетов. Приложение VPN создает зашифрованный пакет, предназначенный

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

46.38.146.91
.

2. Проверка по правилу 9001: ядро ​​соответствует правилу 9001 (

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

lookup 2022 suppress_prefixlength 0
).

* Смотрит в Таблице 2022.

*   Находит

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

default dev tun0
(длина префикса которого равна 0).

*   Поскольку префикс равен 0, правило подавляет это совпадение и переходит к следующему правилу.

3. Проверка по правилу 9002: ядро ​​соответствует правилу 9002 (

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

from all lookup 2022
).

*   Он снова ищет в Таблице 2022.

*   Он находит

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

default dev tun0
.

*   Соответствие найдено.

4. Решение о маршрутизации: ядро ​​направляет зашифрованный пакет в .

5. Петля: Пакет попадает в туннельный интерфейс, приложение VPN считывает его, снова шифрует и пытается отправить... повторяя шаг 1.
Реальность:

Несмотря на приведенную выше логику, соединение работает. Я проверил Wireshark и начальное TCP-подтверждение

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

46.38.146.91
успешно выходит через физический интерфейс ( ), в обход Мой вопрос:

Поскольку в Таблице 2022 нет конкретного маршрута для «перехвата» трафика до того, как Правило 9001 подавляет маршрут по умолчанию, а Правило 9002 неизбежно перехватывает все остальное и отправляет его в `tun0`, какой механизм позволяет исходящему трафику VPN избежать этого цикла?
Я проверил, что `iptables -t mangle` пусто, поэтому оно не основано на Fwmark. Что мне не хватает?

Подробнее здесь: https://stackoverflow.com/questions/798 ... policy-rou
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»