Куди йде DNS, коли ви поєднуєте Tor і VPN
Tor Browser, операційна система та клієнт тунелю можуть кожен розв’язувати різне ім’я різним шляхом. Простежте обміни, перш ніж називати це витоком.
Працюють два інструменти приватності, одна сторінка не завантажується, а тест резолвера каже, що щось поза браузером отримало ім’я. Перш ніж це стане звітом про витік, назвіть обмін, з якого воно прийшло. Зв’язка Tor плюс VPN містить щонайменше три різні запити імен із трьома різними власниками, і пройти їх у тому порядку, у якому вони відбуваються, — найшвидший спосіб побачити, який із них поводиться неправильно.
Назвіть кожен обмін, перш ніж називати це витоком
Перший обмін розв’язує сам кінцевий пункт VPN і відбувається до того, як з’являється будь-який захист. Другий розв’язує призначення для Tor Browser, який може передати ім’я проксі замість того, щоб розв’язувати його локально. Третій охоплює все інше на машині, включно з перевірками оновлень, поштовими клієнтами та власними службовими запитами операційної системи. Лише перший із них може статися без участі двох інших.
Кожен із них може йти різним шляхом, а єдиний тест у браузері спостерігає лише свій власний запит. Саме з того, що один результат приймають за стан усіх трьох, починається більшість плутанини.
Запишіть, які імена до якого шару належать, перш ніж щось змінювати. Приватні організаційні імена, публічне призначення й сам кінцевий пункт тунелю не мають однакової вимоги, і політика, яка ставиться до них як до однієї категорії, щось зламає.
Запит під час запуску відбувається до тунелю
Клієнт, налаштований з іменем хоста, повинен розв’язати це ім’я, щоб відкрити тунель, а в цей момент тунелю, який міг би понести запит, ще немає. Відповідає будь-який резолвер, який операційна система пропонує в поточній мережі, — це може бути captive portal, готельний резолвер або публічний. Це не витік у тунелі, бо тунелю ще немає.
Зміна налаштування захищеного DNS у браузері теж не зачіпає цей запит, оскільки він належить службі, яка працює поза браузером і запускається раніше, ніж відкривається будь-яка сторінка. Якщо ім’я кінцевого пункту не розв’язується, жодна політика всередині тунелю не допоможе, бо збій відбувається на один етап раніше за все, що описує конфігурація.
Це єдине місце, де використання буквальної адреси для кінцевого пункту, якщо постачальник це підтримує, прибирає залежність, а не додає її. Воно також позбавляє можливості йти за постачальником, який змінює адреси, тож компроміс реальний, і його варто вирішувати, а не виявляти.
Браузер і решта машини різняться
Інтерфейс SOCKS у Tor підтримує передавання імені хоста призначення проксі, тобто розв’язання виконує віддалена сторона, а локальна машина взагалі не питає. Звичайний застосунок із підтримкою проксі може спершу розв’язати ім’я локально, а потім під’єднатися до отриманої адреси, що створює локальний запит для призначення, яке користувач вважав проксійованим. Тож два застосунки можуть протікати в різних місцях, поділяючи одне налаштування проксі. Ніщо в спільній адресі проксі не каже, яка з двох поведінок використовується.
Браузери додають ще один шар, коли ввімкнено захищений DNS, бо браузер може вибрати власного постачальника й повністю обійти системний резолвер. Клієнт тунелю тим часом може проштовхнути резолвер крізь тунель для всієї машини. Ці два налаштування можуть обидва бути правильними й усе ж описувати різну поведінку різних програм.
Перевіряйте програму, яка зробила запит, а не екстраполюйте з однієї тестової сторінки. Різниця між запитом, який несеться всередині тунелю, і тим, який ніколи не дійшов до Tor, — це саме та різниця, яку одна адреса резолвера показати не може.
Перевірте кожну програму, потім порівняйте з наміром
Проводьте спостереження окремо: що використовувала б система, для чого налаштований браузер і чи несе з’єднання SOCKS ім’я або адресу. Останнє — це різниця між віддаленим і локальним розв’язанням, і специфікація розширень SOCKS описує, як ім’я хоста передається, замість того щоб спершу розв’язуватися.
resolvectl status | grep -E "Current DNS Server|DNS Servers"
ss -tnp '( dport = :9050 )'
dig +short dev.internal.example
getent hosts vpn-endpoint.example.net
Потім порівняйте те, що ви спостерігали, з тим, що задумували. Публічне ім’я, розв’язане крізь тунель обраним вами резолвером, — це не та сама знахідка, що приватне ім’я, передане публічному резолверу під час відкату, і зазвичай дій потребує лише друге. Перше — це конфігурація, що працює як задумано, навіть якщо у звіті вона виглядає незвично.
Записуйте винятки, які ви приймаєте, включно із запитом під час запуску, який неможливо захистити. Записаний виняток — це проєктне рішення, тоді як той самий виняток, виявлений пізніше, виглядає як дефект. Той, хто його знайде, ставитиметься до нього саме так, і ви витратите нараду на пояснення, чому це не так.