Резервний DNS вашого VPN: куди насправді йде запит
Зміна резолвера не означає витік автоматично. Перш ніж так його називати, визначте замінного одержувача, маршрут, який він використовує, і задіяні імена.
Налаштування резолвера перемикається з приватної адреси на публічну, і висновок приходить одразу: тунель тече. Іноді так і є. Часто резервний запит усе ж ішов усередині тунелю до резолвера, який вибрав адміністратор, і це робить його рішенням політики, а не дефектом. Щоб розділити ці випадки, потрібні три факти замість одного, і перший із них — хто відповів. З'ясуйте, хто отримав запит, який маршрут його ніс і про які імена питали.
Резервний шлях — це політика, а не єдина поведінка
Кожен клієнт має вирішити, що робити, коли обраний резолвер перестає відповідати. Він може заблокувати розв'язання, спробувати ще раз, використати налаштовану альтернативу або покластися на операційну систему, і з погляду приватності це чотири різні продукти. Читання екрана налаштувань каже, яку поведінку налаштовано; воно не каже, яка сталася. Екран з одним перемикачем не описує чотири можливості.
Браузери додають свій власний шар. Браузер із увімкненим захищеним DNS може розв'язати ім'я через власного обраного постачальника навіть тоді, коли операційна система вказує в інше місце, а це означає, що політика клієнта тунелю може жодного разу не бути запитана для запитів, які вам справді важливі. Перевіряйте застосунок, що надіслав запит, а не лише системне налаштування.
Ідентичність замінного резолвера — перший факт, який варто встановити. Публічний резолвер, що належить постачальнику, якому ви вже довіряєте, — це інша ситуація, ніж адреса, надана мережею, у якій ви перебуваєте. Сама адреса рідко каже, на котру з двох ви дивитеся.
Хто отримує запит після перемикання
Одержувач і маршрут незалежні, і лише їхнє поєднання описує вразливість. Публічний резолвер, досягнутий через тунель, ніколи не бачить адресу вашої мережі доступу, тоді як той самий резолвер, досягнутий напряму, її бачить. Обидва випадки дають відповідь, і тест на витік, який повідомляє лише адресу резолвера, опише їх однаково. Питайте про інтерфейс, а не лише про адресу, коли читаєте результат.
Внутрішні імена роблять різницю конкретною. Публічний резолвер зазвичай не може відповісти на ім'я з split-horizon, тож запит завершується невдачею, хоча ім'я вже розкрито стороні, якій не було чого його бачити. Тож доступність і приватність тут ідуть разом, а не обмінюються.
Тунель може також донести запит до резолвера, яким не керує постачальник VPN, бо тунель пересилає, а не розв'язує. Пересилаючий хост бачить запит відкритим текстом і потім відкриває власне з'єднання далі, що захищає наступний крок, але не перший.
Перевіряйте маршрут і одержувача разом
Спостерігайте за пакетами, а не за конфігурацією. Запитайте систему, який резолвер було б використано, потім підтвердьте, що запит справді вийшов з очікуваного інтерфейсу на очікувану адресу.
resolvectl status | grep -E "Current DNS Server|DNS Servers|DNSOverTLS"
dig +short example.com
tcpdump -ni any udp port 53 or tcp port 853
Якщо запис показує, що запит залишає фізичний інтерфейс, поки тунель активний, резервний шлях обійшов тунель незалежно від того, що каже список резолверів. Якщо він з'являється на інтерфейсі тунелю, питання стає тим, хто керує далеким кінцем і що він зберігає.
Повторіть перевірку для одного внутрішнього і одного публічного імені. Внутрішній запит — це місце, де резервна конфігурація зазвичай себе виявляє, бо резолвер, який не може відповісти, все одно отримує питання.
Вирішіть, чи має резервний шлях бути дозволений
Якщо вимога в тому, щоб розв'язання зупинялося, коли обраний резолвер недоступний, налаштуйте політику примусу, яка відмовляє закрито, і прийміть наслідок: імена не розв'язуватимуться під час збою. Це свідомий обмін доступності, а не несправність, і проєкт має сказати про це до збою.
Якщо вимога лише в тому, щоб запити не виходили за межі тунелю, публічний резолвер, досягнутий через тунель, може бути прийнятним за умови, що оператор і його політика зберігання зрозумілі. Таке прийняття — судження про третю сторону, а не твердження про криптографію, і воно належить тому, хто несе твердження про приватність. Якщо внутрішні імена мають продовжувати працювати, резервний шлях має бути резолвером, який тримає внутрішні зони, що зазвичай означає, що мета резерву — інший сервер, а не інша родина адрес.
Задокументуйте результат як речення про поведінку: який резолвер отримує запити за звичайної роботи, який отримує їх після збою і чи розв'язуються внутрішні імена в другому випадку. Тест на витік, який зрештою завантажує сторінку, доводить менше за це речення, бо сторінка може завантажитися через резолвер, до якого не слід було звертатися.