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

Прочитайте адресу призначення, перш ніж торкатися тунелю

Завантажте сайт один раз із увімкненим тунелем, а потім подивіться на адресу партнера, до якої браузер справді підключився. У Linux, ss -tunp виводить віддалену адресу кожного відкритого сокета, а dig +short для того самого імені показує, що повернув розв'язувач. Тримайте обидва числа перед собою.

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

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

Поставте один маршрут хоста на клієнті

Припустімо, інтерфейс називається home-wg, а маршрутизатор LAN стоїть на 192.168.1.1. NetworkManager приймає маршрут, чий шлюз — цей маршрутизатор і чия довжина префікса покриває всі 32 біти, і ядро віддає йому перевагу, бо перемагає найдовший префікс.

nmcli connection modify home-wg +ipv4.routes "198.51.100.20/32 192.168.1.1"
nmcli connection up home-wg
ip route get 198.51.100.20

Шлюз має бути доступним без тунелю; спрямувати наступний крок на адресу тунелю — означає зіпсувати мету, адже пакет знову увійде в інтерфейс, якого ви намагаєтеся уникнути. Після того як з'єднання знову підніметься, ip route get для винятку має виводитися шлюз LAN, а та сама команда для публічного розв'язувача має й далі виводити пристрій тунелю.

У профілі wg-quick немає поля маршрутів, тож той самий виняток живе в рядку PostUp , який додає маршрут хоста до головної таблиці, роблячи інтерфейс LAN його пристроєм. Опустіть і знову підніміть інтерфейс після редагування, бо працюючий інтерфейс ніколи не перечитує свій файл. Правила fwmark, які встановлює wg-quick, спрямовують лише його власні інкапсульовані пакети, тому звичайний трафік браузера й далі йде головною таблицею і знаходить ваш /32.

Kill switch — наступна річ, яка це блокує

Політика брандмауера, яка пропускає трафік лише на інтерфейсі тунелю, відкине виняток навіть тоді, коли маршрут абсолютно правильний. Читайте правила за перемикачем, а не довіряйте перемикачеві, бо ті, що реалізують kill switch, зазвичай обмежені іменем інтерфейсу.

Вам потрібен вузький дозвіл для фізичного інтерфейсу й тієї єдиної цілі, розміщений до відкидання, поки типова політика залишається недоторканою. Повна пауза kill switch доводить думку, але й залишає машину відкритою, поки ви забудете ввімкнути його знову.

Перевірте два напрямки окремо. Запит на адресу винятку має проходити успішно, а запит на не пов'язаний сайт і далі має виходити через тунель. Якщо обидва успішні, але другий повідомляє домашню адресу, то неправильний порядок правил брандмауера, а не маршрут.

DNS вирішує, на яку адресу браузер телефонує

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

Надсилайте запити цього імені також через локальний розв'язувач або взагалі пропустіть імена й перевірте адресу безпосередньо. Розділення адреси, коли DNS залишається всередині тунелю, — найпоширеніша незакінчена версія цього налаштування, і її ж найважче помітити, бо сайт продовжує працювати, просто не так, як ви задумували.

Той самий виняток на маршрутизаторі, один раз, для кожного пристрою

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

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

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

Схожі статті