Вики / Сеть
DNS и разрешение имён
Как имя превращается в IP — resolv.conf, systemd-resolved, /etc/hosts, dig.
Чтобы обратиться к example.com, система превращает имя в IP. Порядок источников
задаёт NSS (/etc/nsswitch.conf): обычно сначала /etc/hosts, затем DNS.
В Ubuntu DNS-резолвингом заведует systemd-resolved, а /etc/resolv.conf —
символическая ссылка на его заглушку (127.0.0.53).
getent hosts example.com # как система РЕАЛЬНО резолвит (учитывает hosts+DNS+NSS)
resolvectl status # текущие DNS-серверы и search-домены по интерфейсам
resolvectl query example.com # запрос через systemd-resolved (как сделает приложение)
Важно:
dig/nslookupходят в DNS напрямую, а приложения резолвят через NSS. Поэтому для «как видит программа» бериgetent hosts/resolvectl query, аdig— чтобы проверить сам DNS-сервер.
dig example.com # подробный DNS-запрос (пакет dnsutils/bind9-dnsutils)
dig +short example.com # только ответ (IP) — удобно в скриптах
dig +short example.com AAAA # IPv6-адрес
dig example.com MX # записи типа (A, AAAA, MX, TXT, NS, SOA, CNAME…)
dig @8.8.8.8 example.com # спросить КОНКРЕТНЫЙ сервер (мимо локального)
dig +trace example.com # пройти делегирование от корня (где ломается)
dig -x 1.2.3.4 # обратный запрос (PTR)
dig +noall +answer example.com # только секция ответа
host example.com # коротко и просто
host -t MX example.com # тип записи
nslookup example.com # классика (интерактивный тоже)
/etc/hosts — локальные переопределения (обычно выше DNS):
127.0.0.1 localhost
192.168.1.10 myserver myserver.local
getent hosts myserver # проверить, что переопределение видно системе
resolvectl flush-caches # сбросить кэш systemd-resolved
resolvectl statistics # хиты/промахи кэша
Пингуется IP, но не имена
DNS не работает. По лесенке:
1. resolvectl status — есть ли DNS-сервер у интерфейса (Current DNS Server).
2. getent hosts example.com — резолвится ли через систему вообще.
3. dig @8.8.8.8 example.com — отвечает ли публичный DNS (если да — проблема в локальном/resolved).
Имя резолвится не в тот IP
- Запись в
/etc/hostsперебивает DNS — проверь его (getent hosts имя). - Старый кэш:
resolvectl flush-caches. - Несколько A-записей/round-robin — это нормально (балансировка).
resolv.conf затирается после ребута
Не правь /etc/resolv.conf напрямую (это симлинк на resolved). Настраивай DNS
в netplan (nameservers:) или /etc/systemd/resolved.conf, затем
sudo netplan apply / systemctl restart systemd-resolved.
Внутренние имена не резолвятся, внешние — да
Нет search-домена или нужного DNS для внутренней зоны. Проверь resolvectl status
(Search Domains) и добавь домен/сервер в netplan.
dig работает, а приложение «не находит» хост
dig ходит в DNS мимо NSS. Проверяй через getent hosts/resolvectl query —
причина в /etc/hosts, nsswitch.conf или кэше resolved.
getent hosts NAME # как резолвит система (для приложений)
resolvectl status # DNS-серверы и search-домены
dig +short NAME ; dig NAME MX # быстрый ответ / тип записи
dig @8.8.8.8 NAME # проверить через публичный DNS
dig +trace NAME # где ломается делегирование
resolvectl flush-caches # сбросить кэш
# локально: /etc/hosts ; постоянно: netplan nameservers
См. также
- ip (адреса и маршруты) — Сеть
- curl (HTTP из консоли) — Сеть