Неправильная конфигурация DNS — одной из главных причин падения сайтов, потери трафика и уязвимостей. Многие руководства охватывают только базовые настройки, но реальный мир полон более тонких проблем: неправильные TTL, циклы CNAME, неверные MX‑записи, отсутствие глue‑записей и др. В этой статье разберём наиболее распространённые ошибки, покажем, как их обнаружить и как исправить, а также предложим практические рекомендации для предотвращения подобных ситуаций в будущем.
1. Общие принципы правильной настройки DNS
| Принцип | Что это значит | Почему важно |
|---|---|---|
| Разделение зон | Служебные записи (NS, SOA) и пользовательские записи (A, AAAA, CNAME, MX, TXT) находятся в отдельных файлах/зонах. | Упрощает управление и уменьшает риск ошибок. |
| Минимизация TTL | Устанавливать TTL в пределах 300–86400 секунд в зависимости от критичности записи. | Быстрое обновление при изменениях, но не слишком низкое, чтобы не перегружать серверы. |
| Проверка синтаксиса | Использовать валидаторы (например, named-checkzone, dig, nslookup). |
Синтаксические ошибки могут сделать зону недоступной. |
| Глue‑записи | Для NS‑серверов, находящихся в той же зоне, добавлять A/AAAA записи в корневую зону. | Без глue‑записей клиенты не найдут NS‑серверы. |
| DNSSEC | Подписывать зону, проверять подписи. | Защищает от подмены записей, но требует правильной настройки цепочки доверия. |
2. Наиболее частые ошибки
2.1 Неправильные TTL
| Ошибка | Последствия | Как исправить |
|---|---|---|
| Установка слишком высокого TTL (например, 1 млн секунд) | При изменении записи изменения не видны в течение длительного времени. | Установить TTL в пределах 300–86400 секунд. |
| Установка слишком низкого TTL (0 секунд) | Перегрузка DNS‑серверов, повышенный трафик. | Установить минимум 300 секунд для стабильных записей. |
Пример (BIND конфигурация):
$TTL 3600
@ IN SOA ns1.example.com. hostmaster.example.com. (
2024010101 ; serial
7200 ; refresh
3600 ; retry
1209600 ; expire
3600 ; minimum
)
2.2 Циклы CNAME
| Ошибка | Последствия | Как исправить |
|---|---|---|
cname.example.com. CNAME a.example.com. и a.example.com. CNAME cname.example.com. |
DNS‑серверы возвращают ошибку CNAME loop. |
Удалить один из CNAME‑ов, использовать A/AAAA записи вместо CNAME при необходимости. |
Проверка:
dig +trace cname.example.com
2.3 Неверные MX‑записи
| Ошибка | Последствия | Как исправить |
|---|---|---|
| MX‑запись указывает на домен без A/AAAA записи | Почта не доставляется. | Добавить A/AAAA запись для MX‑серверов. |
| Приоритеты MX одинаковые | Неопределённость маршрута доставки. | Установить уникальные приоритеты (например, 10, 20). |
Пример:
@ IN MX 10 mail1.example.com.
@ IN MX 20 mail2.example.com.
mail1 IN A 203.0.113.10
mail2 IN A 203.0.113.20
2.4 Отсутствие глue‑записей
| Ошибка | Последствия | Как исправить |
|---|---|---|
| NS‑серверы находятся в той же зоне, но не имеют A/AAAA записей в корневой зоне | Клиенты не могут найти NS‑серверы, сайт недоступен. | Добавить A/AAAA записи для NS‑серверов в корневую зону. |
Пример (для зоны example.com):
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
ns1 IN A 192.0.2.1
ns2 IN A 192.0.2.2
2.5 Ошибки в синтаксисе зоны
| Ошибка | Последствия | Как исправить |
|---|---|---|
Пропущенный ; (комментарий) или неправильный формат записи |
Серверы возвращают ошибки Syntax error. |
Использовать валидаторы (named-checkzone, dig +noshift). |
| Неправильный формат IPv6 (AAAA) | Запись не распознаётся. | Проверить правильность IPv6‑адреса. |
Проверка:
named-checkzone -d example.com /etc/bind/zones/example.com.db
2.6 Неправильная настройка DNSSEC
| Ошибка | Последствия | Как исправить |
|---|---|---|
| Отсутствие RRSIG записей | Клиенты не могут проверить подпись, возможна ошибка SERVFAIL. |
Подписать зону с помощью dnssec-signzone. |
| Неправильный цепочка доверия (missing DS) | DNSSEC не будет работать. | Добавить DS‑запись в родительскую зону. |
Пример (подпись зоны):
dnssec-signzone -o example.com -k Kexample.com.+005+12345.key example.com.db
2.7 Переполненные зоны (Too many A records)
| Ошибка | Последствия | Как исправить |
|---|---|---|
| Слишком много A‑записей в одной зоне | Увеличивает время ответа, может вызвать тайм‑ауты. | Перенести часть записей в поддомены, использовать CNAME/AAAA там, где это возможно. |
3. Инструменты для диагностики
| Инструмент | Что делает | Как использовать |
|---|---|---|
| dig | Запросы к DNS‑серверу, просмотр ответов. | dig @8.8.8.8 example.com ANY |
| nslookup | Аналогично dig, но более простая интерактивная форма. |
nslookup -type=any example.com |
| named-checkzone | Проверка синтаксиса зоны BIND. | named-checkzone -d example.com /etc/bind/zones/example.com.db |
| dnssec-checkds | Проверка DS‑записей для DNSSEC. | dnssec-checkds example.com |
| DNSViz (онлайн) | Визуализация цепочки доверия, выявление ошибок. | Перейти на https://dnsviz.net/ |
| dig +trace | Пошаговый путь запроса через все уровни DNS. | dig +trace example.com |
| BIND logs | Логи сервера, показывают ошибки при загрузке зоны. | /var/log/named/ |
4. Практические рекомендации
- Планируйте структуру зоны заранее: отдельные поддомены для почты, CDN, API и т.д.
- Используйте автоматизацию: скрипты на Bash/Python, которые генерируют зоны и проверяют их перед загрузкой.
- Тестируйте изменения в тестовой среде (например, локальный BIND) перед публикацией.
- Сохраняйте резервные копии зон и ключей DNSSEC.
- Обновляйте записи постепенно: сначала добавьте новые записи, затем удалите старые, проверяя работоспособность.
- Мониторьте DNS: используйте сервисы вроде
digв cron‑задачах, чтобы автоматически проверять доступность записей. - Обучайте команду: регулярные семинары по DNS помогут избежать человеческих ошибок.
5. Пример полного рабочего цикла настройки зоны
# 1. Создать файл зоны
cat <<EOF > /etc/bind/zones/example.com.db
$TTL 3600
@ IN SOA ns1.example.com. hostmaster.example.com. (
2024010101 ; serial
7200 ; refresh
3600 ; retry
1209600 ; expire
3600 ; minimum
)
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
@ IN MX 10 mail1.example.com.
@ IN MX 20 mail2.example.com.
ns1 IN A 192.0.2.1
ns2 IN A 192.0.2.2
mail1 IN A 203.0.113.10
mail2 IN A 203.0.113.20
@ IN TXT "v=spf1 include:_spf.example.com ~all"
EOF
# 2. Проверить синтаксис
named-checkzone -d example.com /etc/bind/zones/example.com.db
# 3. Подписать зону (если используется DNSSEC)
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com
dnssec-signzone -o example.com -k Kexample.com.+005+12345.key example.com.db
# 4. Перезапустить BIND
systemctl restart bind9
# 5. Проверить доступность
dig @8.8.8.8 example.com ANY
dig @8.8.8.8 mail1.example.com A
6. Вывод
Ошибки в настройке DNS часто просты, но их последствия могут быть серьёзными: потеря трафика, недоступность сайта, уязвимости к атакам. Понимание типичных ошибок (TTL, CNAME‑циклы, MX‑записи, глue‑записи, синтаксис, DNSSEC) и умение быстро их диагностировать с помощью dig, named-checkzone и онлайн‑инструментов поможет поддерживать инфраструктуру в надёжном состоянии.
Соблюдение практических рекомендаций, автоматизация процесса и регулярный мониторинг — залог успешной работы DNS в любой организации.
Если у вас возникли конкретные вопросы по настройке, не стесняйтесь спрашивать — мы всегда готовы помочь!