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 (это не реклама — это действительно хорошая книга!).

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.