bind9 — автоматизация добавления файлов зон

adddomain-01

Наверняка многие из вас задумывались об автоматизации добавления новых файлов зон на своем DNS-сервере. Кто-то правит руками, кто-то ставит для этого развесистые панели управления, а кто-то просто автоматизирует скриптами рутинные операции, хотя бы по минимуму.

Для начала установим и настроим bind9:

1
apt-get install bind9

Добавим в ‘/etc/bind/named.conf’ строку:

1
include "/etc/bind/myzones.conf";

Настроим под свои задачи ‘/etc/bind/named.conf.options’. У меня это кэширующий DNS-сервер, который обращается к вышестоящему (192.168.1.1) DNS на роутере. Не забудьте поправить ACL для своих подсетей.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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’ наш скрипт:

1
nano /usr/local/bin/adddomain
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/bin/sh

# --------------------------
# Simple script for bind9
# Written by ZeroChaos
# Version 1.0, 2013-03-06
# Site: http://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 < <EOF >>/etc/bind/myzones.conf

zone "$DOMAIN_NAME" {
    type master;
    file "/etc/bind/myzones/$DOMAIN_NAME";
};
EOF
fi

cat < <EOF >/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

Даем права на выполнение:

1
chmod 755 /usr/local/bin/adddomain

Запускаем и последовательно отвечаем на вопросы:

1
adddomain

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

adddomain-02

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

Категория: *nix

Теги: , ,

Оставить комментарий

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Аватары обслуживаются системой Gravatar. При публикации сообщения, Вы можете указать свой e-mail в этой системе.

Donate

Яндекс.Деньги:

VISA/MasterCard:

PayPal:
PayPal USD
PayPal RUB
WMZ WMZ: Z375880088307
WMR WMR: R883546545943
YAD YAD: 4100170884493

Donate - лучшее спасибо автору
Количество благодарностей: 37

Разделы