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