Как настроить DNS в Linux?
DNS (Domain Name System) — система, преобразующая доменные имена в IP-адреса. Корректная настройка DNS критически важна для работы микросервисов, которые обращаются друг к другу по именам.
/etc/resolv.conf
Классический способ указания DNS-серверов:
Пример
# /etc/resolv.conf
nameserver 10.0.0.1 # корпоративный DNS
nameserver 10.0.0.2 # резервный DNS
search mybank.local dev.mybank.local
options timeout:2 attempts:3
nameserver— адрес DNS-сервера (максимум 3)search— домены для автодополнения (запросapp-serverбудет преобразован вapp-server.mybank.local)options— параметры: таймаут и число попыток
systemd-resolved
Конфигурация systemd-resolved
В современных дистрибутивах /etc/resolv.conf часто является симлинком на systemd-resolved:
# Проверить статус
resolvectl status
# Настройка через /etc/systemd/resolved.conf
[Resolve]
DNS=10.0.0.1 10.0.0.2
FallbackDNS=8.8.8.8
Domains=mybank.local
DNSSEC=allow-downgrade
DNSOverTLS=opportunistic
# Применить
sudo systemctl restart systemd-resolved
Локальный DNS через /etc/hosts
Файл /etc/hosts позволяет задать соответствие имён и адресов локально, без обращения к DNS:
Пример
# /etc/hosts
127.0.0.1 localhost
192.168.1.10 app-server.mybank.local app-server
192.168.1.11 db-master.mybank.local db-master
192.168.1.12 db-replica.mybank.local db-replica
192.168.1.20 kafka-01.mybank.local kafka-01
Порядок разрешения имён определяется в /etc/nsswitch.conf:
Пример
# /etc/nsswitch.conf
hosts: files dns
# Сначала /etc/hosts (files), потом DNS-сервер (dns)
Диагностика DNS
Пример
# Запрос A-записи
dig app-server.mybank.local
# Краткий вывод
dig +short app-server.mybank.local
# Запрос конкретного типа записи
dig MX mybank.local
# Использование конкретного DNS-сервера
dig @10.0.0.1 app-server.mybank.local
Для Java-приложений DNS-кеширование управляется через JVM-параметры networkaddress.cache.ttl и networkaddress.cache.negative.ttl в файле java.security. По умолчанию JVM может кешировать DNS-записи навечно, что создаёт проблемы при изменении адресов.
На собеседовании: интервьюер ожидает знание порядка разрешения имён (hosts -> DNS) и понимание того, как JVM кеширует DNS. Частая ошибка — не знать про вечное DNS-кеширование в JVM и его влияние на failover.