Загрузка данных


#!/bin/bash
# setup_dhcp.sh - настройка DHCP-сервера на s1 или s2

set -e  # прерывать при ошибке

CONFIG_FILE="/etc/dhcp/dhcp_config.txt"
DHCPD_CONF="/etc/dhcp/dhcpd.conf"
DHCPD_DEFAULTS="/etc/default/isc-dhcp-server"

# Проверка, что файл конфигурации существует
if [ ! -f "$CONFIG_FILE" ]; then
    echo "Ошибка: файл конфигурации $CONFIG_FILE не найден!"
    exit 1
fi

# Загружаем параметры из файла
source "$CONFIG_FILE"

# Определяем имя текущего хоста
CURRENT_HOST=$(hostname)

# Выбираем параметры в зависимости от хоста
if [ "$CURRENT_HOST" == "s1" ]; then
    SUBNET=$S1_SUBNET
    NETMASK=$S1_NETMASK
    RANGE_START=$S1_RANGE_START
    RANGE_END=$S1_RANGE_END
    ROUTER=$S1_ROUTER
    INTERFACE=$S1_INTERFACE
elif [ "$CURRENT_HOST" == "s2" ]; then
    SUBNET=$S2_SUBNET
    NETMASK=$S2_NETMASK
    RANGE_START=$S2_RANGE_START
    RANGE_END=$S2_RANGE_END
    ROUTER=$S2_ROUTER
    INTERFACE=$S2_INTERFACE
else
    echo "Этот скрипт предназначен для хостов s1 или s2. Текущий хост: $CURRENT_HOST"
    exit 1
fi

echo "Настройка DHCP-сервера на $CURRENT_HOST для интерфейса $INTERFACE"

# Установка DHCP-сервера
apt update
apt install -y isc-dhcp-server

# Резервное копирование оригинальных конфигов
cp $DHCPD_CONF ${DHCPD_CONF}.backup 2>/dev/null || true
cp $DHCPD_DEFAULTS ${DHCPD_DEFAULTS}.backup 2>/dev/null || true

# Настройка /etc/default/isc-dhcp-server - указываем интерфейс
cat > $DHCPD_DEFAULTS <<EOF
INTERFACESv4="$INTERFACE"
INTERFACESv6=""
DHCPDv4_CONF=$DHCPD_CONF
DHCPDv4_PID=/var/run/dhcpd.pid
OPTIONS="-4 -q"
EOF

# Генерация dhcpd.conf
cat > $DHCPD_CONF <<EOF
# DHCP-конфиг для $CURRENT_HOST
option domain-name "$DHCP_DOMAIN";
option domain-name-servers $DHCP_DNS_SERVERS;

default-lease-time $DHCP_LEASE_DEFAULT;
max-lease-time $DHCP_LEASE_MAX;

authoritative;

# Логирование в syslog
log-facility local7;

subnet $SUBNET netmask $NETMASK {
    range $RANGE_START $RANGE_END;
    option routers $ROUTER;
    option broadcast-address ${SUBNET}.255;  # для /8 это 10.255.255.255
    option domain-name "$DHCP_DOMAIN";
    option domain-name-servers $DHCP_DNS_SERVERS;
}
EOF

# Включение и запуск сервиса
systemctl enable isc-dhcp-server
systemctl restart isc-dhcp-server

# Проверка статуса
echo "Статус DHCP-сервера:"
systemctl status isc-dhcp-server --no-pager

echo "Настройка DHCP на $CURRENT_HOST завершена."