Що таке DNS-резолвер, і яким користуєтеся ви?
DNS-резолвер - це служба, до якої ваш пристрій звертається першою, коли йому потрібна IP-адреса за іменем, і один пошук зазвичай проходить через три різні ролі: стаб-резолвер на власній машині, рекурсивний резолвер, що виконує сам пошук, і авторитетні сервери, які тримають справжню відповідь. Більшість людей налаштовують лише перший із них і ніколи не бачать двох інших напряму.
Що відбувається, коли ваш пристрій шукає ім’я?
Ваша операційна система не шукає ім’я в інтернеті самостійно. Вона передає запит невеликому компоненту, який називають стаб-резолвером, і він узагалі не є nameserver-ом. RFC 8499 визначає його як резолвер, «який не може виконати всю резолюцію самостійно» і покладається на рекурсивний резолвер, який робить фактичну роботу. Завдання стаб-резолвера - надіслати ваш запит на той сервер, що налаштований у мережевих параметрах, і повернути відповідь або кешовану копію нещодавньої.
Стаб-резолвер, рекурсивний резолвер, авторитетний сервер: у чому різниця?
У кожному пошуку задіяні три ролі, і той самий фізичний сервер може виконувати більш ніж одну з них:
- Стаб-резолвер. Працює на вашому пристрої, пересилає запити, тримає невеликий кеш і не вміє визначати ім’я самостійно.
- Рекурсивний резолвер. За RFC 8499, «резолвер, що діє в рекурсивному режимі», тобто виконує всю роботу з пошуку відповіді через будь-яку кількість серверів, скільки б їх не знадобилося, а тоді кешує й повертає результат. Цю роль виконує ваш провайдер або публічна DNS-служба.
- Авторитетний сервер. RFC 8499 визначає його як сервер, «якому відомий вміст DNS-зони з власних, локальних даних, і тому він може відповідати на запити про цю зону без потреби звертатися до інших серверів». Це сервер, який запускає власний DNS-провайдер домену, і саме його відповідь ніхто інший не копіює.
Сервер, що відповідає перенаправленням замість повної відповіді, діє ітеративно; той, що працює далі, поки не отримає остаточну відповідь чи однозначну помилку, діє рекурсивно, звідки й береться назва «рекурсивний резолвер».
Шлях одного пошуку: корінь, TLD і авторитетні переходи
Холодний пошук, у якому нічого ніде не закешовано, проходить фіксовану ієрархію. Рекурсивний резолвер починає з кореневого сервера, одного з тринадцяти іменованих кореневих ідентичностей, які IANA перелічує від a.root-servers.net до m.root-servers.net, і питає його про example.com. Кореневий сервер не знає відповіді; він повертає перенаправлення на сервери, відповідальні за домен верхнього рівня .com. Резолвер звертається до одного з них і отримує друге перенаправлення, цього разу на авторитетні nameserver-и самого example.com, ті, що налаштував власник домену. Лише цей останній сервер дає справжню відповідь, а не вказівку кудись далі. Рекурсивний резолвер кешує її і повертає вашому стаб-резолверу, а той передає її браузеру.
Кожен наступний перехід пропускається, щойно на шляху трапляється кеш, у якому вже є відповідь, саме тому переважна більшість повсякденних пошуків узагалі не торкаються кореневого сервера.
Резолвер провайдера чи публічний резолвер: що насправді змінюється?
Резолвер, який ваш пристрій використовує за замовчуванням, зазвичай приходить по DHCP, виданий роутером чи провайдером, і майже завжди це рекурсивний резолвер, що виконує повний пошук від вашого імені. Що він робить із вашими запитами, наскільки великий його кеш і з якої кількості локацій він працює, вирішує той, хто його експлуатує, і побачити це зі свого боку ви не можете.
Публічні резолвери існують як альтернатива, на яку можна переналаштувати пристрій: Google Public DNS працює на 8.8.8.8, Cloudflare на 1.1.1.1, а Quad9 на 9.9.9.9. Кожен публікує власну політику того, що й як довго логує, кожен запускає власну anycast-мережу, тож та сама адреса відповідає з найближчої до вас локації, а Quad9 ще й типово блокує відомі шкідливі домени на рівні самого резолвера, чого провайдерський резолвер зазвичай не робить. Жодна з цих відмінностей не змінює того, що може сам DNS: резолвер визначає лише те, як виконується пошук, а не те, що написано в записах домену.
Який резолвер зараз використовує ваша машина?
Резолвер, яким ви фактично користуєтеся, - це налаштування, а не здогадка, і в кожній ОС є одна команда, яка його показує:
- Windows:
ipconfig /allвиводить «DNS Servers» під кожним мережевим адаптером у порядку опитування. - macOS:
scutil --dnsпоказує поточну конфігурацію DNS, включно з nameserver-ами, чинними для кожної мережевої служби. - Linux із systemd-resolved:
resolvectl statusпоказує, за словами власного посібника, «глобальні та поканальні налаштування DNS, чинні наразі», тобто і резолвер за замовчуванням, і те, чим його могло замінити конкретне з’єднання, наприклад Wi-Fi чи VPN.
VPN, корпоративна мережа або власне налаштування безпечного DNS у браузері можуть кожен по-своєму підмінити резолвер, не змінюючи те, що показує команда ОС, тож якщо відповідь команди не збігається з очікуваним, саме з цього варто почати.
Те, який резолвер відповідає на запит, може змінити не лише швидкість отримання відповіді, а й саму відповідь: резолвер із застарілим кешем, регіональним збоєм або власною політикою фільтрації може повернути щось інше, ніж сказали б авторитетні сервери напряму. Запустіть пошук через інструмент DNS-запиту, щоб порівняти, або, якщо резолвер відповідає повільно, а не по-іншому, як виправити повільний DNS-пошук розповідає, як це виміряти і змінити. Якщо він узагалі не відповідає, почніть із DNS server not responding. Про поведінку кешування, що стоїть за всім цим, дивіться що таке DNS-кеш. HostTracker моніторить вебсайти з 2004 року, зараз стежить за понад 500 000 сайтів із понад 300 контрольних точок у 158 містах і може сповіщати електронною поштою, SMS, голосовим дзвінком, у Slack, Telegram та інших каналах тієї ж миті, коли перевірка, що очікує конкретну IP-адресу, бачить іншу.
Часті запитання
Чи є мій роутер DNS-резолвером?
Часто лише в обмеженому сенсі. Багато домашніх роутерів запускають невеликий DNS-форвардер: він відповідає з крихітного кеша, але для всього, чого там ще немає, напряму передає запит резолверу провайдера, замість виконувати повну рекурсію самостійно. RFC 2308 описує цю роль як форвардер, «nameserver, який використовують для вирішення запитів замість прямого звернення до ланцюжка авторитетних nameserver-ів».
Чи робить публічний резолвер мій перегляд сторінок швидшим?
Іноді так, іноді ні. Близький до вас резолвер із теплим кешем відповідає за одноцифрові мілісекунди незалежно від того, хто його експлуатує. Головні змінні - наскільки близька найближча локація резолвера до вас і наскільки теплий уже його кеш, а не назва бренду.
У чому різниця між рекурсією і пересиланням?
Резолвер, що виконує рекурсію, сам опитує корінь, TLD і авторитетні сервери, по одному переходу за раз, і кешує кінцевий результат. Резолвер, що натомість пересилає, надсилає все питання іншому резолверу й чекає повної відповіді, обмінюючи роботу, і видимість того, що ви шукали, на все, що вже є в кеші того резолвера вище за потоком.
Чи всі 13 кореневих серверів працюють на 13 машинах?
Ні. Існує тринадцять іменованих кореневих ідентичностей, але кожну з них обслуговує безліч фізичних машин по всьому світу, тож запит іде до найближчої копії, а не перетинає океан щоразу.
Чи можуть два пристрої в одній мережі використовувати різні резолвери?
Так. Роутер видає резолвер за замовчуванням через DHCP, але будь-який пристрій може перевизначити його у власних мережевих параметрах, а VPN чи безпечний DNS у браузері можуть перевизначити його ще раз поверх цього. Команди вище завжди показують те, що використовує саме цей пристрій у цей момент, а не те, що передбачала мережа.