DNS: Система доменних імен¶
Що таке DNS?¶
DNS (Domain Name System) — це "телефонна книга" інтернету. Вона перетворює зрозумілі людям імена (google.com) в IP-адреси (142.250.74.78), які розуміють комп'ютери.
Ти вводиш: google.com
DNS повертає: 142.250.74.78 (IPv4)
2a00:1450:4001:82a::200e (IPv6)
Без DNS довелося б запам'ятовувати IP-адреси всіх сайтів!
Як працює DNS запит?¶
Спрощена схема¶
┌─────────┐ 1. Де google.com? ┌─────────────┐
│ Твій │ ────────────────────►│ DNS сервер │
│ комп'ютер│◄──────────────────── │ провайдера │
└─────────┘ 2. 142.250.74.78 └─────────────┘
│
│ 3. Підключення до 142.250.74.78
▼
┌─────────┐
│ Google │
│ сервер │
└─────────┘
Повна схема (ієрархія DNS)¶
┌─────────────────┐
│ Root DNS (.) │
│ 13 серверів │
└────────┬────────┘
│
┌──────────────┼──────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ .com │ │ .org │ │ .ua │
│ TLD │ │ TLD │ │ TLD │
└────┬────┘ └─────────┘ └─────────┘
│
┌────────┴────────┐
▼ ▼
┌─────────┐ ┌─────────┐
│ google │ │ amazon │
│ .com │ │ .com │
└─────────┘ └─────────┘
Етапи запиту (детально)¶
- Перевірка кешу браузера — може вже знає?
- Перевірка кешу ОС — може ОС знає?
- Запит до резолвера (DNS провайдера або 8.8.8.8)
- Резолвер питає Root — "Хто відповідає за .com?"
- Root відповідає — "Ось TLD сервери для .com"
- Резолвер питає TLD — "Хто відповідає за google.com?"
- TLD відповідає — "Ось authoritative сервери Google"
- Резолвер питає authoritative — "Яка IP у google.com?"
- Authoritative відповідає — "142.250.74.78"
- Резолвер кешує і повертає відповідь
Структура доменного імені¶
Ієрархія справа наліво¶
www . example . com .
│ │ │ │
│ │ │ └── Root (кореневий домен, зазвичай не пишуть)
│ │ └─────── Top-Level Domain (TLD)
│ └──────────────── Second-Level Domain (SLD)
└───────────────────────── Subdomain (піддомен)
Приклади¶
mail.google.com
│ │ │
│ │ └── TLD
│ └───────── SLD (зареєстрований домен)
└────────────── Subdomain
docs.google.com
api.google.com — всі це субдомени google.com
maps.google.com
Типи DNS записів¶
A — IPv4 адреса¶
example.com. A 93.184.216.34
"Домен example.com має IPv4 адресу 93.184.216.34"
AAAA — IPv6 адреса¶
example.com. AAAA 2606:2800:220:1:248:1893:25c8:1946
"Домен example.com має IPv6 адресу ..."
CNAME — псевдонім (alias)¶
www.example.com. CNAME example.com.
"www.example.com — це псевдонім для example.com"
MX — поштовий сервер¶
example.com. MX 10 mail.example.com.
example.com. MX 20 backup-mail.example.com.
"Пошту для @example.com приймають mail.example.com (пріоритет 10) та backup-mail.example.com (пріоритет 20)"
TXT — текстовий запис¶
example.com. TXT "v=spf1 include:_spf.google.com ~all"
Використовується для верифікації, SPF, DKIM тощо.
NS — DNS сервери домену¶
example.com. NS ns1.example.com.
example.com. NS ns2.example.com.
"DNS для example.com обслуговують ns1 і ns2"
PTR — зворотний запис (IP → домен)¶
34.216.184.93.in-addr.arpa. PTR example.com.
"IP 93.184.216.34 належить example.com" (для reverse DNS)
SRV — сервіс¶
_sip._tcp.example.com. SRV 10 5 5060 sipserver.example.com.
"SIP сервіс доступний на sipserver.example.com:5060"
Таблиця типів записів¶
| Тип | Призначення | Приклад значення |
|---|---|---|
| A | IPv4 адреса | 93.184.216.34 |
| AAAA | IPv6 адреса | 2606:2800:220:1::1 |
| CNAME | Псевдонім | www → example.com |
| MX | Поштовий сервер | 10 mail.example.com |
| TXT | Текст (SPF, DKIM) | "v=spf1 ..." |
| NS | DNS сервери | ns1.example.com |
| PTR | Reverse DNS | example.com |
| SRV | Сервіс | sipserver:5060 |
| CAA | SSL сертифікати | letsencrypt.org |
| SOA | Зона авторитету | Технічна інфо |
TTL — Time To Live¶
Кожен DNS запис має TTL — час (в секундах) скільки його можна кешувати:
example.com. 300 A 93.184.216.34
│
└── TTL = 300 секунд (5 хвилин)
Короткий TTL (60-300):
- Швидше застосовуються зміни
- Більше навантаження на DNS сервер
Довгий TTL (3600-86400):
- Менше запитів до DNS
- Зміни застосовуються повільніше
Популярні публічні DNS¶
| Провайдер | IPv4 | IPv6 |
|---|---|---|
| 8.8.8.8, 8.8.4.4 | 2001:4860:4860::8888 | |
| Cloudflare | 1.1.1.1, 1.0.0.1 | 2606:4700:4700::1111 |
| Quad9 | 9.9.9.9 | 2620:fe::fe |
| OpenDNS | 208.67.222.222 | 2620:119:35::35 |
Який обрати?¶
- 1.1.1.1 (Cloudflare) — найшвидший, фокус на приватності
- 8.8.8.8 (Google) — надійний, великий кеш
- 9.9.9.9 (Quad9) — блокує шкідливі домени
Файл hosts¶
Локальний файл для ручного перевизначення DNS:
Розташування¶
| ОС | Шлях |
|---|---|
| Linux/Mac | /etc/hosts |
| Windows | C:\Windows\System32\drivers\etc\hosts |
Формат¶
# IP-адреса доменне-ім'я [аліаси]
127.0.0.1 localhost
::1 localhost
# Власні записи
192.168.1.100 myserver.local myserver
10.10.10.1 vpn-gateway
# Блокування (направляємо в нікуди)
0.0.0.0 ads.example.com
0.0.0.0 tracking.example.com
Файл hosts перевіряється до DNS запиту!
Команди для роботи з DNS¶
Linux/Mac¶
# Простий запит
nslookup google.com
dig google.com
# Детальний запит
dig google.com +short # Тільки IP
dig google.com A # Тільки A записи
dig google.com MX # Поштові сервери
dig google.com ANY # Всі записи
# Запит до конкретного DNS
dig @8.8.8.8 google.com
# Reverse DNS
dig -x 8.8.8.8
# Трасування DNS запиту
dig google.com +trace
# Очистити DNS кеш
# Ubuntu/Debian
sudo systemd-resolve --flush-caches
# Mac
sudo dscacheutil -flushcache
Windows¶
# Простий запит
nslookup google.com
# Запит до конкретного DNS
nslookup google.com 8.8.8.8
# Детальна інформація
nslookup -type=MX google.com
nslookup -type=ANY google.com
# Очистити DNS кеш
ipconfig /flushdns
# Показати DNS кеш
ipconfig /displaydns
MikroTik¶
# DNS налаштування
/ip dns print
# Встановити DNS сервери
/ip dns set servers=1.1.1.1,8.8.8.8
# Статичні DNS записи
/ip dns static add name=myserver.local address=192.168.1.100
# Очистити кеш
/ip dns cache flush
# Показати кеш
/ip dns cache print
Практичний приклад: Налаштування домену¶
Сценарій: Маєш домен example.com і сервер 93.184.216.34¶
Крок 1: NS записи (в реєстратора домену)
example.com NS ns1.cloudflare.com
example.com NS ns2.cloudflare.com
Крок 2: A записи (в DNS панелі)
example.com A 93.184.216.34 # Головний домен
www.example.com A 93.184.216.34 # www
Крок 3: MX записи (якщо потрібна пошта)
example.com MX 10 mail.example.com
mail A 93.184.216.34
Крок 4: TXT для верифікації
example.com TXT "v=spf1 ip4:93.184.216.34 -all"
DNS і безпека¶
Проблеми¶
- DNS запити не шифровані — провайдер бачить які сайти відвідуєш
- DNS spoofing — підміна відповідей
- DNS amplification — DDoS атаки через DNS
Рішення¶
DNS over HTTPS (DoH):
https://cloudflare-dns.com/dns-query
https://dns.google/dns-query
DNS over TLS (DoT):
Port 853 замість 53
DNSSEC:
Криптографічний підпис DNS записів
Типові проблеми та рішення¶
"Сайт не відкривається, але пінгується по IP"¶
→ Проблема DNS. Спробуй:
nslookup сайт.com
dig сайт.com
"DNS зміни не застосовуються"¶
→ Кеш. Очисти:
- Браузер: Ctrl+Shift+Delete
- ОС: ipconfig /flushdns або systemd-resolve --flush-caches
- Почекай TTL
"Різні IP на різних комп'ютерах"¶
→ Різний DNS кеш або різні DNS сервери. Перевір налаштування.
"Працює по IP, не працює по домену"¶
→ Перевір DNS записи:
dig example.com +short
Швидка шпаргалка¶
| Запис | Для чого | Приклад |
|---|---|---|
| A | IPv4 | 93.184.216.34 |
| AAAA | IPv6 | 2606:2800:... |
| CNAME | Аліас | www → example.com |
| MX | Пошта | mail.example.com |
| TXT | Текст/SPF | "v=spf1..." |
| NS | DNS сервери | ns1.provider.com |
| Команда | Дія |
|---|---|
dig domain.com |
DNS запит |
nslookup domain.com |
DNS запит (Windows) |
dig @8.8.8.8 domain.com |
Запит через Google DNS |
dig domain.com MX |
Поштові сервери |
ipconfig /flushdns |
Очистити кеш (Windows) |
Попередня частина: IPv6 адресація
Шлях: networking/basics/dns.md