DNS система · 3 min read · Oct 02, 2025
Создание DNS-системы на Debian
Создание DNS-системы на Debian
Версия 1.0
Автор: Joe Topjian
Хорошо, это последняя статья о DNS… по крайней мере, на некоторое время.
Эта статья покажет вам, как построить полную DNS-систему с Debian. Это включает в себя мастер-сервер, слейв-сервер, DDNS и множество DNSSEC. Я буду использовать BIND 9 для сервера.
Мастер-сервер
Сначала давайте запустим наш мастер-сервер. Поскольку известно, что BIND имеет свою долю уязвимостей, мы поместим его в chroot jail. Я не буду это обсуждать, так как Фалко написал отличное руководство по этому вопросу здесь.
После того как вы все настроите, настройте RNDC. RNDC — это небольшая утилита командной строки для управления BIND. Чтобы использовать его, скопируйте содержимое /etc/bind/rndc.key в /etc/bind/named.conf. Перезапустите BIND, и вы готовы к работе. Теперь вы можете использовать RNDC для взаимодействия с BIND вместо работы с BIND напрямую. Для получения дополнительной информации о командах RNDC смотрите здесь.
Теперь пришло время создать файл зоны. Для этого примера я буду использовать вымышленный TLD hemingway. На самом деле, нет особой причины — просто потому, что я могу, и я точно знаю, что он никогда не будет конфликтовать с реальным доменным именем.
Для организации я создал две директории для хранения файлов зон, мастер и слейв — для хранения файлов зон мастера и слейва соответственно.
/etc/bind/zones/master
/etc/bind/zones/slave
Не забудьте отредактировать /etc/bind/named.conf.options и изменить опцию директории на “/etc/bind”.
Файл зоны будет выглядеть так ( /etc/bind/zones/master/master.hemingway):
| $ORIGIN hemingway $TTL 1d @ IN SOA ns1 hostmaster ( 2005103008 ; serial 43200 900 604800 10800 ) NS hemingway. A 127.0.0.1 |
Обратная зона для 192.168.1.0/24 ( /etc/bind/zones/192.168.1.rev) будет выглядеть так:
| $TTL 1d ; $ORIGIN 1.168.192.IN-ADDR.ARPA. @ IN SOA ns1.hemingway. hostmaster.hemingway. ( 2005103001 2h 15m 2w 3h ) IN NS ns1.hemingway. IN NS ns2.hemingway. |
Теперь отредактируйте /etc/bind/named.conf.local с новыми зонами:
| zone "hemingway" { type master; file "zones/master/master.hemingway"; }; |
| zone "1.168.192.IN-ADDR.ARPA" { type master; file "zones/192.168.1.rev"; }; |
Перезагрузите DNS и проверьте свои журналы. У вас не должно быть ошибок, но вы никогда не знаете…
rndc reload
Теперь, когда BIND знает, какой домен хостить, пришло время добавить к нему несколько имен хостов. Мы будем использовать DDNS для этого. Чтобы настроить DDNS, вы можете следовать моим статьям о DDNS здесь.
Чтобы фактически добавить хосты с помощью DDNS, я буду использовать свой скрипт ddns.py.
ddns.py add jake.hemingway A 192.168.1.11
ddns.py add bill.hemingway A 192.168.1.12
ddns.py add robert.hemingway A 192.168.1.13
ddns.py add brett.hemingway A 192.168.1.14
Соответствующие PTR файлы также были добавлены, но я пропускаю это, чтобы сэкономить место.
Теперь у нас есть полностью функциональный мастер DNS-сервер, разрешающий любые имена хостов, которые мы ему даем.
Слейв-сервер
Теперь, когда мастер-сервер настроен, пришло время перейти к слейву. На другом компьютере настройте установленный BIND в jail, как на мастере.
Слейв будет получать передачи зон от мастера. Поскольку эти передачи зон происходят по сети в открытом виде, мы хотим их защитить.
В обоих файлах /etc/bind/named.conf.options мастера и слейва добавьте следующее:
| dnssec-enable yes; |
Используя команду dnssec-keygen, описанную здесь, создайте ключ. Добавьте MD5 хэш в новое ключевое заявление в обоих файлах /etc/bind/named.conf:
| key "TRANSFER" { algorithm hmac-md5; secret "jXc2Lreaw4QHHTb/MjiHAw=="; }; |
На мастере добавьте следующее серверное заявление в /etc/bind/named.conf:
| server IP-OF-SLAVE { keys { TRANSFER; }; }; |
На слейве сделайте обратное:
| server IP-OF-MASTER { keys { TRANSFER; }; }; |
На мастере добавьте следующее в блоки зон в /etc/bind/named.conf.local:
| allow-transfer { key TRANSFER; }; |
Блок зоны на слейве должен выглядеть так:
| zone hemingway { type slave; file "zones/slave/slave.hemingway"; masters { IP-OF-MASTER; }; allow-notify { IP-OF-MASTER; }; }; |
Наконец, убедитесь, что часы обоих серверов синхронизированы. Передачи зон не произойдут, если они не синхронизированы.
Когда вы закончите, запустите слейв-сервер. Теперь у вас должен быть новый файл в /etc/bind/zones/slave/ от передачи зоны. Если его нет, проверьте свои журналы — они очень подробны с ошибками.
Заключение
Вот и все! Это много работы, и я действительно быстро прошел через это, но это должно помочь вам начать. Для справки и дополнительной информации, пожалуйста, прочитайте мои статьи о DDNS здесь и обратитесь к замечательной книге Pro DNS and BIND (это не реклама — это действительно хорошая книга!).
Get new posts in your inbox
No spam. Unsubscribe anytime.