This commit is contained in:
parent e5d4663775
commit ecd364a8b4

175
DNS server Normal file
View file

@ -0,0 +1,175 @@
#!/bin/bash
# ============================================================================
# Скрипт базовой настройки DNS-сервера BIND
# Требует прав root. Работает на RHEL/CentOS/Fedora (проверено на RHEL 8/9)
# ============================================================================
set -euo pipefail
# === КОНФИГУРАЦИЯ (измените значения под вашу среду) ===
DNS_SERVER_IP="192.168.0.1" # IP-адрес сервера для прослушивания
DOMAIN="example.org" # Имя локальной зоны
ALLOW_QUERY="any" # Сеть для запросов (пример: 192.168.0.0/24)
FORWARDERS="8.8.8.8; 8.8.4.4;" # Адреса внешних DNS-серверов
REVERSE_ZONE="10.168.192.in-addr.arpa" # Обратная зона для сети 192.168.10.0/24
# =======================================================
# Проверка прав root
if [[ $EUID -ne 0 ]]; then
echo "❌ Ошибка: Скрипт должен запускаться от имени root (sudo)"
exit 1
fi
# Проверка установки BIND
if ! rpm -q bind &>/dev/null; then
echo "⚠️ BIND не установлен. Установка..."
dnf install -y bind bind-utils || yum install -y bind bind-utils
fi
# Резервная копия конфигурации
NAMED_CONF="/etc/named.conf"
BACKUP_FILE="${NAMED_CONF}.backup.$(date +%Y%m%d_%H%M%S)"
cp -f "$NAMED_CONF" "$BACKUP_FILE"
echo "✅ Создана резервная копия: $BACKUP_FILE"
# Создание директории для зон
ZONE_MASTER_DIR="/var/named/master"
mkdir -p "$ZONE_MASTER_DIR"
# === Настройка прямой зоны ===
ZONE_FILE_FORWARD="${ZONE_MASTER_DIR}/${DOMAIN}"
cat > "$ZONE_FILE_FORWARD" <<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
; SRV Records for LDAP
_ldap._tcp.${DOMAIN}. 3600 IN SRV 0 0 389 ns01.${DOMAIN}.
EOF
echo "✅ Создана прямая зона: $ZONE_FILE_FORWARD"
# === Настройка обратной зоны ===
ZONE_FILE_REVERSE="${ZONE_MASTER_DIR}/${REVERSE_ZONE//.in-addr.arpa/}.zone"
cat > "$ZONE_FILE_REVERSE" <<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
echo "✅ Создана обратная зона: $ZONE_FILE_REVERSE"
# Настройка прав доступа
chown -R root:named "$ZONE_MASTER_DIR"
chmod 0640 "$ZONE_MASTER_DIR"/*
echo "✅ Установлены права на зоны: root:named, 0640"
# Создание директории для логов
LOG_DIR="/var/log/bind"
mkdir -p "$LOG_DIR"
chown named:named "$LOG_DIR"
chmod 750 "$LOG_DIR"
echo "✅ Настроена директория логов: $LOG_DIR"
# === Формирование нового конфигурационного файла ===
cat > "$NAMED_CONF" <<EOF
options {
listen-on port 53 { 127.0.0.1; ${DNS_SERVER_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 { ${ALLOW_QUERY}; };
forward first;
forwarders { ${FORWARDERS} };
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/${ZONE_FILE_REVERSE##*/}";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
EOF
echo "✅ Обновлён конфигурационный файл: $NAMED_CONF"
# Проверка синтаксиса конфигурации
if ! named-checkconf "$NAMED_CONF" 2>/dev/null; then
echo "❌ Ошибка синтаксиса в конфигурации! Восстанавливаем резервную копию..."
cp -f "$BACKUP_FILE" "$NAMED_CONF"
exit 1
fi
# Перезапуск службы
systemctl restart named
systemctl enable named --now
# Проверка статуса
if systemctl is-active --quiet named; then
echo -e "\n✅ DNS-сервер успешно запущен!"
echo -e "\n🔍 Проверка работоспособности:"
echo " nslookup test.${DOMAIN} ${DNS_SERVER_IP}"
echo " dig @${DNS_SERVER_IP} _ldap._tcp.${DOMAIN} SRV"
echo " nslookup 192.168.10.50 ${DNS_SERVER_IP}"
echo -e "\n📄 Логи:"
echo " tail -f /var/log/bind/query.log"
else
echo "❌ Не удалось запустить службу named. Проверьте логи:"
journalctl -u named -n 50 --no-pager
exit 1
fi