# DHCP сервер pfSense - настройка и статические привязки

> Настройка DHCP-сервера в pfSense - пулы адресов, статические привязки MAC-IP, DHCP Relay, опции DHCP и интеграция с DNS Resolver.

Source: https://opennix.org/docs/pfsense/services/pfsense-dhcp/


DHCP сервер в pfSense обеспечивает автоматическую раздачу IP-адресов клиентам из заранее определённых пулов с передачей параметров сетевой конфигурации - шлюза, DNS-серверов, доменного имени и времени аренды. Сервер настраивается отдельно для каждого интерфейса, что позволяет задавать индивидуальные параметры для различных сегментов сети. pfSense поддерживает два бэкенда DHCP - Kea DHCP (современный, рекомендуемый) и ISC DHCP (устаревший, будет удалён в будущих версиях). Выбор бэкенда осуществляется через **System > Advanced > Networking > Server Backend**.

## Включение DHCP сервера

Настройка DHCP сервера выполняется через **Services > DHCP Server**. Страница конфигурации содержит отдельные вкладки для каждого интерфейса, на котором возможна раздача адресов.

Для активации сервера на конкретном интерфейсе необходимо:

1. Перейти на вкладку требуемого интерфейса (LAN, OPT1 и т.д.)
2. Установить флажок **Enable DHCP server on [interface] interface**
3. Указать диапазон адресного пула
4. Нажать **Save**

> **Внимание**:
>
> DHCP сервер может работать только на интерфейсах со статически назначенным IP-адресом. Если интерфейс настроен на получение адреса по DHCP или PPPoE, включение DHCP сервера на нём невозможно.

## Конфигурация адресного пула

Адресный пул определяет диапазон IP-адресов, которые DHCP сервер раздаёт клиентам. Диапазон задаётся полями **From** (начальный адрес) и **To** (конечный адрес) и должен находиться в пределах подсети интерфейса.

### Основные параметры пула

| Параметр | Описание | Значение по умолчанию |
|---|---|---|
| **Address Pool Range** | Начальный и конечный адреса диапазона | Зависит от подсети |
| **DNS Servers** | До четырёх DNS-серверов для клиентов | IP-адрес интерфейса pfSense |
| **Gateway** | Шлюз по умолчанию для клиентов | IP-адрес интерфейса pfSense |
| **Domain Name** | Доменное имя для формирования FQDN | Системный домен pfSense |
| **Domain Search List** | Список доменов поиска (опция 119) | Не задан |
| **Default Lease Time** | Время аренды при отсутствии запроса от клиента | 7200 секунд (2 часа) |
| **Maximum Lease Time** | Максимально допустимое время аренды | 86400 секунд (24 часа) |
| **WINS Servers** | До двух серверов Windows Internet Name Service | Не задан |

### Дополнительные пулы

В пределах одной подсети допускается создание нескольких адресных пулов через кнопку **Add Address Pool**. Это полезно при необходимости выделить отдельные диапазоны для разных категорий устройств в рамках одного интерфейса - например, один пул для рабочих станций и другой для принтеров с различными параметрами аренды.

### Рекомендации по планированию

При планировании адресного пула следует учитывать несколько практических аспектов:

- Оставлять зарезервированные адреса в начале подсети для шлюза, серверов и сетевого оборудования (например, .1 - .20)
- Выделять отдельный диапазон для статических привязок вне основного пула
- Учитывать возможный рост количества устройств при выборе размера подсети
- Устанавливать время аренды в зависимости от типа устройств: короткое (1-2 часа) для гостевых сетей с высокой ротацией, длительное (8-24 часа) для корпоративных рабочих станций

## Статические привязки

Статические привязки (Static Mappings) обеспечивают назначение фиксированного IP-адреса определённому устройству на основе его MAC-адреса. В отличие от полностью статической настройки на самом устройстве, при статической привязке устройство продолжает использовать DHCP-протокол, но всегда получает один и тот же адрес.

### Создание статической привязки

Для создания привязки необходимо перейти в **Services > DHCP Server**, выбрать интерфейс и в разделе **DHCP Static Mappings** нажать **Add**.

| Поле | Описание | Обязательное |
|---|---|---|
| **MAC Address** | MAC-адрес устройства в формате `aa:bb:cc:dd:ee:ff` | Да |
| **Client Identifier** | Идентификатор клиента по RFC 2132 | Нет |
| **IP Address** | Назначаемый IP-адрес (предпочтительный, не жёсткое резервирование) | Нет |
| **Hostname** | Имя хоста для регистрации в DNS Resolver | Нет |
| **Description** | Описание устройства для администрирования | Нет |
| **ARP Table Static Entry** | Создание статической записи в ARP-таблице | Нет |

> **Внимание**:
>
> Поле IP Address задаёт предпочтительный адрес, а не жёсткое резервирование. Если указанный адрес уже занят, DHCP сервер может назначить другой адрес из пула. Для гарантированного закрепления адреса следует выбирать IP вне основного пула раздачи.

### Практическое применение

Статические привязки рекомендуется использовать для:

- Серверов и сетевого оборудования, которым необходим постоянный адрес для правил файрвола и NAT
- Принтеров и МФУ, настроенных по IP-адресу
- IP-телефонов с привязкой к конкретному номеру
- IoT-устройств, не поддерживающих статическую настройку сети
- Рабочих станций администраторов, требующих фиксированного доступа

### Опция Static ARP

При включении **Static ARP** на уровне интерфейса pfSense создаёт статические записи в ARP-таблице для всех устройств со статическими привязками. Устройства без привязки не смогут взаимодействовать с файрволом через данный интерфейс, даже если настроят IP-адрес вручную. Эта функция обеспечивает дополнительный уровень контроля доступа на канальном уровне.

## Управление неизвестными клиентами

Параметр **Deny unknown clients** определяет поведение DHCP сервера при получении запроса от устройства, не имеющего статической привязки.

| Режим | Поведение |
|---|---|
| **Allow all clients** | Все устройства получают адрес из пула (по умолчанию) |
| **Allow known clients from any interface** | Только устройства со статической привязкой на любом интерфейсе |
| **Allow known clients from only this interface** | Только устройства со статической привязкой на данном интерфейсе |

Режимы ограничения полезны в сценариях с повышенными требованиями к безопасности, когда подключение неавторизованных устройств к сети необходимо исключить. В сочетании с Static ARP это обеспечивает контроль доступа на уровне MAC-адресов.

## DHCP Relay

DHCP Relay используется в ситуациях, когда DHCP сервер расположен в другой подсети. Вместо локальной раздачи адресов pfSense перенаправляет DHCP-запросы клиентов на удалённый сервер и возвращает ответы обратно.

### Настройка DHCP Relay

Конфигурация выполняется через **Services > DHCP Relay**.

1. Установить флажок **Enable DHCP Relay**
2. Указать IP-адрес удалённого DHCP сервера в поле **Destination Server**
3. Выбрать интерфейсы, на которых следует перехватывать DHCP-запросы
4. Нажать **Save**

> **Внимание**:
>
> DHCP Relay и DHCP Server не могут работать одновременно на одном интерфейсе. При включении Relay локальный DHCP сервер на выбранных интерфейсах автоматически деактивируется.

### Сценарии использования

- Централизованный DHCP сервер (Windows Server, ISC DHCP, Infoblox) обслуживает множество подсетей через Relay на pfSense
- Филиальная сеть с единым DHCP сервером в центральном офисе, подключённом через VPN-туннель
- Миграция с выделенного DHCP сервера: на переходном этапе pfSense перенаправляет запросы на существующий сервер

## Дополнительные опции DHCP

pfSense позволяет передавать клиентам расширенные параметры конфигурации через дополнительные опции DHCP.

### Встроенные опции

| Опция | Поле | Описание |
|---|---|---|
| TFTP Server (66) | **TFTP Server** | Адрес TFTP-сервера для IP-телефонов и PXE-загрузки |
| NTP Servers (42) | **NTP Servers** | До четырёх серверов синхронизации времени |
| LDAP URI (95) | **LDAP URI** | URI LDAP-сервера в формате `ldap://ldap.example.com/dc=example,dc=com` |

### Сетевая загрузка (PXE/UEFI)

Для настройки сетевой загрузки необходимо включить **Enable Network Booting** и указать:

| Параметр | Описание |
|---|---|
| **Next Server** | IP-адрес сервера с загрузочными образами |
| **Default BIOS File Name** | Имя файла загрузки для Legacy BIOS |
| **UEFI 32 bit File Name** | Загрузочный файл для 32-битного UEFI |
| **UEFI 64 bit File Name** | Загрузочный файл для 64-битного UEFI |
| **UEFI HTTPBoot URL** | URL загрузочного файла в формате `http://server/path` |
| **Root Path** | Путь к корневому устройству (например, iSCSI target) |

### Пользовательские опции (только ISC DHCP)

Через раздел **Additional BOOTP/DHCP Options** допускается задание произвольных опций DHCP по номеру, типу и значению:

- **Number** - код опции по стандартам IANA
- **Type** - тип данных (Text, String, Boolean, Unsigned Integer 8/16/32, Signed Integer 8/16/32, IP address or hostname)
- **Value** - значение опции

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

### Контроль по MAC-адресу

Расширенные настройки позволяют ограничить обслуживание по MAC-адресам:

- **Allow** - список разрешённых MAC-адресов через запятую; все остальные отклоняются
- **Deny** - список запрещённых MAC-адресов через запятую; все остальные обслуживаются

## DHCPv6 и Router Advertisements

pfSense поддерживает раздачу IPv6-адресов через DHCPv6 и настройку Router Advertisements (RA) для автоконфигурации клиентов.

### Настройка DHCPv6

Конфигурация DHCPv6 выполняется через **Services > DHCPv6 Server & RA**. Для каждого интерфейса доступны две вкладки: **DHCPv6 Server** и **Router Advertisements**.

Основные параметры DHCPv6 аналогичны DHCPv4:

- Диапазон адресов (Range)
- DNS-серверы для IPv6
- Доменное имя
- Время аренды (Preferred и Valid Lifetime)
- Статические привязки по DUID (DHCPv6 Unique Identifier)

### Router Advertisements

Router Advertisements определяют способ получения IPv6-адресов клиентами.

| Режим RA | Описание |
|---|---|
| **Managed** | Клиенты получают адреса только через DHCPv6 |
| **Assisted** | Клиенты используют SLAAC для адреса и DHCPv6 для остальных параметров |
| **Unmanaged** | Клиенты используют только SLAAC, DHCPv6 не применяется |
| **Disabled** | RA отключены |

> **Внимание**:
>
> Режим Router Advertisements необходимо согласовать с настройками DHCPv6. При выборе **Unmanaged** сервер DHCPv6 не будет обрабатывать запросы на назначение адресов, даже если он включён.

## Интеграция с DNS

DHCP сервер pfSense поддерживает автоматическую регистрацию имён хостов в DNS Resolver (Unbound). При получении DHCP-запроса с именем хоста сервер создаёт соответствующую DNS-запись, позволяя обращаться к устройствам по имени вместо IP-адреса.

### Включение DNS-регистрации

Автоматическая регистрация настраивается в DNS Resolver (**Services > DNS Resolver**):

- **DHCP Registration** - регистрация имён хостов динамических клиентов
- **Static DHCP** - регистрация имён хостов из статических привязок

Подробная настройка DNS Resolver описана в разделе [DNS в pfSense](/docs/pfsense/services/pfsense-dns/).

### Dynamic DNS (только ISC DHCP)

При использовании бэкенда ISC DHCP доступна регистрация хостов на внешнем DNS-сервере через протокол Dynamic DNS:

- **DDNS Domain** - домен для регистрации клиентов
- **Primary/Secondary DDNS Address** - адреса DNS-серверов для обновления записей
- **DNS Domain Key Name и Secret** - учётные данные для аутентификации обновлений
- **DDNS Client Updates** - политика обработки запросов клиентов на обновление DNS (Allow, Deny, Ignore)

## Просмотр выданных аренд

Список текущих DHCP-аренд доступен через **Status > DHCP Leases**. Страница отображает:

- IP-адрес и MAC-адрес клиента
- Имя хоста (если передано клиентом)
- Время начала и окончания аренды
- Тип аренды (dynamic или static)
- Онлайн-статус устройства

Из этого списка можно создать статическую привязку для любого активного клиента, нажав кнопку **Add Static Mapping** рядом с соответствующей записью. Также доступна функция Wake on LAN для устройств с поддержкой удалённого пробуждения.

## Диагностика проблем

### Клиент не получает IP-адрес

1. Убедиться, что DHCP сервер включён на соответствующем интерфейсе (**Services > DHCP Server**)
2. Проверить, что IP-адрес интерфейса pfSense настроен статически
3. Убедиться, что адресный пул не исчерпан (**Status > DHCP Leases**)
4. Проверить, не включён ли режим **Deny unknown clients** для устройства без статической привязки
5. Проверить правила файрвола - DHCP использует порты UDP 67 (сервер) и UDP 68 (клиент)
6. Просмотреть системный журнал: **Status > System Logs > DHCP**

### Клиент получает адрес из неверного пула

1. Проверить, что клиент подключён к корректному интерфейсу или VLAN
2. Убедиться, что диапазоны основного и дополнительных пулов не пересекаются
3. При наличии статической привязки проверить, что указанный адрес находится в пределах подсети интерфейса

### DHCP Relay не работает

1. Убедиться, что DHCP сервер отключён на интерфейсах, используемых для Relay
2. Проверить маршрутизацию до удалённого DHCP сервера с помощью **Diagnostics > Ping**
3. Убедиться, что правила файрвола разрешают DHCP-трафик (UDP 67/68) между pfSense и удалённым сервером
4. При использовании VPN-туннеля убедиться, что подсеть DHCP сервера доступна через туннель

### Конфликт IP-адресов

1. Проверить, не назначен ли адрес статически на другом устройстве
2. Убедиться, что адреса статических привязок не входят в диапазон динамического пула
3. Включить **Ping Check** (только ISC DHCP) для проверки доступности адреса перед назначением

## Миграция с других платформ

### Миграция с Cisco IOS DHCP

В Cisco IOS пулы DHCP настраиваются глобально с привязкой к подсети. В pfSense каждый пул привязан к конкретному интерфейсу.

| Cisco IOS | pfSense |
|---|---|
| `ip dhcp pool VLAN10` | Вкладка интерфейса в Services > DHCP Server |
| `network 192.168.10.0 255.255.255.0` | Определяется подсетью интерфейса |
| `default-router 192.168.10.1` | **Gateway** |
| `dns-server 8.8.8.8` | **DNS Servers** |
| `domain-name corp.local` | **Domain Name** |
| `lease 0 8` | **Default Lease Time** (в секундах) |
| `ip dhcp excluded-address` | Исключить адреса из диапазона пула |
| `host 192.168.10.50` + `hardware-address` | **Static Mappings** |

### Миграция с FortiGate

В FortiGate DHCP сервер привязан к интерфейсу аналогично pfSense. Основные различия:

- FortiGate использует MAC Access Control List - в pfSense аналог реализуется через **Allow/Deny MAC** в расширенных опциях
- Резервирования адресов в FortiGate задаются через `config reserved-address` - в pfSense используются Static Mappings
- FortiGate поддерживает DHCP snooping на аппаратном уровне - pfSense реализует контроль через Static ARP

### Миграция с MikroTik

В MikroTik DHCP сервер, пул и сетевые параметры настраиваются как отдельные объекты. В pfSense все параметры объединены на одной странице интерфейса.

| MikroTik | pfSense |
|---|---|
| `/ip dhcp-server add` | Включение DHCP на интерфейсе |
| `/ip pool add ranges=` | **Address Pool Range** |
| `/ip dhcp-server network add` | DNS, Gateway, Domain в настройках пула |
| `/ip dhcp-server lease add` | **Static Mappings** |
| `always-broadcast=yes` | Настраивается в дополнительных опциях |

## Связанные разделы

- [DNS в pfSense](/docs/pfsense/services/pfsense-dns/) - настройка DNS Resolver для регистрации DHCP-хостов
- [Настройка VLAN](/docs/pfsense/vlans/pfsense-vlan-setup/) - создание VLAN-интерфейсов с индивидуальной конфигурацией DHCP
- [CARP и Virtual IPs](/docs/pfsense/high-availability/pfsense-carp-setup/) - использование CARP VIP в качестве шлюза для отказоустойчивого DHCP

