Перейти к содержанию

22. DNS

Введение

Система доменных имен (DNS, Domain Name System) — это фундаментальный элемент интернета, обеспечивающий преобразование доменных имен в IP-адреса. DNS позволяет пользователям использовать удобочитаемые имена (например, example.com) вместо сложных числовых IP-адресов (например, 192.0.2.1).

Архитектура DNS

DNS представляет собой распределенную и иерархическую систему имен. Основные компоненты DNS:

  • Корневые серверы (Root Servers) — начальный уровень иерархии, содержащий ссылки на серверы доменов верхнего уровня (TLD). В мире существует 13 корневых серверов (их IP-адреса жёстко закодированы в DNS-системе), которые управляются различными организациями.
  • Серверы доменов верхнего уровня (TLD Servers) — обслуживают домены верхнего уровня (.com, .org, .ru и т. д.). Они получают запросы от корневых серверов и направляют их к авторитетным серверам домена.
  • Авторитетные DNS-серверы (Authoritative DNS Servers) — содержат информацию о конкретных доменах. Они являются конечной точкой, предоставляющей IP-адреса для доменов и отвечающей на запросы резолверов.
  • Рекурсивные резолверы (Recursive Resolvers) — получают запросы от клиентов и выполняют поиск нужного IP-адреса, запрашивая информацию у других серверов. Они кэшируют полученные данные, чтобы ускорить будущие запросы.
  • Клиенты (Resolvers) — программы на конечных устройствах, отправляющие запросы к DNS-серверам.

DNS использует иерархическую структуру доменных имен, разделенную точками:

 www.example.com.
└───┴───────┴───┘
  2     1     0
  • Уровень 0 – корневой (.)
  • Уровень 1 – домен верхнего уровня (TLD, например, .com)
  • Уровень 2 – домен второго уровня (например, example.com)
  • Уровень 3 – поддомен (например, www.example.com)

Уровень модели OSI

DNS работает на прикладном уровне (Application Layer) модели OSI. Это связано с тем, что DNS обеспечивает преобразование доменных имен в IP-адреса, но не управляет транспортировкой данных сам по себе.

При этом DNS может использовать два транспортных протокола:

  • UDP (порт 53) – используется в большинстве случаев, так как обеспечивает быструю передачу небольших запросов.
  • TCP (порт 53) – применяется, если ответ превышает 512 байт (например, при DNSSEC) или для зоновых трансферов между DNS-серверами.

В некоторых случаях DNS может работать поверх HTTPS (DoH, DNS over HTTPS) или TLS (DoT, DNS over TLS), обеспечивая шифрование запросов и повышенную безопасность. Эти технологии помогают защититься от перехвата и подмены DNS-запросов.

Таким образом, DNS – это сетевой сервис, работающий на уровне приложений OSI, но использующий транспортный уровень (UDP/TCP) для передачи данных. Он играет ключевую роль в функционировании интернета, обеспечивая быструю и надежную маршрутизацию запросов.

Типы DNS-записей

DNS использует различные типы записей для хранения информации о доменах:

  • A (Address Record) — сопоставляет доменное имя с IPv4-адресом.
  • AAAA (IPv6 Address Record) — сопоставляет доменное имя с IPv6-адресом.
  • CNAME (Canonical Name Record) — указывает алиас для другого доменного имени.
  • MX (Mail Exchange Record) — определяет серверы для обработки электронной почты.
  • NS (Name Server Record) — указывает авторитетные серверы для домена.
  • PTR (Pointer Record) — используется для обратного DNS (IP -> имя хоста).
  • TXT (Text Record) — хранит произвольный текст, например, SPF-записи для проверки отправителей почты.
  • SRV (Service Record) — указывает местоположение сервисов.
  • SOA (Start of Authority) — содержит информацию об основном сервере зоны и параметрах обновления записей.

Как работает DNS-запрос

Когда пользователь вводит example.com в браузере, происходит следующий процесс:

  1. Локальный кеш: Проверяется кеш операционной системы или браузера.
  2. Рекурсивный resolver: Если в кеше нет ответа, запрос передается резолверу, указанному в настройках сети.
  3. Корневые серверы: Если resolver не знает ответ, он запрашивает корневые серверы.
  4. TLD-серверы: Корневые серверы направляют запрос к TLD-серверу (например, для .com).
  5. Авторитетный сервер: TLD-сервер передает запрос авторитетному DNS-серверу.
  6. Ответ клиенту: Полученный IP-адрес возвращается клиенту.

DNS resolver

Резолвер DNS (Domain Name System) — это компонент, который отвечает за перевод доменных имен (например, www.example.com) в IP-адреса (например, 192.0.2.1), которые используются для маршрутизации трафика в сети. Процесс преобразования доменного имени в IP-адрес называется разрешением DNS.

Вот основные функции DNS-resolver:

  1. Запросы DNS: resolver отправляет запросы к DNS-серверам для получения IP-адресов, соответствующих доменным именам.
  2. Кэширование: resolver часто кэшируют результаты запросов, чтобы ускорить последующие обращения к тем же доменным именам.
  3. Рекурсивные и итеративные запросы: resolver могут выполнять рекурсивные запросы, когда они берут на себя ответственность за получение полного ответа на запрос, или итеративные запросы, когда они возвращают ссылку на другой DNS-сервер, который может знать ответ.
  4. Обработка ошибок: resolver обрабатывают ошибки, такие как отсутствие запрашиваемого домена или проблемы с сетью.

DNS-resolver могут быть встроены в операционные системы, браузеры или работать как отдельные сервисы, предоставляемые интернет-провайдерами или сторонними компаниями.

Кеширование в DNS

Кеширование снижает нагрузку на серверы и ускоряет работу сети. Основные механизмы:

  • Клиентский кеш (браузер, ОС) – хранит ответы на ранее выполненные запросы.
  • Кеширование на рекурсивных resolver – временное сохранение данных для последующих запросов.
  • Кеширование на прокси-серверах и межсетевых экранах – уменьшает количество внешних запросов.
  • TTL (Time To Live) — время жизни записи в кеше, задаваемое администратором.
  • Negative Caching – хранение информации об ошибочных запросах, чтобы избежать повторных попыток.

Кеширование DNS ускоряет доступ к ресурсам, но может привести к проблемам при изменении IP-адресов доменов, если кеш не обновляется своевременно. В таких случаях применяется сброс кеша (например, командой ipconfig /flushdns в Windows или systemd-resolve --flush-caches в Linux).

Безопасность DNS

Основные угрозы DNS

  1. DNS Spoofing (подмена DNS) – атака, при которой злоумышленник подменяет IP-адреса в ответах сервера, перенаправляя пользователей на фальшивые сайты.
  2. DNS Cache Poisoning (отравление кеша) – внедрение вредоносных записей в кеш DNS-сервера.
  3. DDoS-атаки на DNS-серверы – перегрузка серверов большим количеством запросов.
  4. DNS Hijacking (перехват DNS-запросов) – изменение настроек DNS на стороне клиента или провайдера.

Методы защиты

  • Использование DNSSEC (Domain Name System Security Extensions) – цифровая подпись для проверки подлинности ответов DNS.
  • Шифрование запросов (DoH, DoT) – предотвращает перехват данных.
  • Настройка защитных механизмов на DNS-серверах – ограничение зоновых трансферов, использование списков разрешенных IP-адресов.
  • Мониторинг и логирование DNS-запросов – позволяет выявлять подозрительную активность.

Заключение

Система DNS является критически важной частью интернета и требует внимательного администрирования. Важно понимать принципы её работы, уметь настраивать и защищать DNS-серверы, а также эффективно диагностировать и устранять неисправности.