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
Вот и все, будет создана заготовка для типичной конфигурации.
При необходимости, правим ее вручную, либо заранее правим шаблон в скрипте под себя.