DHCP-сервер в сети: если неохота бегать от компьютера к компьютеру ;)

Версия для печатиОтправить другуPDF version

 DHCP (англ. Dynamic Host Configuration Protocol — протокол динамической конфигурации узла) — это сетевой протокол, позволяющий компьютерам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP. Данный протокол работает по модели «клиент-сервер». Для автоматической конфигурации компьютер-клиент на этапе конфигурации сетевого устройства обращается к т. н. серверу DHCP, и получает от него нужные параметры. Сетевой администратор может задать диапазон адресов, распределяемых сервером среди компьютеров. Это позволяет избежать ручной настройки компьютеров сети и уменьшает количество ошибок.

Это вступлении к статьи о DHCP в Википедии. Рекомендую прочитать, возможно узнаете что-либо новенькое. Ну а я приступаю к описанию установки и настройки DHCP-сервера.

Устанавливать будем из портов (надеюсь они у вас в актуальном состоянии). Перед компиляцией порта сервера DHCP надо убедиться, встроено ли устройство bpf в ядро. Если нет - пересоберите ядро с поддержкой bpf.

# cd /usr/ports/net/isc-dhcp31-server && make install clean

 

Options for isc-dhcp31-server 3.1.3

[X] DHCP_PARANOIA add -user, -group and -chroot options
[X] DHCP_JAIL add -chroot and -jail options
[ ] DHCP_SOCKETS use sockets instead of /dev/bpf (jail-only)
[X] OPENSSL_BASE use the base system OpenSSL (required by TLS)
[ ] OPENSSL_PORT use OpenSSL from ports (required by TLS)

Опции оставляю по дефолту.

По завершению установки порт уведомляет нас о создании пользователя и группы dhcp, а также выводит на экран информацию, которая по мнению разработчиков может пригодится при настройке.

После установки есть пример файла конфигурации: /usr/local/etc/dhcpd.conf.sample. Однако мы не ищем легких путей и будем "ваять" свой

Создадим конфигурационный файл:

# touch /usr/local/etc/dhcpd.conf

Потом наполняем этот файл необходимыми параметрами, в зависимости от поставленых задач. В моем случае конфигурационный файл получился такой:

#  ***   Глобальные параметры   ***   #

# Какое доменное имя будем присваивать хостам
option domain-name "domain.com";

# Описываем сроки аренды адреса
default-lease-time 304400;
max-lease-time 604800;

# Делаем наш сервер "авторитетным" для обслуживаемых сетей
authoritative;

# Указываем, что мы не используем динамически обновляемые ДНС
ddns-update-style none;

# Указываем, как поступать серверу с неизвестными клиентами. В моем случае им будет
# отказано в обслуживании
deny unknown-clients;

 #  ***   Описываем подсети   ***   #

# Задаем подсеть
subnet 10.16.32.0 netmask 255.255.255.0 {

# Описываем диапазон, из которого будем выдавать IP
range 10.16.32.2 10.16.32.254;

# Указываем ДНС-сервера
option domain-name-servers ns1.domain.com, ns2.domain.com;

# Указываем шлюз для сети
option routers 10.16.32.1;

}

# Вторая подсеть. Опции аналогичны первой

subnet 10.16.33.0 netmask 255.255.255.0 {
range 10.16.33.2 10.16.33.254;

option domain-name-servers ns1.domain.com, ns2.domain.com;
option routers 10.16.33.1;

}

# Описываем отдельные хосты
host User32-1 { hardware ethernet 00:0e:2e:a6:9f:ef; fixed-address 10.16.32.2; }
host User32-2 { hardware ethernet 00:1f:c6:d9:a3:e3; fixed-address 10.16.32.3; }
host User33-1 { hardware ethernet 00:1f:c6:24:95:9d; fixed-address 10.16.33.2; }

 

Вот такой вот коротенький конфигурационный файл. Тем не менее - конфиг полностью рабочий. Более детально ознакомиться с возможностями можно на странице руководства dhcpd.conf.

Далее добавляем в rc.conf опции запуска dhcp-сервера. Их целый блок

# cat /etc/rc.conf | grep dhcp
dhcpd_enable="YES"                                   # dhcpd включен?
dhcpd_flags="-q"                                        # исполняемые опции
dhcpd_conf="/usr/local/etc/dhcpd.conf"      # Полный путь к конфигурационному файлу
dhcpd_ifaces="vlan32 vlan33"                    # На каких интерфейсах "слушать" запросы
dhcpd_withumask="022"
dhcpd_chuser_enable="YES"                      # Запуск без привилегий?
dhcpd_withuser="dhcpd"                            # От имени какого пользователя стартовать сервер
dhcpd_withgroup="dhcpd"                          # От имени какой групы стартовать сервер
dhcpd_chroot_enable="YES"                       # Запускать chroot?
dhcpd_devfs_enable="YES"                        # Использовать devfs если доступно?
dhcpd_rootdir="/var/db/dhcpd"                  # Директория для запуска
dhcpd_flags="-early_chroot" 

 Запускаем DHCP-сервер.

# sh /usr/local/etc/rc.d/isc-dhcpd start
Starting dhcpd.
Internet Systems Consortium DHCP Server V3.1.3
Copyright 2004-2009 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Wrote 0 leases to leases file.
Listening on BPF/vlan33/00:14:5e:22:11:2a/10.16.33/24
Sending on BPF/vlan33/00:14:5e:22:11:2a/10.16.33/24
Listening on BPF/vlan32/00:14:5e:22:11:2a/10.16.32/24
Sending on BPF/vlan32/00:14:5e:22:11:2a/10.16.32/24
Sending on Socket/fallback/fallback-net

Вуаля... Все получилось. Чего и вам желаю

Ваша оценка: Нет Средняя: 5 (2 голоса)

Вопрос возник. Если в сети

Вопрос возник. Если в сети появится второй DHCP сервер, который будет выдавать, скажем, ip  адреса из другой подсети. Как клиент будет устанавливать параметры сети, от кого первым получит ip тот и установит?

Протокол DHCP построен так,

Протокол DHCP построен так, что клиент может обращаться с запросом сразу к нескольким серверам.

Клиент DHCP, нуждающийся в адресе, посылает широковещательный пакет DHCPDISCOVER в поисках сервера. Пакет содержит аппаратный адрес запрашивающего клиента. Затем один или несколько серверов DHCP рассматривают запрос и посылают в ответ пакет DHCPOFFER, содержащий предлагаемый IP-адрес и "время аренды".

Клиент выбирает адрес из полученных пакетов DHCPOFFER. Выбор клиента зависит от его назначения - например, он может выбрать адрес с наибольшим временем аренды. Вслед за тем клиент посылает пакет DHCPREQUEST с адресом выбранного сервера.

Выбранный сервер посылает подтверждение (DHCPACK), и процесс согласования завершается. Пакет DHCPACK содержит оговоренные адрес и время аренды. Сервер помечает выделенный адрес как занятый - до окончания срока аренды этот адрес не может быть присвоен другому клиенту. Клиенту осталось только сконфигурировать себя в соответствии с назначенным адресом и можно приступать к работе в сети.

Итак, на запрос DHCPDISCOVER может ответить несколько серверов. Клиент должен выбрать одно из предложений и послать в ответ пакет DHCPREQUEST с идентификатором выбранного сервера. Другие серверы просматривают пакет DHCPREQUEST и заключают на основе идентификатора сервера, что их предложение было отвергнуто. Таким образом, они знают, что предложенные ими IP-адреса свободны для назначения другим клиентам.

Как упоминалось выше, выбранный сервер завершает согласование отсылкой пакета DHCPACK. В случае если сервер не может принять конфигурацию, он посылает пакет DHCPNAK (отказ в подтверждении), что вынуждает клиента начать процесс согласования заново.

Исходя из этого, если в сети два DHCP-сервера с разными конфигурациями, нету никакой гарантии, что клиент выберет именно ваш сервер.

Re: DHCP-сервер в сети: если неохота бегать от компьютера к ...

В конфиге ошибка
# *** Глобальные параметры *** #

# Какое доменное имя будем присваивать хостам
option domain-name "domain.com";

# Описываем сроки аренды адреса
default-lease-time 304400;
max-lease-time 604800;

# Делаем наш сервер "авторитетным" для обслуживаемых сетей
authoritative;

# Указываем, что мы не используем динамически обновляемые ДНС
ddns-update-style none;

# Указываем, как поступать серверу с неизвестными клиентами. В моем случае им будет
# отказано в обслуживании
deny unknown-clients;

# *** Описываем подсети *** #

# Задаем подсеть
subnet 10.16.32.0 netmask 255.255.255.0 {

# Описываем диапазон, из которого будем выдавать IP
range 10.16.32.2 10.16.32.254;

# Указываем ДНС-сервера
option domain-name-servers ns1.domain.com, ns2.domain.com;

# Указываем шлюз для сети
option routers 10.16.32.1;

# Описываем отдельные хосты
host User32-1 { hardware ethernet 00:0e:2e:a6:9f:ef; fixed-address 10.16.32.2; }
host User32-2 { hardware ethernet 00:1f:c6:d9:a3:e3; fixed-address 10.16.32.3; }
}
Скобка должна закрываться перед описанием хостов
В версии 4.2

Re: DHCP-сервер в сети: если неохота бегать от компьютера к ...

Исправил.

Сам уже давно использую пулы, которые как раз и вписываются в секцию subnet. А этот конфиг "перекочевал" еще с 3 ветки, где все работало в такой конфигурации.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература