Чи ламає VPN-клієнт на вашому веб-сервері його відповіді?
Правило маршрутизації за джерелом може відновити один опублікований сайт, водночас звільнивши трафік, який ви ніколи не мали наміру звільняти. Прочитайте селектор, перш ніж розширювати виняток.
Сайт завантажується з ноутбука в тій самій мережі й перестає відповідати з будь-якого іншого місця, а хост ще й запускає VPN-клієнт для власного вихідного трафіку. Таке поєднання дає конкретну поломку: вхідне з'єднання надходить, відповідь виходить не тим шляхом, і клієнт ззовні ніколи не бачить відповіді. Обидві половини видно в одному перехопленні пакетів, тож порядок подій — це та частина, яку варто прочитати.
Правило маршрутизації за джерелом часто усуває симптом. Воно також зазвичай звільняє більше трафіку, ніж сайт, що його спричинив, і саме це варто зрозуміти, перш ніж зберігати правило.
Симптом: відповідає локально, а не ззовні
Усередині мережі відповідь не мусить перетинати тунель, тож сторінка завантажується і служба виглядає здоровою. Ззовні запит доходить до хоста, а відповідь спрямовується у VPN, де в далекого кінця немає причин її приймати. Браузер бачить тайм-аут, а не відмову, і це ознака однобічного шляху, а не закритого порту.
Підтвердьте форму, перш ніж змінювати маршрутизацію: слухач працює, локальний запит успішний, а зовнішній запит узагалі не дає відповіді. Ці три спостереження разом указують на зворотний шлях, а не на конфігурацію веб-сервера. Така чиста асиметрія корисніша за будь-який рядок журналу, бо вона виключає слухач ще до того, як ви прочитаєте хоч одне повідомлення про помилку.
Тримайте відкритим незалежний шлях адміністрування, поки працюєте. Правило, що ламає вашу власну сесію SSH, перетворює десятихвилинне виправлення на фізичний візит.
Що насправді зіставляє селектор джерела
У політичній маршрутизації Linux правило на кшталт from 192.168.50.2 зіставляє пакети, джерелом яких є ця адреса. Воно не кодує той факт, що пакет продовжує розмову, яка увійшла через домашній маршрутизатор, і не знає, який процес його створив. Адреса в цьому прикладі ілюстративна; замініть її на адресу, яку ваш хост справді використовує. Ставтеся до рядка як до твердження про адреси і ні до чого більшого.
Якщо вибрана таблиця надає звичайний маршрут за замовчуванням, кожен пакет із цим джерелом може скористатися тим самим винятком. Інша служба, прив'язана до тієї самої адреси, успадковує його, і застосунок, який навмисно прив'язується до цієї адреси, теж успадковує його. Довідник правил політики перелічує джерело, призначення, протокол, порт, мітку й пріоритет як окремі селектори, що нагадує: саме джерело — найгрубіше з доступних.
Пріоритет вирішує результат. Пошуки виконуються по черзі, і перша таблиця, що дає результат, може завершити пошук, тож правило, розміщене занадто рано, може приховати конкретніший маршрут, який надала б пізніша таблиця. Читайте весь упорядкований список, а не один рядок, який ви додали. Правило, що ніколи не збігається, нічого не коштує, а те, що збігається занадто рано, тихо змінює все за собою.
Перевірте зворотний шлях і трафік, який ви не мали наміру звільняти
Прочитайте правила й таблиці, а потім запитайте ядро, який маршрут вибере конкретна пара джерела й призначення. Перевірка з самого хоста — не те саме, що перевірка ззовні, тож зробіть і те, і те.
ip rule show
ip route show table 100
ip route get 203.0.113.44 from 192.168.50.2
ss -ltnp '( sport = :443 )'
Потім прийміть нове зовнішнє з'єднання і окремо запит, який усе ще має вийти через VPN. Якщо другий тепер виходить напряму, виняток ширший за проблему, яку ви вирішували, і важливий тест — той, який ви не мали наміру змінювати.
Перевірка публічної адреси в браузері повідомляє лише про запити, зроблені цим браузером. Вона нічого не каже про відповіді веб-сервера, про вибір джерела іншим локальним застосунком або про те, що відбувається з керівним трафіком після наступного перепідключення VPN.
Вирішіть, наскільки вузьким може бути виняток
Два проєкти захищені, і їх треба вибирати свідомо. Якщо хост існує, щоб публікувати цю службу, і його вихідний трафік не важливий, виділена локальна адреса з політикою лише для WAN — розумне рішення за умови, що ви приймаєте весь масштаб. Якщо підходити мають лише певні вхідні з'єднання, вибір адреси надто грубий, і перед ним має стояти рішення, що враховує з'єднання.
Запишіть договір, на який ви спираєтеся: публічне відображення, адресу хоста, на яку доставляється запит, і шлях, який має пройти відповідь. Вхідна служба, опублікована через провайдера VPN, — це інший договір, ніж опублікована через домашній маршрутизатор, і виняток, скопійований з одного прикладу, часто хибний для іншого.
Зберігайте політику в компоненті, якому належить маршрутизація, замість того щоб вставляти команду у файл запуску. Порядок правил, очищення після зміни мережі й повторення після перезавантаження мають пережити все, а неперевірений файл запуску зазвичай підводить у ту мить, коли ви не дивитеся. Завершіть результатом приймання, який ви можете захистити: один опублікований сайт відновлено, і один не пов'язаний потік не змінено.