Что такое DNS

«Что такое DNS» — вопрос из категории Сети, который задают на 26% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

DNS (Domain Name System) — это распределенная иерархическая система, выступающая в роли "телефонной книги" интернета. Ее основная задача — преобразовывать удобочитаемые доменные имена (например, api.service.com) в машиночитаемые IP-адреса (например, 10.0.1.5).

Архитектура с точки зрения DevOps:

  1. Рекурсивный резолвер (Recursor): Сервер, который получает запрос от клиента (например, вашего ноутбука или пода в k8s). Он последовательно опрашивает другие DNS-серверы, чтобы найти ответ. Это обычно сервер вашего провайдера или внутренний (CoreDNS, dnsmasq).
  2. Корневые серверы: Указывают на серверы доменов верхнего уровня (TLD).
  3. TLD-серверы: Управляют зонами .com, .net, .io и т.д. Они указывают на авторитативные серверы домена.
  4. Авторитативные серверы: Хранят фактические DNS-записи (A, CNAME, MX и др.) для конкретного домена.

Ключевые типы записей в инфраструктуре:

  • A / AAAA: Сопоставление имени с IPv4/IPv6 адресом. Основа маршрутизации.
  • CNAME: Алиас одного имени на другое. Полезно для абстракции (например, app.prod.example.com -> elb-123.amazonaws.com).
  • SRV: Указывает на сервис, включая порт. Критично для автоматического обнаружения сервисов (service discovery) в некоторых системах.
  • TXT: Используется для проверок владения доменом, SPF/DKIM/DMARC (защита от спама), и других метаданных.

Практические команды для отладки:

# Полная трассировка запроса с деталями
dig +trace api.example.com

# Запрос конкретного типа записи (например, MX для почты)
dig MX example.com

# Использование конкретного DNS-сервера (например, Google 8.8.8.8)
nslookup myapp.internal 8.8.8.8

# Проверка времени разрешения и TTL (Time To Live)
dig example.com +stats

Для DevOps важно: Понимать TTL (влияет на скорость распространения изменений и откатов), настраивать внутренние DNS-серверы для service discovery (например, CoreDNS в Kubernetes), интегрировать DNS с облачными провайдерами (Route 53, Cloud DNS) и использовать инструменты вроде dnsutils в контейнерах для диагностики сетевых проблем.