abu
This commit is contained in:
parent
e5d4663775
commit
ecd364a8b4
175
DNS server
Normal file
175
DNS server
Normal 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
|
||||
Loading…
Reference in a new issue