# DNS в pfSense - Resolver, Forwarder и переопределения

> Настройка DNS в pfSense - Unbound DNS Resolver, DNS Forwarder (dnsmasq), переопределение хостов, DNSSEC и интеграция с DHCP

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


pfSense предоставляет два встроенных DNS-сервиса для разрешения доменных имён - DNS Resolver на основе Unbound и DNS Forwarder на основе dnsmasq. Оба сервиса обеспечивают кэширование DNS-запросов, переопределение записей и интеграцию с DHCP, однако различаются архитектурой и областью применения. DNS Resolver является рекомендуемым решением и включён по умолчанию в актуальных версиях pfSense. DNS Forwarder следует использовать только в специфических сценариях, когда требуется одновременный опрос нескольких DNS-серверов.

## DNS Resolver и DNS Forwarder - сравнение

Перед настройкой необходимо определить, какой из сервисов соответствует требованиям инфраструктуры.

| Характеристика | DNS Resolver (Unbound) | DNS Forwarder (dnsmasq) |
|---|---|---|
| Режим работы | Рекурсивный резолвер или форвардер | Только форвардер |
| DNSSEC | Поддерживается | Не поддерживается |
| DNS over TLS | Поддерживается | Не поддерживается |
| Кэширование | Да | Да |
| Переопределение хостов | Да | Да |
| Переопределение доменов | Да | Да |
| Регистрация DHCP-хостов | Да | Да |
| Параллельный опрос DNS-серверов | Нет (последовательно) | Да (все серверы одновременно) |
| Включён по умолчанию | Да | Нет |

> **Внимание**:
>
> Два DNS-сервиса не могут работать одновременно на одном порту. При включении одного сервиса второй необходимо отключить или назначить ему альтернативный порт.

### Когда использовать DNS Resolver

DNS Resolver (Unbound) является предпочтительным выбором в большинстве сценариев:

- Стандартная корпоративная или домашняя сеть с потребностью в DNSSEC
- Среды, требующие шифрования DNS-запросов через DNS over TLS
- Инфраструктура с необходимостью прямого рекурсивного разрешения без зависимости от внешних форвардеров
- Сети с интеграцией DHCP-регистрации и локальных DNS-записей

### Когда использовать DNS Forwarder

DNS Forwarder (dnsmasq) оправдан в ограниченном числе ситуаций:

- Multi-WAN конфигурации, где параллельный опрос DNS-серверов через все каналы обеспечивает более быстрый ответ
- Среды с нестабильными или высоколатентными DNS-серверами, где параллельный запрос снижает задержку
- Совместимость с устаревшими конфигурациями, ранее использовавшими dnsmasq

## Настройка DNS Resolver

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

### Общие параметры

| Параметр | Описание | Значение по умолчанию |
|---|---|---|
| **Enable** | Включение DNS Resolver | Включён |
| **Listen Port** | Порт прослушивания (TCP/UDP) | 53 |
| **Network Interfaces** | Интерфейсы для приёма запросов | Все интерфейсы |
| **Outgoing Network Interfaces** | Интерфейсы для отправки запросов | Все интерфейсы |
| **System Domain Local Zone Type** | Тип зоны для системного домена | Transparent |
| **DNSSEC** | Проверка подлинности DNS-ответов | Включён |
| **DNS Query Forwarding** | Режим пересылки вместо рекурсии | Отключён |
| **DHCP Registration** | Регистрация DHCP-хостов в DNS | Отключён |
| **Static DHCP** | Регистрация статических привязок DHCP | Отключён |
| **OpenVPN Clients** | Регистрация OpenVPN-клиентов | Отключён |

### Режим работы - Resolver и Forwarding

По умолчанию DNS Resolver работает в режиме рекурсивного резолвера - он самостоятельно обращается к корневым DNS-серверам и последовательно проходит по цепочке делегирования до получения ответа. Этот режим не зависит от внешних форвардеров и обеспечивает полную проверку DNSSEC.

При включении **DNS Query Forwarding** Resolver переходит в режим форвардера - запросы пересылаются на DNS-серверы, указанные в **System > General Setup** или полученные автоматически от провайдера. Режим пересылки полезен, когда:

- Корпоративная политика требует использования определённых DNS-серверов
- Провайдер блокирует прямые DNS-запросы к корневым серверам
- Необходимо использовать DNS-серверы с фильтрацией контента (OpenDNS, Cloudflare for Families)

> **Внимание**:
>
> При включении DNS Query Forwarding в сочетании с DNSSEC следует убедиться, что вышестоящие DNS-серверы поддерживают DNSSEC. В противном случае валидация завершится ошибкой, и легитимные запросы будут отклоняться.

### SSL/TLS Service (DNS over TLS)

DNS Resolver поддерживает приём зашифрованных запросов от клиентов через DNS over TLS на порту 853. Для включения необходимо:

1. Установить флажок **SSL/TLS Service** в настройках DNS Resolver
2. Убедиться, что на pfSense настроен валидный сертификат
3. Настроить клиентские устройства для использования pfSense в качестве DoT-сервера

### Исходящий DNS over TLS

Для шифрования исходящих DNS-запросов от pfSense к вышестоящим серверам необходимо:

1. Включить **DNS Query Forwarding**
2. Установить флажок **Use SSL/TLS for outgoing DNS Queries to Forwarding Servers**
3. Указать DNS-серверы с поддержкой DoT в **System > General Setup** (например, 1.1.1.1, 8.8.8.8, 9.9.9.9)

Шифрование исходящих запросов предотвращает перехват DNS-трафика провайдером или промежуточными узлами.

## Переопределение хостов (Host Overrides)

Host Overrides позволяют создавать локальные DNS-записи, перенаправляющие разрешение конкретных имён хостов на указанные IP-адреса. Это аналог записей в файле `/etc/hosts`, но на уровне DNS-сервера для всей сети.

### Создание записи

Настройка выполняется в разделе **Host Overrides** на странице **Services > DNS Resolver**.

| Поле | Описание | Пример |
|---|---|---|
| **Host** | Имя хоста (без домена) | `intranet` |
| **Domain** | Доменное имя | `corp.local` |
| **IP Address** | IPv4 или IPv6 адрес | `192.168.1.100` |
| **Description** | Описание записи | `Corporate intranet server` |

Результирующая DNS-запись: `intranet.corp.local` -> `192.168.1.100`

### Дополнительные имена (Aliases)

Для каждого Host Override допускается добавление альтернативных имён через раздел **Additional Names for this Host**. Это эквивалент CNAME-записей, позволяющий нескольким именам указывать на один адрес.

### Типичные сценарии

- Перенаправление внутреннего трафика к публичным сервисам компании на локальные серверы (split DNS / hairpin NAT)
- Создание коротких имён для часто используемых ресурсов внутренней сети
- Блокировка доступа к определённым доменам (перенаправление на 127.0.0.1)
- Тестирование веб-приложений с подменой DNS-записей без изменения публичного DNS

## Переопределение доменов (Domain Overrides)

Domain Overrides перенаправляют DNS-запросы для определённых доменов на указанные DNS-серверы. В отличие от Host Overrides, которые задают конкретные IP-адреса, Domain Overrides определяют сервер, ответственный за разрешение всех записей в домене.

### Создание записи

Настройка выполняется в разделе **Domain Overrides** на странице **Services > DNS Resolver**.

| Поле | Описание | Пример |
|---|---|---|
| **Domain** | Доменное имя для перенаправления | `internal.corp.com` |
| **IP Address** | Адрес DNS-сервера для этого домена | `10.0.0.53` |
| **TLS Queries** | Использовать DNS over TLS при обращении | Нет |
| **TLS Hostname** | Имя хоста для проверки TLS-сертификата | - |
| **Description** | Описание правила | `Internal AD DNS` |

### Типичные сценарии

- Перенаправление запросов к домену Active Directory на контроллеры домена
- Разрешение зон внутренней инфраструктуры через выделенные DNS-серверы
- Интеграция с DNS-серверами филиальных офисов через VPN
- Перенаправление обратных DNS-зон (in-addr.arpa) на авторитетные серверы

## DNSSEC

DNSSEC (Domain Name System Security Extensions) обеспечивает проверку подлинности и целостности DNS-ответов с помощью криптографических подписей. DNS Resolver в pfSense поддерживает валидацию DNSSEC по умолчанию.

### Принцип работы

При включённом DNSSEC Resolver проверяет цепочку доверия от корневых серверов до запрашиваемого домена. Если подпись DNS-ответа не проходит проверку, ответ отклоняется и клиент получает ошибку SERVFAIL. Это защищает от:

- DNS spoofing (подмена DNS-ответов)
- Cache poisoning (отравление кэша DNS)
- Man-in-the-middle атак на уровне DNS

### Ограничения DNSSEC

Не все домены подписаны DNSSEC. При обращении к домену без DNSSEC-подписи валидация пропускается, и ответ обрабатывается обычным образом.

При использовании DNS Query Forwarding вышестоящие серверы должны поддерживать передачу DNSSEC-записей (DO bit). Большинство публичных DNS-серверов (Google DNS, Cloudflare, Quad9) корректно обрабатывают DNSSEC.

### Диагностика DNSSEC

Для проверки работоспособности DNSSEC следует выполнить запрос к заведомо подписанному домену через **Diagnostics > DNS Lookup**:

- `dnssec-failed.org` - домен с намеренно некорректной подписью; при работающем DNSSEC запрос должен завершиться ошибкой
- `dnssec.works` - домен с корректной подписью; запрос должен успешно разрешиться

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

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

### Настройка регистрации

В разделе **Services > DNS Resolver** доступны следующие опции:

| Параметр | Описание |
|---|---|
| **DHCP Registration** | Регистрация имён динамических DHCP-клиентов |
| **Static DHCP** | Регистрация имён из статических привязок DHCP |
| **OpenVPN Clients** | Регистрация Common Name подключённых OpenVPN-клиентов |

При включении DHCP Registration клиент, запросивший адрес с именем хоста `workstation1` в домене `corp.local`, автоматически получает DNS-запись `workstation1.corp.local`, указывающую на его DHCP-адрес.

### Требования

- DHCP сервер и DNS Resolver должны работать на одном экземпляре pfSense
- Клиент должен передавать имя хоста в DHCP-запросе (большинство ОС делают это по умолчанию)
- Системный домен pfSense должен быть корректно настроен в **System > General Setup**

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

## Списки доступа (Access Lists)

Списки доступа DNS Resolver определяют, какие клиенты имеют право отправлять DNS-запросы.

### Создание списка доступа

Настройка выполняется через вкладку **Access Lists** на странице **Services > DNS Resolver**.

| Поле | Описание |
|---|---|
| **Access List Name** | Название правила |
| **Action** | Действие: Allow, Deny, Refuse, Allow Snoop |
| **Networks** | Подсети, к которым применяется правило |
| **Description** | Описание правила |

### Действия

| Действие | Поведение |
|---|---|
| **Allow** | Разрешить рекурсивные запросы |
| **Deny** | Отбросить запрос без ответа |
| **Refuse** | Отклонить запрос с ответом REFUSED |
| **Allow Snoop** | Разрешить все запросы, включая нерекурсивные (для диагностики) |

По умолчанию DNS Resolver разрешает запросы со всех подсетей, назначенных интерфейсам pfSense. Дополнительные списки доступа необходимы при обслуживании клиентов из подсетей, не привязанных напрямую к интерфейсам (например, клиентов за вышестоящим маршрутизатором).

## Настройка DNS Forwarder

DNS Forwarder настраивается через **Services > DNS Forwarder**. Перед включением необходимо отключить DNS Resolver или назначить ему другой порт.

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

| Параметр | Описание |
|---|---|
| **Enable** | Включение DNS Forwarder |
| **Network Interfaces** | Интерфейсы для приёма запросов |
| **Query DNS servers sequentially** | Последовательный опрос вместо параллельного |

По умолчанию DNS Forwarder отправляет запрос на все настроенные DNS-серверы одновременно и использует первый полученный ответ. Это обеспечивает минимальную задержку, но создаёт дополнительный трафик. При включении **Query DNS servers sequentially** серверы опрашиваются последовательно.

DNS-серверы для пересылки берутся из **System > General Setup** и из параметров, автоматически полученных от провайдера (DHCP, PPPoE).

### Host Overrides и Domain Overrides

DNS Forwarder поддерживает те же функции переопределения хостов и доменов, что и DNS Resolver. Синтаксис и логика работы аналогичны описанным выше.

## Расширенные настройки Unbound

Вкладка **Advanced Settings** позволяет передавать произвольные директивы конфигурации Unbound через текстовое поле **Custom Options**. Эта функция предназначена для опытных администраторов и позволяет:

- Настроить нестандартные параметры кэширования
- Определить частные домены (private-domain)
- Задать локальные зоны и записи
- Изменить параметры производительности (num-threads, msg-cache-size, rrset-cache-size)

Пример добавления локальной зоны:

```text
server:
local-zone: "internal.example.com" static
local-data: "server1.internal.example.com A 10.0.0.10"
local-data: "server2.internal.example.com A 10.0.0.11"
```

> **Внимание**:
>
> Некорректные директивы в Custom Options приведут к ошибке запуска DNS Resolver. Перед сохранением рекомендуется проверить синтаксис конфигурации.

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

### DNS не разрешает имена

1. Проверить, что DNS Resolver или Forwarder включён (**Services > DNS Resolver** или **Services > DNS Forwarder**)
2. Убедиться, что клиент использует IP-адрес pfSense в качестве DNS-сервера
3. Выполнить тестовый запрос через **Diagnostics > DNS Lookup**
4. Проверить, что вышестоящие DNS-серверы доступны (**System > General Setup**)
5. Просмотреть журнал: **Status > System Logs > Resolver** (или **Forwarder**)
6. Проверить правила файрвола - DNS использует порты TCP/UDP 53

### Медленное разрешение DNS

1. В режиме Resolver - проверить доступность корневых DNS-серверов; при необходимости переключиться в режим Forwarding
2. В режиме Forwarding - проверить задержку до вышестоящих серверов через **Diagnostics > Ping**
3. Рассмотреть включение DNS over TLS - шифрование добавляет незначительную задержку, но предотвращает перехват
4. Проверить размер кэша - при частых одинаковых запросах увеличение кэша через Advanced Settings снижает задержку

### Ошибки DNSSEC

1. Убедиться, что системное время pfSense корректно синхронизировано (DNSSEC-подписи содержат временные метки)
2. Проверить, поддерживают ли вышестоящие DNS-серверы DNSSEC (при использовании Forwarding)
3. Протестировать с доменом `dnssec-failed.org` - если он разрешается, DNSSEC не функционирует
4. Временно отключить DNSSEC для изоляции проблемы: если без DNSSEC разрешение работает, причина в цепочке доверия

### Host Override не работает

1. Проверить, что домен в Host Override совпадает с запрашиваемым клиентом
2. Очистить DNS-кэш на клиентском устройстве
3. Убедиться, что клиент использует pfSense в качестве DNS-сервера, а не обращается к внешним серверам напрямую
4. Проверить, что правила файрвола не перенаправляют DNS-трафик мимо pfSense

## Заметки по миграции

### Миграция с Cisco DNS

В Cisco IOS DNS-настройки задаются глобально через `ip name-server` и `ip domain-name`. pfSense предоставляет значительно больше возможностей:

| Cisco IOS | pfSense |
|---|---|
| `ip name-server 8.8.8.8` | System > General Setup > DNS Servers |
| `ip domain-name corp.local` | System > General Setup > Domain |
| `ip host server1 192.168.1.10` | Host Overrides в DNS Resolver |
| `ip dns server` | Включение DNS Resolver |

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

FortiGate поддерживает DNS Database с зонами и записями. В pfSense аналогичная функциональность реализуется через Host Overrides и Domain Overrides:

- DNS Database записи -> Host Overrides
- Conditional Forwarding -> Domain Overrides
- FortiGuard DNS Filter -> Внешние DNS-серверы с фильтрацией (Cloudflare for Families, OpenDNS)

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

MikroTik DNS настраивается через `/ip dns`. Основные соответствия:

| MikroTik | pfSense |
|---|---|
| `/ip dns set servers=8.8.8.8` | System > General Setup > DNS Servers |
| `/ip dns set allow-remote-requests=yes` | Включение DNS Resolver на интерфейсе |
| `/ip dns static add` | Host Overrides |
| `/ip dns cache flush` | Diagnostics > DNS Lookup > Clear Cache |

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

- [DHCP сервер pfSense](/docs/pfsense/services/pfsense-dhcp/) - настройка DHCP с регистрацией хостов в DNS
- [Правила файрвола](/docs/pfsense/firewall/pfsense-firewall-rules/) - контроль DNS-трафика и перенаправление запросов
- [Настройка VLAN](/docs/pfsense/vlans/pfsense-vlan-setup/) - раздельная конфигурация DNS для различных сегментов сети

