#!/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" < "$ZONE_FILE_REVERSE" < "$NAMED_CONF" </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