27.5. Автоматическая настройка сети (DHCP)
Пред. | Глава 27. Сетевые серверы | След.

## 27.5. Автоматическая настройка сети (DHCP)

Текст написал Greg Sutter.

### 27.5.1. Что такое DHCP?

DHCP, или Dynamic Host Configuration Protocol (Протокол Динамической Конфигурации Хостов), описывает порядок, по которому система может подключиться к сети и получить необходимую информацию для работы в ней. Во FreeBSD используется `dhclient`, импортированный из OpenBSD 3.7. Вся информация здесь, относительно `dhclient` относится либо к ISC, либо к DHCP клиентам. DHCP сервер включён в ISC дистрибутив.

### 27.5.2. Что описывается в этом разделе

В этом разделе описываются, как компоненты клиентской части ISC или OpenBSD DHCP клиента, так и компоненты ISC DHCP системы со стороны сервера. Программа, работающая на клиентской стороне, `dhclient`, интегрирована в поставку FreeBSD, а серверная часть доступна в виде порта `net/isc-dhcp42-server`. Кроме ссылок ниже, много полезной информации находится на страницах справочной системы, описывающих dhclient(8), dhcp-options(5) и dhclient.conf(5).

### 27.5.3. Как это работает

Когда на клиентской машине выполняется программа `dhclient`, являющаяся клиентом DHCP, она начинает широковещательную рассылку запросов на получение настроечной информации. По умолчанию эти запросы делаются на 68 порт UDP. Сервер отвечает на UDP 67, выдавая клиенту адрес IP и другую необходимую информацию, такую, как сетевую маску, маршрутизатор и серверы DNS. Вся эта информация даётся в форме «аренды» DHCP и верна только определенное время (что настраивается администратором сервера DHCP). При таком подходе устаревшие адреса IP тех клиентов, которые больше не подключены к сети, могут автоматически использоваться повторно.

Клиенты DHCP могут получить от сервера очень много информации. Подробный список находится в странице Справочника dhcp-options(5).

### 27.5.4. Интеграция с FreeBSD

DHCP клиент от OpenBSD, `dhclient`, полностью интегрирован во FreeBSD. Поддержка клиента DHCP есть как в программе установки, так и в самой системе, что исключает необходимость в знании подробностей конфигурации сети в любой сети, имеющей сервер DHCP.

DHCP поддерживается утилитой sysinstall. При настройке сетевого интерфейса из программы sysinstall второй вопрос, который вам задается: «Do you want to try DHCP configuration of the interface?» («Хотите ли вы попробовать настроить этот интерфейс через DHCP?»). Утвердительный ответ приведёт к запуску программы `dhclient`, и при удачном его выполнении к автоматическому заданию информации для настройки интерфейса.

Есть две вещи, которые вы должны сделать для того, чтобы ваша система использовала DHCP при загрузке:

- Убедитесь, что устройство `bpf` включено в компиляцию вашего ядра. Чтобы это сделать, добавьте строчку `device bpf` в конфигурационный файл ядра и перестройте ядро. Более подробная информация о построении ядер имеется в Глава 9, Настройка ядра FreeBSD.

  Устройство `bpf` уже является частью ядра `GENERIC`, которое поставляется вместе с FreeBSD, так что, если вы не используете другое ядро, то вам и не нужно его делать для того, чтобы работал DHCP.

  ### Примечание:

  Те, кто беспокоится о безопасности, должны иметь в виду, что устройство `bpf` является также тем самым устройством, которое позволяет работать программам-снифферам пакетов (хотя для этого они должны быть запущены пользователем `root`). Наличие устройства `bpf` необходимо для использования DHCP, но если вы чересчур беспокоитесь о безопасности, то вам нельзя добавлять устройство `bpf` в ядро только для того, чтобы в неопределённом будущем использовать DHCP.

- По умолчанию, конфигурирование FreeBSD по протоколу DHCP выполняется фоновым процессом, или асинхронно. Остальные стартовые скрипты продолжают работу не ожидая завершения процесса конфигурирования, тем самым ускоряя загрузку системы.

  Фоновое конфигурирование не создает проблем в случае, если сервер DHCP быстро отвечает на запросы, и процесс конфигурирования происходит быстро. Однако, в некоторых случаях настройка по DHCP может длиться значительное время. При этом запуск сетевых сервисов может потерпеть неудачу, если будет произведен ранее завершения конфигурирования по DHCP. Запуск DHCP в синхронном режиме предотвращает проблему, откладывая выполнение остальных стартовых скриптов до момента завершения конфигурирования по DHCP.

  Для осуществления фонового конфигурирования по DHCP (асинхронный режим), используйте значение «`DHCP`» в `/etc/rc.conf`:

  ifconfig_`fxp0`="DHCP"

  Для откладывания запуска стартовых скриптов до завершения конфигурирования по DHCP (синхронный режим), укажите значение «`SYNCDHCP`»:

  ifconfig_`fxp0`="SYNCDHCP"

  ### Примечание:

  Замените используемое в этих примерах имя `fxp0` на имя интерфейса, который необходимо сконфигурировать динамически, как это описано в Раздел 12.8, «Настройка карт сетевых интерфейсов».

  Если `dhclient` в вашей системе находится в другом месте или если вы хотите задать дополнительные параметры для `dhclient`, то также укажите следующее (изменив так, как вам нужно):

  dhclient_program="/sbin/dhclient" dhclient_flags=""

Сервер DHCP, dhcpd, включён как часть порта `net/isc-dhcp42-server` в коллекцию портов. Этот порт содержит DHCP-сервер от ISC и документацию.

### 27.5.5. Файлы

- `/etc/dhclient.conf`

  `dhclient` требует наличия конфигурационного файла, `/etc/dhclient.conf`. Как правило, файл содержит только комментарии, а настройки по умолчанию достаточно хороши. Этот настроечный файл описан на страницах справочной системы по dhclient.conf(5).

- `/sbin/dhclient`

  `dhclient` скомпонован статически и находится в каталоге `/sbin`. На страница Справочника dhclient(8) дается более подробная информация о `dhclient`.

- `/sbin/dhclient-script`

  `dhclient-script` является специфичным для FreeBSD скриптом настройки клиента DHCP. Он описан в dhclient-script(8), но для нормального функционирования никаких модификаций со стороны пользователя не требуется.

- `/var/db/dhclient.leases`

  В этом файле клиент DHCP хранит базу данных выданных к использованию адресов в виде журнала. На странице dhclient.leases(5) дается гораздо более подробное описание.

### 27.5.6. Дополнительная литература

Полное описание протокола DHCP дается в RFC 2131. Кроме того, дополнительная информация есть на сервере http://www.dhcp.org/.

### 27.5.7. Установка и настройка сервера DHCP

#### 27.5.7.1. Чему посвящён этот раздел

Этот раздел даёт информацию о том, как настроить систему FreeBSD для работы в качестве сервера DHCP на основе реализации пакета DHCP от ISC (Internet Systems Consortium).

Серверная часть пакета не поставляется как часть FreeBSD, так что вам потребуется установить порт `net/isc-dhcp42-server` для получения этого сервиса. Обратитесь к Глава 5, Установка приложений: порты и пакеты для получения более полной информации об использовании коллекции портов.

#### 27.5.7.2. Установка сервера DHCP

Для того, чтобы настроить систему FreeBSD на работу в качестве сервера DHCP, вам необходимо обеспечить присутствие устройства bpf(4), вкомпилированного в ядро. Для этого добавьте строку `device bpf` в файл конфигурации вашего ядра. Для получения более полной информации о построении ядер, обратитесь к Глава 9, Настройка ядра FreeBSD.

Устройство `bpf` уже входит в состав ядра `GENERIC`, поставляемого с FreeBSD, так что вам не нужно создавать собственное ядро для обеспечения работы DHCP.

### Примечание:

Те, кто обращает особое внимание на вопросы безопасности, должны заметить, что `bpf` является тем устройством, что позволяет нормально работать снифферам пакетов (хотя таким программам требуются привилегированный доступ). Наличие устройства `bpf` обязательно для использования DHCP, но если вы очень обеспокоены безопасностью, наверное, вам не нужно включать `bpf` в ваше ядро только потому, что в отдалённом будущем вы собираетесь использовать DHCP.

Следующим действием, которое вам нужно выполнить, является редактирование примерного `dhcpd.conf`, который устанавливается в составе порта `net/isc-dhcp42-server`. По умолчанию это файл `/usr/local/etc/dhcpd.conf.sample`, и вы должны скопировать его в файл `/usr/local/etc/dhcpd.conf` перед тем, как его редактировать.

#### 27.5.7.3. Настройка сервера DHCP

`dhcpd.conf` состоит из деклараций относительно подсетей и хостов, и проще всего описывается на примере:

option domain-name "example.com"; option domain-name-servers 192.168.4.100; option subnet-mask 255.255.255.0; default-lease-time 3600; max-lease-time 86400; ddns-update-style none; subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.129 192.168.4.254; option routers 192.168.4.1; } host mailhost { hardware ethernet 02:03:04:05:06:07; fixed-address mailhost.example.com; }

| Этот параметр задаёт домен, который будет выдаваться клиентам в качестве домена, используемого по умолчанию при поиске. Обратитесь к страницам справочной системы по resolv.conf(5) для получения дополнительной информации о том, что это значит.
| Этот параметр задаёт список разделённых запятыми серверов DNS, которые должен использовать клиент.
| Маска сети, которая будет выдаваться клиентам.
| Клиент может запросить определённое время, которое будет действовать выданная информация. В противном случае сервер выдаст настройки с этим сроком (в секундах).
| Это максимальное время, на которое сервер будет выдавать конфигурацию. Если клиент запросит больший срок, он будет подтверждён, но будет действовать только `max-lease-time` секунд.
| Этот параметр задаёт, будет ли сервер DHCP пытаться обновить DNS при выдаче или освобождении конфигурационной информации. В реализации ISC этот параметр является обязательным.
| Это определение того, какие IP-адреса должны использоваться в качестве резерва для выдачи клиентам. IP-адреса между и включая границы, будут выдаваться клиентам.
| Объявление маршрутизатора, используемого по умолчанию, который будет выдаваться клиентам.
| Аппаратный MAC-адрес хоста (чтобы сервер DHCP мог распознать хост, когда тот делает запрос).
| Определение того, что хосту всегда будет выдаваться один и тот же IP-адрес. Заметьте, что указание здесь имени хоста корректно, так как сервер DHCP будет разрешать имя хоста самостоятельно до того, как выдать конфигурационную информацию.

Когда вы закончите составлять свой `dhcpd.conf`, нужно разрешить запуск сервера DHCP в файле `/etc/rc.conf`, добавив в него строки

dhcpd_enable="YES" dhcpd_ifaces="dc0"

Замените `dc0` именем интерфейса (или именами интерфейсов, разделяя их пробелами), на котором(ых) сервер DHCP должен принимать запросы от клиентов.

Затем вы можете стартовать сервер DHCP при помощи команды

`#` `/usr/local/etc/rc.d/isc-dhcpd start`

Если в будущем вам понадобится сделать изменения в настройке вашего сервера, то важно заметить, что посылка сигнала `SIGHUP` приложению dhcpd не приведёт к перезагрузке настроек, как это бывает для большинства даемонов. Вам нужно послать сигнал `SIGTERM` для остановки процесса, а затем перезапустить его при помощи вышеприведённой команды.

#### 27.5.7.4. Файлы

- `/usr/local/sbin/dhcpd`

  dhcpd скомпонован статически и расположен в каталоге `/usr/local/sbin`. Страницы справочной системы dhcpd(8), устанавливаемые портом, содержат более полную информацию о dhcpd.

- `/usr/local/etc/dhcpd.conf`

  dhcpd требует наличия конфигурационного файла, `/usr/local/etc/dhcpd.conf`, до того, как он будет запущен и начнёт предоставлять сервис клиентам. Необходимо, чтобы этот файл содержал все данные, которая будет выдаваться обслуживаемым клиентам, а также информацию о работе сервера. Этот конфигурационный файл описывается на страницах справочной системы dhcpd.conf(5), которые устанавливаются портом.

- `/var/db/dhcpd.leases`

  Сервер DHCP ведёт базу данных выданной информации в этом файле, который записывается в виде протокола. Страницы справочной системы dhcpd.leases(5), устанавливаемые портом, дают гораздо более подробное описание.

- `/usr/local/sbin/dhcrelay`

  dhcrelay используется в сложных ситуациях, когда сервер DHCP пересылает запросы от клиента другому серверу DHCP в отдельной сети. Если вам нужна такая функциональность, то установите порт `net/isc-dhcp42-relay`. На страницах справочной системы dhcrelay(8), которые устанавливаются портом, даётся более полное описание.

Пред. | Наверх | След.
27.4. Network Information System (NIS/YP) | Начало | 27.6. Domain Name System (DNS)

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.