dhcpd (Русский) - ArchWiki

Jump to content

Ссылки по теме

- dhcpcd (Русский)

Состояние перевода: На этой странице представлен перевод статьи dhcpd. Дата последней синхронизации: 10 июля 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

dhcpd — реализация DHCP-сервера от Internet Systems Consortium. Может использоваться, к примеру, на машине, играющей роль маршрутизатора в локальной сети.

Примечание: dhcpd (DHCP (server) daemon) не следует путать с dhcpcd (DHCP client daemon).

## Установка

Установите пакет dhcp.

## Использование

dhcpd предоставляет два файла юнитов, `dhcpd4.service` и `dhcpd6.service`, с помощью которых можно управлять демоном. Демоны запускаются на всех сетевых интерфейсах для IPv4 и IPv6 соответственно. Альтернативный вариант описан в разделе #Запуск на одном сетевом интерфейсе.

## Настройка

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

    # ip link set up dev eth0
    # ip addr add 139.96.30.100/24 dev eth0 # произвольный адрес для примера

Совет: Обычно для частных сетей используется одна из зарезервированных подсетей, которые гарантированно не будут конфликтовать ни с каким хостом в сети Интернет:

- `192.168/16` (подсеть `192.168.0.0`, маска подсети `255.255.0.0`)
- `172.16/12` (подсеть `172.16.0.0`, маска подсети `255.240.0.0`)
- `10/8` (для больших сетей; подсеть `10.0.0.0`, маска подсети `255.0.0.0`)

Смотрите также RFC 1918.

Автоматическое назначение статического IP при загрузке системы описано в статье Настройка сети#Статический IP-адрес.

Стандартный файл настроек, `dhcpd.conf`, содержит много незакомментированных примеров, поэтому следует переместить его в другое место, например

    # cp /etc/dhcpd.conf /etc/dhcpd.conf.example

и создать на его месте новый.

Минимальная конфигурация может выглядеть следующим образом:

    /etc/dhcpd.conf

    option domain-name-servers 8.8.8.8, 8.8.8.4;
    option subnet-mask 255.255.255.0;
    option routers 139.96.30.100;
    subnet 139.96.30.0 netmask 255.255.255.0 {
      range 139.96.30.150 139.96.30.250;
    }

Если необходимо выдать фиксированный IP-адрес конкретному устройству, можно также указать настройки для отдельного хоста:

    /etc/dhcpd.conf

    option domain-name-servers 8.8.8.8, 8.8.4.4;
    option subnet-mask 255.255.255.0;
    option routers 139.96.30.100;
    subnet 139.96.30.0 netmask 255.255.255.0 {
      range 139.96.30.150 139.96.30.250;
    }
    host macbookpro{
      hardware ethernet 70:56:81:22:33:44;
      fixed-address 139.96.30.199;
    }

Опция `domain-name-servers` содержит адреса DNS-серверов, которые передаются клиентам. В данном примере используются публичные DNS-сервера Google. Если в вашей подсети уже есть DNS-серверы (например, предоставленные провайдером), следует указать их. Если на компьютере уже настроен собственный DNS-сервер, то укажите его адрес (`139.96.30.100` в нашем примере).

Опции `subnet-mask` и `routers` содержат маску подсети и список маршрутизаторов в этой подсети, соответственно. В большинстве случаев для небольших сетей подойдет маска `255.255.255.0`, а в качестве маршрутизатора используется та же машина, на которой настроен DHCP-сервер.

Блоки `subnet` содержат настройки для отдельных подсетей, которые сопоставляются сетевым интерфейсам, на которых запущен dhcpd. В примере определена одна подсеть `139.96.30.0/24` за интерфейсом `eth0`, для которой задан диапазон IP-адресов. Подключаемым клиентам будут присваиваться адреса из этого диапазона.

### Запуск на одном сетевом интерфейсе

Если ваш компьютер уже является частью одной или нескольких сетей, может возникнуть ситуация, когда адреса будут выдаваться в том числе и компьютерам из другой сети. Это можно исправить либо настройками dhcpd, либо запуском в качестве демона с помощью systemctl.

#### Настройки dhcpd

Чтобы исключить конкретный интерфейс, в файле настроек создайте пустой блок `subnet` для этого интерфейса:

    /etc/dhcpd.conf

    # Исключить DHCP из демилитаризованной зоны (192.168.2.0/24)
    subnet 192.168.2.0 netmask 255.255.255.0 {
    }

#### Файл службы

В "комплекте поставки" dhcpd не предусмотрен юнит для запуска на одном интерфейсе, поэтому придётся создать его самостоятельно. Сначала скопируйте существующую службу:

    # cp /usr/lib/systemd/system/dhcpd4.service /etc/systemd/system/dhcpd4@.service

Затем отредактируйте строку ExecStart, добавив в неё спецификатор интерфейса:

    /etc/systemd/system/dhcpd4@.service

    ...
    [Service]
    ...
    ExecStart=/usr/bin/dhcpd -4 -q -cf /etc/dhcpd.conf -pf /run/dhcpd4/dhcpd.pid %I
    ...

Это юнит-шаблон, который привязывает процесс к определённому интерфейсу, например — `dhcpd4@eth0.service`. Здесь eth0 — название сетевого интерфейса; узнать интерфейсы вашей системы можно командой `ip link`.

### Использование для PXE

Настройка для PXE выполняется следующими двумя параметрами:

    /etc/dhcpd.conf

    next-server 192.168.0.2;
    filename "/pxelinux.0";

Эти строки можно указать как в блоке `subnet`, так и в настройках отдельного хоста `host`. `next-server` представляет собой адрес TFTP-сервера, а `filename` — имя образа для загрузки. Подробнее см. PXE.

## Смотрите также

- Документация ISC DHCP

Category:

- DHCP (Русский)