Настройка DHCP-сервера для работы на нескольких интерфейсах

()

Часто в организациях бывает несколько локальных сетей, получающих интернет через один общий шлюз, обычно работающий под управлением 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

На этом всё. Приятной работы!

Ключевые слова: dhcp.

Подписаться на обновления: RSS-лента Канал в TamTam Telegram канал Канал в ICQ

Комментарии:

Anonymous 2013-04-01 12:18:05 (#)

Скрипт написан немного ужасно :)
for ...; do
 echo ...
 echo ...
 ...
done >> file

так симпатичнее
for ...; do
cat >> file <<EOF
... $a ...
... $b ...
EOF
done

и так тоже красиво

MooSE 2013-04-02 23:31:38 (#)


так симпатичнее
for ...; do
cat >> file <<EOF
... $a ...
... $b ...
EOF
done



Да. Так наверное действительно лучше:)
Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2024 Вадим Калинников aka MooSE
Политика конфиденциальности