Что такое DNS
Domain Name System (RFC 1035) - распределённая иерархическая БД, отображающая человекочитаемые имена в IP-адреса (и обратно). Запрос по UDP/53 (или TCP/53 для больших ответов).
NSS - Name Service Switch
В Linux сам процесс резолвинга - это вызов libc-функции gethostbyname()
/ getaddrinfo(). Эта функция через NSS-плагины опрашивает источники в
порядке заданном в /etc/nsswitch.conf:
hosts: files dns
- files -
/etc/hosts - dns - настоящий DNS-сервер
- На системах с systemd-resolved -
resolve [!UNAVAIL=return] files dns - С mDNS -
mdns_minimal [NOTFOUND=return] files dns
Поэтому ping mysite.local сначала ищет в /etc/hosts - это позволяет
локально override'нуть любое имя без DNS.
/etc/hosts
Простейший резолвер, формат IP name [aliases...]:
127.0.0.1 localhost
::1 localhost ip6-localhost
192.168.1.5 nas.local nas
Часто используется для:
- Фиксации имени в dev-окружениях (
api.local→127.0.0.1) - Блокировки доменов через Pi-hole-стиль (
0.0.0.0 ad-tracker.com) - Hostname-трюков для тестов миграций
/etc/resolv.conf
Список DNS-серверов и их параметры:
nameserver 1.1.1.1
nameserver 8.8.8.8
search corp.example.com lab.example.com
options timeout:2 attempts:1
- nameserver - IP DNS-сервера, опрашиваются по очереди
- search - суффиксы для коротких имён:
ping db1пробуется какdb1.corp.example.com, потомdb1.lab.example.com, потомdb1. - options - таймауты, количество попыток, randomize и т.п.
На systemd-системах файл часто симлинк на /run/systemd/resolve/... и
редактируется через systemd-resolved (или NetworkManager).
getent vs dig
Две команды резолвинга, с разной семантикой:
-
getent hosts name- идёт через NSS, видит/etc/hosts+ кеш + DNS. Это путь которым пойдёт реальное приложение. Это правильный инструмент для «как мою команду увидит libc». -
dig name- идёт прямо в DNS-сервер изresolv.conf, минуя/etc/hosts. Хорош для дебага DNS-сервера специально.
Поэтому dig mysite.local может не вернуть ничего, а getent hosts mysite.local вернёт 127.0.0.1. Это не баг - это разные слои.
Типы записей
- A - имя → IPv4
- AAAA - имя → IPv6
- CNAME - алиас одного имени на другое
- MX - mail exchanger (почтовый сервер)
- TXT - произвольный текст (SPF, DKIM, домен-верификация)
- NS - какие nameserver'ы авторитетны для зоны
- PTR - reverse: IP → имя
- SRV - service record (host+port для конкретного сервиса)