adddomain-01

Наверняка многие из вас задумывались об автоматизации добавления новых файлов зон на своем 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

Вот и все, будет создана заготовка для типичной конфигурации.

adddomain-02

При необходимости, правим ее вручную, либо заранее правим шаблон в скрипте под себя.