Одна машина, дві задачі, один брандмауер: висхідний канал Wi-Fi, невелика підмережа Ethernet за ним і клієнт VPN для робочого столу, який вважає, що все, що залишає машину, локальне. Локально запущені застосунки виходять через локальний шлях виводу. Пристрої за робочою станцією приходять на порт Ethernet і потребують рішення про пересилання. Виняток, написаний для першого шляху, ніколи не бачить другого, і саме тому браузер обходить тунель, а пристрої — ні.

Два шляхи пакетів, одна політика

OriginPathDecision owner
Application on the workstationOUTPUT then egressThe VPN app's routing policy
Device behind the workstationPREROUTING then FORWARDThe workstation's own forwarding policy

Перший рядок — це те, що описує більшість посібників зі split-tunneling. Другий — конфігурація маршрутизатора, яка випадково живе на тій самій машині. Зливати їх в одну розумову модель — помилка; вони ділять ядро, але не політику. Намалюйте обидва шляхи, перш ніж редагувати будь-яке правило, і решта проєкту випливає з того, якого шляху бракує.

Таблиця також пояснює, чому одна машина може пройти один тест і провалити інший. Браузер на робочій станції доводить локальний шлях; ноутбук, під'єднаний до порту Ethernet, доводить шлях пересилання. Перевіряйте зміну обома, інакше другий залишиться неперевіреним, скільки б разів не оновлювався браузер.

Що насправді класифікує виняток застосунку

Виняток для окремого застосунку зазвичай працює так: позначаються пакети процесу або користувача, а потім позначений трафік спрямовується поза тунелем. Це конструкція локального виводу. Пакет від пристрою нижчого рівня не має локального процесу, тому ніколи не збігається з селектором, яким би селектор не був.

Яким би не був селектор, два списки — не один і той самий список, і в цьому вся суть. Посібник Mullvad для Linux описує позначки, які споживає його брандмауер і політика маршрутизації, а його приклади націлені на локальний вивід; це не підтримуваний опис маршрутизатора нижчого рівня. Їх копіювання дає машину, яка вважає, що має виняток, але пересилає все в тунель.

Напишіть контракт транзиту

Назвіть разом префікс джерела нижчого рівня і вхідний інтерфейс, потім обмежте цей префікс на вході. Без обмеження будь-який пристрій, що досягає порту, може заявити виключену адресу і вийти через обхід. Розглядайте це як два питання: чи можуть ці хости взагалі використовувати цей висхідний канал і чи можуть вони досягати робочої станції або приватних діапазонів тунелю? Це додаткові дозволи, а не побічні ефекти вибору каналу.

Дозвольте пересилання, а потім відфільтруйте його. Шлюзу Linux потрібне ввімкнене пересилання, правила, що дозволяють потрібний трафік в обох напрямках, і або зворотний маршрут угору, або навмисно обмежене перетворення джерела. Сам NAT не вибирає канал і не дає проходу через фільтр; він лише переписує адресу після цих рішень.

Класифікація для транзиту має відбуватися до рішення про маршрут пересилання, тобто на етапі prerouting, а не output. Правило, розміщене після рішення, ще може змінити пакет, але не може змінити, куди його вже надіслано.

Позначки належать застосунку, який ними володіє

Значення позначок, номери таблиць і пріоритети ланцюгів — частина політики застосунку VPN, а не вічні константи. Стійка мережа, що залежить від вставлення правила в таблицю, яку перестворює інша програма, зламається під час наступного оновлення, зазвичай під час повторного підключення, а не в зручний момент.

Додавання другого базового ланцюга з вердиктом accept не обов'язково скасовує drop пізнішого ланцюга. Базові ланцюги мають хуки й пріоритети, і перший вердикт у порядку перемагає; accept в одному ланцюзі не скасовує drop, до якого інший ланцюг доходить раніше. Дивіться на повний набір правил і порядок політики маршрутизації, а не на єдиний лічильник, що зріс. Лічильник доводить, що правило виконалося, але ніколи — що застосовано саме його вердикт.

Інтегруйте або перемістіть підмережу

Два проєкти різняться тим, хто володіє обходом. Інтегрований проєкт зберігає одну машину й одну політику ціною залежності від життєвого циклу таблиць застосунку VPN і від набору позначок, які може змінити його документація. Окремий маршрутизатор для мережі нижчого рівня повністю усуває цю залежність: підмережа має власний висхідний канал, а робоча станція залишається клієнтом без ролі пересилання.

Виберіть другий, коли мережа нижчого рівня має продовжувати працювати крізь оновлення VPN, або коли ніхто не може перевірити інтегровану політику після кожного випуску. Виберіть перший лише тоді, коли інтеграція задокументована і хтось за неї відповідає.

Перевірте межу в чотирьох станах: під'єднано, повторне підключення, навмисно заблоковано та зупинено. Перевіряйте розв'язання імен і обидві родини адрес у кожному з них, бо обхід, що витікає DNS, — це не той виняток, який ви спроєктували. Тест має довести точну межу, а не лише те, що завантажилася одна сторінка.

Схожі статті