Часто в организациях бывает несколько локальных сетей, получающих интернет через один общий шлюз, обычно работающий под управлением Linux. Каждая локальная сеть подключена к своему сетевому интерфейсу или "положена" в свой VLAN.
Иногда возникает потребность настроить DHCP-сервер для каждой из сетей. Мы уже описывали простую конфигурацию DHCP-сервера, однако она на всех интерфейсах раздаёт одни и те же настройки, в случае с несколькими разными сетями этот вариант не приемлем. Далее будет показано как можно сконфигурировать DHCP-сервер для обслуживания нескольких сетей, подключенных к разным интерфейсам.
Мы будем использовать описанную ранее схему сети, и попробуем добавить в неё DHCP-сервер, который будет выдавать корректные настройки для каждой из подсетей.
Для начала установим DHCP-сервер:
apt-get install -y dhcp3-server
Далее нужно открыть в текстовом редакторе файл "/etc/dhcp3/dhcpd.conf", убираем из него всё содержимое и начинаем писать новую конфигурацию. Для начала впишем базовые опции:
ddns-update-style none; max-lease-time 7200; authoritative; log-facility local7;
Далее для каждой сети нужно написать примерно вот такую секцию:
subnet 192.168.5.0 netmask 255.255.255.0 {
# Имя интерфейса
interface vlan5;
# Имя домена
option domain-name "net5.example.com";
# Адрес DNS-сервера
option domain-name-servers 192.168.5.1;
# Время жизни адреса
default-lease-time 600;
# Диапазон адресов в этой подсети
range 192.168.5.101 192.168.5.110;
# Маршрут по умолчанию
option routers 192.168.5.1;
}
Следующим шагом в файле "/etc/default/dhcp3-server" в строке "INTERFACES" нужно перечислить через пробел имена интерфейсов, на которых должен слушать DHCP-сервер и перезапустить его командой:
invoke-rc.d dhcp3-server restart
Однако в рассматриваемой конфигурации у нас четырнадцать подсетей и ручное написание конфигурации займёт достаточно много времени. Для упрощения решения этой задачи был написан скрипт:
#!/bin/sh
# Имя файла конфигурации
CONFFILENAME="/etc/dhcp3/dhcpd.conf"
# Базовое имя домена
DOMAIN="example.com"
# Устанавливам DHCP-сервер
apt-get install -y dhcp3-server
# Записываем базовые опции в файл конфигурации
echo "ddns-update-style none;" > ${CONFFILENAME}
echo "max-lease-time 7200;" >> ${CONFFILENAME}
echo "authoritative;" >> ${CONFFILENAME}
echo "log-facility local7;" >> ${CONFFILENAME}
IFACELIST=""
# Перебираем VLAN'ы
for vlanid in `seq 2 15`; do
# Добавляем новый интерфейс к списку
IFACELIST="${IFACELIST} vlan${vlanid}"
# Для каждого VLAN генерируем свою секцию в файле конфигурации
echo "subnet 192.168.${vlanid}.0 netmask 255.255.255.0 {" >> ${CONFFILENAME}
echo " interface vlan${vlanid};" >> ${CONFFILENAME}
echo " option domain-name \"net${vlanid}.${DOMAIN}\";" >> ${CONFFILENAME}
echo " option domain-name-servers 192.168.${vlanid}.1;" >> ${CONFFILENAME}
echo " default-lease-time 600;" >> ${CONFFILENAME}
echo " range 192.168.${vlanid}.101 192.168.${vlanid}.110;" >> ${CONFFILENAME}
echo " option routers 192.168.${vlanid}.1;" >> ${CONFFILENAME}
echo "}" >> ${CONFFILENAME}
done
# Записываем в системный файл конфигурации список интерфейсов, на которых будет слушать DHCP-сервер
echo "INTERFACES=\"${IFACELIST}\"" > /etc/default/dhcp3-server
# Перезапускаем DHCP-сервер
invoke-rc.d dhcp3-server restart
Для установки и настройки DHCP-сервера достаточно сохранить листинг под именем "./gen_dhcpd.conf.sh" и выполнить команду:
chmod +x ./gen_dhcpd.conf.sh && sudo ./gen_dhcpd.conf.sh
На этом всё. Приятной работы!

Anonymous 2013-04-01 12:18:05 (#)
так симпатичнее
и так тоже красиво