Віктор Турський про програмування / навігатор

Мережі та інтернет / крок 02

Як працює Інтернет: основи DNS

початковий 22:58 дивитися на YouTube ↗

Розділи

Про що це відео

Перший із трьох епізодів міні-серії про те, як працює інтернет; тут пояснюється, що таке DNS і навіщо потрібна резолюція імен. Автор починає з проблеми: коли ви набираєте rozetka.ua чи google.com, звідки браузер знає, на IP якого сервера стукати, якщо великий сайт працює на багатьох серверах, що з часом змінюються? Він простежує історію — до DNS (з’явився 1985 року) був просто файл hosts.txt, який копіювали між машинами — і наживо демонструє редагування власного hosts-файлу, щоб rozetka.com.ua вказував на IP Google, показуючи, що (а) браузер кешує DNS, тож нічого не зміниться, поки ви його не перезапустите, і (б) навіть влучивши в IP Google, ви отримуєте помилку сертифіката/хоста, бо сервер ще й перевіряє доменне ім’я, надіслане в HTTP-запиті. Далі він проходить пачку практичних питань за допомогою утиліти dig і захоплень пакетів у Wireshark.

Головне

  • Сама ОС нічого не знає про DNS-сервери — адреса DNS-сервера береться з ваших мережевих налаштувань (від DHCP-сервера на роутері, від провайдера або задана вручну; на Linux дивіться /etc/resolv.conf). Він вручну виставив свій резолвер на 8.8.8.8 Google, щоб продемонструвати.
  • Один домен може повертати кілька IP. dig на my.talks.net повернув чотири адреси, а повторний запит показує, що порядок ротується — це DNS round-robin, грубий механізм балансування навантаження й відмовостійкості (браузери спробують інший IP, якщо один недоступний; «краще, ніж нічого»).
  • Типи записів мають значення: A = IPv4, AAAA = IPv6, MX = поштові сервери, TXT (наприклад, верифікація сайту Google, SPF), NS = які nameserver’и тримають конфіг домену. A/AAAA найпоширеніші, бо саме вони потрібні, щоб дістатися сайту.
  • DNS використовує UDP, але іноді TCP. Він провів опитування на каналі — лише 17% із 215 голосів відповіли правильно. У Wireshark він показує звичайний запит, що виходить на UDP-порт 53. UDP-датаграми обмежені приблизно 512 байтами; якщо відповідь не влазить, сервер виставляє прапорець truncated (TC) в 1, і клієнт повторює запит по TCP. Він демонструє це на навмисно великому TXT-записі (jabascript під своїм доменом), показуючи прапорець TC=1, потім TCP-handshake і зібрану з кількох сегментів відповідь. TCP не використовують першим, бо handshake коштує зайвих round-trip’ів.
  • DoH (DNS over HTTPS) додає приватності через шифрування; Firefox (станом на 2022, включно з Україною) і Chrome дедалі частіше роблять DNS over HTTPS. Він вимкнув DoH і кешування ОС у Firefox спеціально, щоб продемонструвати звичайну резолюцію, зазначивши, що кешування відбувається на кожному рівні: браузер, ОС, роутер, провайдер.
  • Хто ж власне робить запит — браузер чи ОС? Ніхто з них не реалізує DNS заново. Процеси завантажують стандартну C-бібліотеку (glibc на Linux), яка робить роботу, перевіряє hosts, використовує порядок із /etc/nsswitch.conf тощо. У системах на systemd локальний кешувальний резолвер працює на 127.0.0.53 і підтримує DNSSEC. Порада з бойового досвіду: Alpine Linux використовує musl libc замість glibc, і musl історично НЕ підтримував fallback DNS-over-TCP — тож надто великі відповіді могли мовчки падати на крихітних Alpine (node:alpine, python:alpine) Docker-образах. Він зазначає, що це вже виправляли (запис датований 16 травня 2023).
  • Практична порада: якщо ви розробник, купіть домен і погратися із записами (він керує своїми на Cloudflare), щоб зрозуміти все наскрізно. Статичні IP можна прив’язати до DNS-імені; Dynamic DNS автоматично перереєстровує ваш змінний домашній IP, і багато домашніх роутерів це підтримують, дозволяючи діставатися домашньої машини ззовні.

Теми відео

Частина цих треків