Руководство FreeBSD
Пред. | Глава 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.

  Устройство `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.

Устройство `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), которые устанавливаются портом, даётся более полное описание.

Пред. | Начало | След.
Network Information System (NIS/YP) | Уровень выше | Domain Name System (DNS)

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

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