bind9 - автоматизация добавления файлов зон
Наверняка многие из вас задумывались об автоматизации добавления новых файлов зон на своем DNS-сервере. Кто-то правит руками, кто-то ставит для этого развесистые панели управления, а кто-то просто автоматизирует скриптами рутинные операции, хотя бы по минимуму.
Для начала установим и настроим bind9:
apt-get install bind9
Добавим в ‘/etc/bind/named.conf’ строку:
include "/etc/bind/myzones.conf";
Настроим под свои задачи ‘/etc/bind/named.conf.options’. У меня это кэширующий DNS-сервер, который обращается к вышестоящему (192.168.1.1) DNS на роутере. Не забудьте поправить ACL для своих подсетей.
acl "trusted" { ::1; 127.0.0.1; 192.168.1.0/24; }; acl "vpnclients" { 10.0.0.0/24; }; options { directory "/var/cache/bind"; forward only; forwarders { 192.168.1.1; }; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; allow-query { trusted; vpnclients; }; allow-recursion { trusted; vpnclients; }; };
Создаем в ‘/usr/local/bin’ наш скрипт:
nano /usr/local/bin/adddomain
#!/bin/sh # -------------------------- # Simple script for bind9 # Written by ZeroChaos # Version 1.0, 2013-03-06 # Site: https://zerolab.net/ # -------------------------- echo -n "Введите имя домена: " read DOMAIN_NAME DOMAIN_NAME=`echo $DOMAIN_NAME | tr '[:upper:]' '[:lower:]'` echo -n "Введите IP для записи типа 'A': " read IP_TYPE_A PTR_1="`echo $IP_TYPE_A | awk -F. '{ print $4 }'`" PTR_2="`echo $IP_TYPE_A | awk -F. '{ print $3 }'`" PTR_3="`echo $IP_TYPE_A | awk -F. '{ print $2 }'`" PTR_4="`echo $IP_TYPE_A | awk -F. '{ print $1 }'`" echo -n "Введите порядковый номер правки (ГодМесяцДеньНомер): " read YYYYMMDDXX echo -n "Добавить в список зон (myzones.conf)? (y/N): " read ADD_TO_MYZONES ADD_TO_MYZONES=`echo $ADD_TO_MYZONES | tr '[:upper:]' '[:lower:]'` echo -n "Перечитать файлы зон? (y/N): " read RNDC_RELOAD RNDC_RELOAD=`echo $RNDC_RELOAD | tr '[:upper:]' '[:lower:]'` if [ "$ADD_TO_MYZONES" = "y" ]; then cat <>/etc/bind/myzones.conf zone "$DOMAIN_NAME" { type master; file "/etc/bind/myzones/$DOMAIN_NAME"; }; EOF fi cat < /etc/bind/myzones/$DOMAIN_NAME ; Время жизни до обновления кеша \$TTL 1h ; Имя домена, которое описывается в директиве zone 'myzones.conf', запись ниже необязательна \$ORIGIN $DOMAIN_NAME. ; Запись SOA - начальная запись зоны @ IN SOA ns1 root ( $YYYYMMDDXX ; YYYYMMDDXX (XX порядковый номер правки) 1h ; Обновление через 1 час 15m ; Повторение попытки через 15 минут 1w ; Истечение срока через 1 неделю 1h ) ; Минимальное TTL в 1 час ; ns1 - имя первичного DNS сервера зоны ; root - адрес электронной почты администратора домена ; @ - означает, что запись зоны будет совпадать с именем домена. ; ; Серверы имен (NS) ; @ IN NS ns1.$DOMAIN_NAME. ; ; Почтовые сервера (MX) ; ;@ IN MX 10 mail.$DOMAIN_NAME. ; ; Адреса для канонических имен ; @ IN A $IP_TYPE_A www IN A $IP_TYPE_A ns1 IN A $IP_TYPE_A ;*.$DOMAIN_NAME. CNAME @ ; ; Адреса, указывающие на канонические имена ; ;$PTR_1.$PTR_2.$PTR_3.$PTR_4.in-addr.arpa. IN PTR @ ; Проверяем работоспособность: ; dig @ns1.$DOMAIN_NAME $DOMAIN_NAME EOF if [ "$RNDC_RELOAD" = "y" ]; then rndc reload fi
Даем права на выполнение:
chmod 755 /usr/local/bin/adddomain
Запускаем и последовательно отвечаем на вопросы:
adddomain
Вот и все, будет создана заготовка для типичной конфигурации.
При необходимости, правим ее вручную, либо заранее правим шаблон в скрипте под себя.