#!/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 завершена."