Настройка tinydns
Для кого эта инструкция
Коротко: для системных администраторов и инженеров DevOps, которые настраивают tinydns (djbdns) для авторитетной зоны. Если вы управляете локальной сетью или небольшим публичным DNS, этот материал пригодится.
Основные понятия (в одну строку)
- tinydns — компонент djbdns для авторитетного DNS-сервера; конфигурация хранится в текстовом файле data.
- A-запись — сопоставление имени и IPv4-адреса.
- NS — делегирование зоны на указанные серверы имён.
- MX — почтовый обменник для домена.
Файлы и помощники
Все записи tinydns хранятся в файле /service/tinydns/root/data. Редактировать его можно вручную или с помощью вспомогательных скриптов, которые находятся в каталоге /service/tinydns/root, например add-ns, add-host, add-alias и т.д.
Важно: не меняйте путь к файлу в командах — примеры используют реальную структуру каталогов.
Практический пример: запись для example.com
Перейдите в каталог с helper-скриптами:
cd /service/tinydns/rootДелаем сервер 192.168.0.100 name server для домена example.com:
./add-ns example.com 192.168.0.100Примечание: имя NS назначается автоматически скриптом add-ns по шаблону [a-z].ns.name, например a.ns.example.com. A-запись для a.ns.example.com создаётся автоматически вызовом add-ns.
Добавляем второй сервер 192.168.0.101 — это станет b.ns.example.com:
./add-ns example.com 192.168.0.101Создаём A-записи для хостов, которые будут обслуживать example.com:
./add-host server1.example.com 192.168.0.100
./add-host server2.example.com 192.168.0.101Если нужно привязать дополнительные имена к одному IP, используйте add-alias (add-host допускает один IP в одной записи):
./add-alias www.example.com 192.168.0.100
./add-alias example.com 192.168.0.100Помещаем почтовый обменник для example.com на 192.168.0.100:
./add-mx example.com 192.168.0.100Как и с NS, имя SMTP-сервера назначается автоматически шаблоном [a-z].mx.name (например a.mx.example.com). При этом нельзя задать приоритет (distance) у add-mx.
После внесения всех записей выполните:
makeчтобы изменения вступили в силу.
TXT и CNAME: правка вручную
Помощников для создания CNAME и TXT (например для SPF) в комплекте нет. Для этих записей откройте файл вручную:
vi /service/tinydns/root/dataНапример, добавление SPF (в tinydns-формате) и CNAME может выглядеть так:
'example.com:v=spf1 a mx ~all:3600
Cftp.example.com:www.example.comСовет: используйте SPF-генераторы (например http://old.openspf.org/wizard.html) — они показывают синтаксис для BIND и tinydns, что упрощает копирование.
Не забудьте снова выполнить:
makeпосле ручного изменения data.
Пример конечного файла data
cat /service/tinydns/root/dataПример вывода (фрагмент):
.example.com:192.168.0.100:a:259200
.example.com:192.168.0.101:b:259200
=server1.example.com:192.168.0.100:86400
=server2.example.com:192.168.0.101:86400
+www.example.com:192.168.0.100:86400
+example.com:192.168.0.100:86400
@example.com:192.168.0.100:a::86400
'example.com:v=spf1 a mx ~all:3600
Cftp.example.com:www.example.comОбратите внимание, что строки начинаются с символов ., =, +, @, ‘, C и т.д. — каждый символ соответствует типу записи. Подробное описание типов записей см. по ссылкам в разделе «Полезные ресурсы».
Альтернатива: всё записать вручную
Если вам нужна гибкость (например, указать собственные имена NS или MX: ns1.example.com, mail.example.com), просто отредактируйте файл data вручную:
cd /service/tinydns/root
vi dataПример содержимого data, определяющего NS, MX и набор машин:
#define the authoritative nameserver
.example.com::ns1.example.com
#mail exchanger
@example.com::mail.example.com
#IP for machine1,2,3,4,5
=machine1.example.com:1.2.3.1
=machine2.example.com:1.2.3.2
=machine3.example.com:1.2.3.3
=machine4.example.com:1.2.3.4
=machine5.example.com:1.2.3.5
#machine5 is also known as ns1
+ns1.example.com:1.2.3.5
#machine1 is our mailserver
+mail.example.com:1.2.3.1
#and our webserver
+www.example.com:1.2.3.1И снова:
makeКак проверять записи
Для тестирования используйте команду dig против вашего tinydns-сервера. Примеры:
dig @192.168.0.100 example.com
dig @192.168.0.100 ns example.com
dig @192.168.0.100 mx example.com
dig @192.168.0.100 txt example.com
dig @192.168.0.100 www.example.comЕсли ответы не совпадают с ожиданиями, проверьте /service/tinydns/root/data и убедитесь, что вы запускали make.
Частые ошибки и случаи, когда это не сработает
- Ошибка: забыли выполнить make после правки data → tinydns использует старую конфигурацию.
- Забытая зона на внешнем регистраторе: вы настроили NS локально, но записи у регистратора указывают на другие NS.
- Неверный SPF/TXT: синтаксические ошибки в строке TXT приведут к некорректной проверке почты.
- Конфликт имён: add-host позволяет использовать IP только один раз; для дополнительных имён используйте add-alias.
Альтернативные подходы
- Использовать BIND/PowerDNS, если нужна совместимость с широким набором инструментов и форматов.
- Управлять DNS декларативно через систему конфигурации (Ansible/Terraform) и генерировать /service/tinydns/root/data шаблонами.
- Для динамических записей рассмотреть Exim/DHCP-интеграцию с внешним API.
Рекомендации по безопасности и приватности
- Не размещайте управление сервером tinydns на общедоступном интерфейсе без надёжной защиты.
- Ограничьте доступ к каталогу /service/tinydns/root правами только администратора.
- В TXT/SPF не включайте чувствительные данные.
- Логи и конфигурации храните с ротацией и ограниченным доступом.
Фактбокс: ключевые команды
- cd /service/tinydns/root — перейти в каталог конфигурации
- ./add-ns
— добавить NS (имя присваивается автоматически) - ./add-host
— добавить A-запись - ./add-alias
— добавить alias для уже использованного IP - ./add-mx
— добавить MX (имя присваивается автоматически) - vi /service/tinydns/root/data — правка вручную
- make — применить изменения
- dig @
— тестировать ответы DNS
Мини-методология: как управлять tinydns в продакшне
- Разработайте шаблоны для /service/tinydns/root/data (через шаблонизатор конфигураций).
- Используйте систему контроля версий для файла data.
- Применяйте изменения через CI: проверка синтаксиса -> тесты dig в тестовом окружении -> make -> деплой.
- Документируйте соглашения об именовании (ns1/ns2 vs a.ns/b.ns).
Критерии приёмки
- DNS отвечает корректными A/NS/MX/TXT-записями в тесте dig в течение ожидаемого TTL.
- Файл data хранится в репозитории и изменения проходят ревью.
- Права на каталог ограничены и задокументированы.
Роль‑ориентированный чеклист
- Системный администратор: проверить права на /service/tinydns/root, запустить make, обеспечить бэкапы.
- DevOps-инженер: автоматизировать генерацию data, добавить тесты dig в CI.
- Оператор почтового сервера: проверить MX и SPF/TXT записи, убедиться в корректной доставке почты.
Краткий глоссарий (1 строка)
- TTL — время жизни DNS-записи в секундах; влияет на кэширование.
Полезные ресурсы
Чтобы узнать больше о djbdns и tinydns, посетите:
- http://cr.yp.to/djbdns.html
- http://www.tinydns.org
- http://www.lifewithdjbdns.com
- http://www.djbdnsrocks.org/
- http://www.fefe.de/djbdns/#recordtypes
- http://www.pjvenda.org/linux/doc/tinydns/
- http://smarden.org/pape/djb/manpages/
Важно: документация по типам записей и формату data содержится в перечисленных ссылках.
Итог
Настройка tinydns сводится к корректному составлению /service/tinydns/root/data, использованию helper-скриптов для ускорения рутинных операций и обязательному выполнению make после изменений. Для сложных сценариев рекомендуются шаблоны и автоматизация через CI, а также регулярная проверка результата с помощью dig.
Похожие материалы
Как быстро включить фонарик на Android
Как делиться экраном в Discord — руководство
Установка Microsoft Teredo в Windows 10
Красный индикатор CPU: причины и исправления
Исправить ошибку xapofx1_5.dll — руководство