#!/bin/bash
# Базовая настройка DNS-сервера BIND
# Домен: br-srv.au-team.irpo, IP сервера: 192.168.2.2

set -e

DNS_IP="192.168.2.2"
DOMAIN="br-srv.au-team.irpo"
REVERSE_ZONE="2.168.192.in-addr.arpa"

# Создание директории для зон
mkdir -p /var/named/master

# Прямая зона
cat > /var/named/master/${DOMAIN} <<EOF
\$TTL 604800
${DOMAIN}.    IN      SOA     ns01.${DOMAIN}. root.${DOMAIN}. (
                1       ; Serial
                600     ; Refresh
                3600    ; Retry
                1w      ; Expire
                360     ; Minimum TTL
                )

        IN      NS      ns01.${DOMAIN}.
        IN      NS      ns02.${DOMAIN}.
        IN      NS      ns03.${DOMAIN}.
        IN      NS      test.${DOMAIN}.

ns01    IN      A       192.168.10.50
ns02    IN      A       192.168.10.60
ns03    IN      A       192.168.10.70
test    IN      A       192.168.10.12

_ldap._tcp.${DOMAIN}. 3600 IN SRV 0 0 389 ns01.${DOMAIN}.
EOF

# Обратная зона
cat > /var/named/master/2.168.192.zone <<EOF
\$TTL 3600
@     IN      SOA     ${DOMAIN}. root.${DOMAIN}. (
      20060204        ; Serial
      3600            ; Refresh
      900             ; Retry
      3600000         ; Expire
      3600            ; Minimum
      )
@     IN      NS      localhost.
50    IN      PTR     ns01.${DOMAIN}.
60    IN      PTR     ns02.${DOMAIN}.
70    IN      PTR     ns03.${DOMAIN}.
12    IN      PTR     test.${DOMAIN}.
EOF

# Права на зоны
chown -R root:named /var/named/master
chmod 0640 /var/named/master/*

# Директория для логов
mkdir -p /var/log/bind
chown named:named /var/log/bind
chmod 750 /var/log/bind

# Конфигурация named.conf
cat > /etc/named.conf <<EOF
options {
        listen-on port 53 { 127.0.0.1; ${DNS_IP}; };
        listen-on-v6 port 53 { none; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        forward first;
        forwarders { 8.8.8.8; };
        recursion yes;
        dnssec-enable yes;
        dnssec-validation yes;
        bindkeys-file "/var/named/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel "misc" {
                file "/var/log/bind/misc.log" versions 4 size 4m;
                print-time yes;
                print-severity yes;
                print-category yes;
        };

        channel "query" {
                file "/var/log/bind/query.log" versions 4 size 4m;
                print-time yes;
                print-severity no;
                print-category no;
        };

        category default { "misc"; };
        category queries { "query"; };
};

zone "${DOMAIN}" {
        type master;
        file "master/${DOMAIN}";
};

zone "${REVERSE_ZONE}" {
        type master;
        file "master/2.168.192.zone";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
EOF

# Перезапуск службы
systemctl restart named
systemctl enable named

echo "✅ Настройка DNS-сервера завершена"
echo "Проверка: nslookup test.${DOMAIN} ${DNS_IP}"