# Dynamic DNS в pfSense - обновление записей при смене IP

> Настройка Dynamic DNS в pfSense - автоматическое обновление DNS-записей при изменении WAN-адреса, поддерживаемые провайдеры и RFC 2136

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


Dynamic DNS (DDNS) решает проблему доступа к сервисам, размещённым за подключением с динамическим IP-адресом. При каждом изменении WAN-адреса pfSense автоматически обновляет DNS-запись у провайдера, обеспечивая постоянную доступность по доменному имени. Это критически важно для удалённого доступа через VPN, размещения веб-серверов, организации видеонаблюдения и других сценариев, где требуется стабильное доменное имя при непостоянном IP-адресе.

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

При подключении к провайдеру pfSense получает WAN-адрес через DHCP или PPPoE. Этот адрес может изменяться при каждом переподключении или по истечении срока аренды. Dynamic DNS клиент отслеживает текущий WAN-адрес и при его изменении отправляет запрос на обновление записи к DNS-провайдеру через API. Таким образом, доменное имя всегда указывает на актуальный IP-адрес.

Процесс обновления происходит следующим образом:

1. pfSense периодически проверяет текущий IP-адрес на выбранном интерфейсе
2. При обнаружении изменения формируется запрос к API DNS-провайдера
3. Провайдер обновляет A-запись (или AAAA для IPv6) для указанного домена
4. Обновление распространяется по DNS в соответствии с TTL записи

## Поддерживаемые провайдеры

pfSense поддерживает широкий набор DNS-провайдеров для автоматического обновления записей.

| Провайдер | Особенности |
|---|---|
| **Cloudflare** | Бесплатный DNS, поддержка проксирования, API token |
| **No-IP** | Бесплатный план с ограничениями, широкая совместимость |
| **DynDNS** | Один из старейших DDNS-сервисов, платный |
| **Namecheap** | Бесплатный DDNS для доменов, зарегистрированных в Namecheap |
| **Route 53** | AWS DNS-сервис, требует Access Key и Zone ID |
| **HE.net** | Hurricane Electric, бесплатный DNS с поддержкой DDNS |
| **FreeDNS** | Бесплатный сервис afraid.org |
| **DNSimple** | API-ориентированный DNS-провайдер |
| **GleSYS** | Шведский хостинг-провайдер с DNS API |
| **Custom** | Произвольный провайдер с HTTP API |

При выборе провайдера следует учитывать требования к надёжности, скорость распространения обновлений и наличие дополнительных функций (проксирование, DNSSEC на стороне провайдера).

## Настройка DynDNS клиента

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

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

Для добавления нового клиента необходимо нажать кнопку **Add** и заполнить следующие поля.

| Поле | Описание | Пример |
|---|---|---|
| **Disable** | Временное отключение записи без удаления | Не установлен |
| **Service Type** | Провайдер DDNS из списка | Cloudflare |
| **Interface to Monitor** | Интерфейс, IP-адрес которого отслеживается | WAN |
| **Hostname** | Полное доменное имя (FQDN) | `home.example.com` |
| **Domain Name** | Доменное имя (для Namecheap - отдельное поле) | `example.com` |
| **Username** | Имя пользователя или API-ключ | Зависит от провайдера |
| **Password** | Пароль или API-токен | Зависит от провайдера |
| **Description** | Описание записи для идентификации | `Home server DDNS` |

### Выбор интерфейса

Поле **Interface to Monitor** определяет, какой IP-адрес будет передаваться провайдеру.

| Вариант | Когда использовать |
|---|---|
| **WAN** | Стандартное подключение с одним внешним каналом |
| **OPTx** | Дополнительные WAN-интерфейсы в multi-WAN конфигурации |
| **Gateway Group** | Автоматическое переключение между WAN при отказе основного канала |

При выборе Gateway Group Dynamic DNS автоматически переключается на резервный WAN-адрес при отказе основного канала, обеспечивая непрерывную доступность сервисов.

### Метод определения IP-адреса

pfSense предлагает несколько методов определения текущего публичного IP-адреса.

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

**Внешний сервис проверки IP** - pfSense обращается к внешнему HTTP-сервису, который возвращает публичный IP-адрес. Этот метод необходим, когда pfSense находится за NAT вышестоящего маршрутизатора и его WAN-интерфейс имеет приватный адрес.

> **Внимание**:
>
> Если pfSense расположен за NAT провайдера (Carrier-Grade NAT) или другого маршрутизатора, необходимо использовать внешний сервис проверки IP. В противном случае в DNS будет зарегистрирован приватный адрес WAN-интерфейса, недоступный из интернета.

### Дополнительные параметры

| Параметр | Описание |
|---|---|
| **MX** | Mail Exchanger запись для почтового сервера |
| **Wildcard** | Разрешение поддоменов на тот же IP-адрес |
| **Verbose Logging** | Подробное журналирование для диагностики |
| **SSL Peer Verification** | Проверка SSL-сертификата при обращении к API провайдера |

### Периодичность обновлений

Dynamic DNS клиент проверяет IP-адрес при каждом изменении состояния интерфейса, а также принудительно обновляет запись каждые 25 дней, даже если адрес не изменился. Это предотвращает удаление неактивных записей провайдерами с политикой автоматической очистки.

## Настройка для конкретных провайдеров

### Cloudflare

Cloudflare является одним из наиболее популярных провайдеров благодаря бесплатному DNS-хостингу и дополнительным функциям проксирования.

1. Создать API-токен в личном кабинете Cloudflare с правами на редактирование DNS-зон
2. В pfSense выбрать **Service Type**: Cloudflare
3. В поле **Username** указать адрес электронной почты аккаунта Cloudflare
4. В поле **Password** указать API-токен (не Global API Key)
5. Указать полное имя хоста в поле **Hostname**

### Namecheap

Для доменов, зарегистрированных в Namecheap, DDNS доступен бесплатно.

1. Активировать Dynamic DNS в панели управления доменом Namecheap
2. Скопировать сгенерированный пароль Dynamic DNS
3. В pfSense выбрать **Service Type**: Namecheap
4. Поле **Username** оставить пустым
5. В поле **Password** указать пароль из панели Namecheap
6. В поле **Hostname** указать имя хоста (без домена)
7. В поле **Domain Name** указать домен

### Route 53 (AWS)

Для использования Route 53 необходим аккаунт AWS с настроенной hosted zone.

1. Создать IAM-пользователя с политикой, разрешающей `route53:ChangeResourceRecordSets`
2. В поле **Username** указать Access Key ID
3. В поле **Password** указать Secret Access Key
4. Указать Zone ID в соответствующем поле
5. Задать TTL записи (рекомендуется 60-300 секунд)

### Custom (пользовательский провайдер)

Тип **Custom** позволяет настроить обновление через произвольный HTTP API.

| Поле | Описание |
|---|---|
| **Update URL** | URL для обновления записи с подстановкой `%IP%` |
| **Result Match** | Строка, ожидаемая в ответе при успешном обновлении |

Пример URL: `https://dns.example.com/update?hostname=home.example.com&ip=%IP%&token=secret`

pfSense подставит текущий IP-адрес вместо `%IP%` и проверит наличие строки из **Result Match** в ответе сервера.

## RFC 2136 - обновление собственного DNS-сервера

RFC 2136 определяет стандартный протокол динамического обновления DNS-записей. Этот метод позволяет pfSense напрямую обновлять записи на DNS-сервере (BIND, PowerDNS, Windows Server DNS) без использования стороннего провайдера.

### Когда использовать RFC 2136

- Организация располагает собственным авторитетным DNS-сервером
- Требуется полный контроль над DNS-инфраструктурой без зависимости от внешних сервисов
- DNS-сервер поддерживает протокол динамических обновлений (BIND 9, PowerDNS, Microsoft DNS)

### Настройка RFC 2136

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

| Поле | Описание | Пример |
|---|---|---|
| **Enable** | Включение записи | Установлен |
| **Interface** | Интерфейс, IP-адрес которого регистрируется | WAN |
| **Hostname** | Полное доменное имя (FQDN) | `fw.corp.example.com` |
| **Zone** | DNS-зона для обновления | `corp.example.com` |
| **Server** | IP-адрес или имя DNS-сервера | `10.0.0.53` |
| **Record Type** | Тип записи: A, AAAA или оба | A |
| **TTL** | Время жизни записи в секундах | 60 |
| **Key Name** | Имя TSIG-ключа | `fw.corp.example.com` |
| **Key Algorithm** | Алгоритм TSIG | HMAC-SHA256 |
| **Key** | Секретный ключ TSIG в формате Base64 | (сгенерированный ключ) |

### Генерация TSIG-ключа

TSIG (Transaction Signature) обеспечивает аутентификацию обновлений. Ключ необходимо сгенерировать на DNS-сервере и указать в настройках pfSense.

Для BIND генерация ключа выполняется следующей командой:

```bash
tsig-keygen -a hmac-sha256 fw.corp.example.com
```

Результат содержит ключ в формате Base64, который следует скопировать в поле **Key** в pfSense. Тот же ключ необходимо добавить в конфигурацию BIND и разрешить обновления для соответствующей зоны.

### Дополнительные параметры RFC 2136

| Параметр | Описание |
|---|---|
| **Use Public IP** | Определение публичного IP через внешний сервис (при NAT) |
| **Update Source** | Интерфейс для отправки обновлений |
| **Protocol** | UDP (по умолчанию) или TCP |

> **Внимание**:
>
> При использовании TCP для обновлений необходимо убедиться, что правила файрвола разрешают исходящий TCP-трафик на порт 53 DNS-сервера. По умолчанию обновления отправляются по UDP.

## Multi-WAN и несколько записей DDNS

pfSense поддерживает создание произвольного количества записей Dynamic DNS, что позволяет реализовать несколько сценариев.

### Несколько провайдеров для одного домена

Для повышения надёжности допускается создание записей у нескольких провайдеров для одного и того же имени хоста. При недоступности одного провайдера второй продолжит обслуживать запросы.

### Разные записи для разных WAN

В multi-WAN конфигурации каждому WAN-интерфейсу следует назначить отдельную запись Dynamic DNS:

| Запись | Интерфейс | Домен |
|---|---|---|
| Запись 1 | WAN | `wan1.example.com` |
| Запись 2 | WAN2 | `wan2.example.com` |

### Gateway Group для отказоустойчивости

При использовании Gateway Group в качестве интерфейса Dynamic DNS автоматически обновляет запись при переключении на резервный канал. Это обеспечивает непрерывную доступность входящих подключений при отказе основного провайдера.

## Проверка статуса обновлений

Состояние всех записей Dynamic DNS отображается на странице **Status > Dynamic DNS**.

| Столбец | Описание |
|---|---|
| **Interface** | Отслеживаемый интерфейс |
| **Service** | Тип провайдера |
| **Hostname** | Обновляемое доменное имя |
| **Cached IP** | Последний зарегистрированный IP-адрес |
| **Status** | Результат последнего обновления |

Статус **Updated** указывает на успешное обновление. Статус **Error** сигнализирует о проблеме - подробности доступны в журнале.

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

### Запись не обновляется

1. Проверить статус на странице **Status > Dynamic DNS** - поле **Status** должно содержать информацию об ошибке
2. Включить **Verbose Logging** в настройках записи для получения подробных данных
3. Просмотреть журнал: **Status > System Logs > Dynamic DNS**
4. Убедиться, что WAN-интерфейс имеет IP-адрес и шлюз по умолчанию доступен
5. Проверить DNS-разрешение на pfSense через **Diagnostics > DNS Lookup**

### Обнаруживается неверный IP-адрес

- Если pfSense за NAT - включить определение публичного IP через внешний сервис
- Проверить, что выбран корректный интерфейс в поле **Interface to Monitor**
- При использовании Gateway Group убедиться, что группа настроена корректно

### Ошибка аутентификации

1. Проверить корректность учётных данных (API-токен, пароль)
2. Для Cloudflare - убедиться, что используется API-токен с правами на редактирование DNS-зоны, а не Global API Key
3. Для Namecheap - убедиться, что Dynamic DNS активирован в панели управления доменом
4. Для Route 53 - проверить IAM-политику пользователя

### RFC 2136 не обновляет запись

1. Проверить доступность DNS-сервера с pfSense: **Diagnostics > Ping**
2. Убедиться, что TSIG-ключ совпадает на pfSense и DNS-сервере
3. Проверить, что зона на DNS-сервере разрешает динамические обновления
4. Просмотреть журнал DNS-сервера на предмет ошибок аутентификации

## Интеграция с VPN и проброс портов

Dynamic DNS широко используется совместно с VPN и пробросом портов (Port Forwarding).

### VPN с Dynamic DNS

При настройке удалённого VPN-подключения (OpenVPN, IPsec) Dynamic DNS обеспечивает стабильный адрес сервера:

- В конфигурации VPN-клиента указывается доменное имя вместо IP-адреса
- При смене WAN-адреса клиент автоматически переподключается по обновлённому DNS
- TTL записи рекомендуется устанавливать в 60-120 секунд для минимизации задержки переподключения

### Port Forwarding с Dynamic DNS

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

1. Настроить правило Port Forward в **Firewall > NAT > Port Forward**
2. Создать запись Dynamic DNS для WAN-интерфейса
3. Обращаться к сервису по адресу `hostname.example.com:port`

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

- [DNS (Resolver и Forwarder)](/docs/pfsense/services/pfsense-dns/) - настройка DNS-разрешения и переопределение записей на уровне pfSense
- [Правила файрвола](/docs/pfsense/firewall/pfsense-firewall-rules/) - управление доступом к сервисам при использовании Dynamic DNS
- [Multi-WAN failover](/docs/pfsense/multi-wan/pfsense-multi-wan-failover/) - отказоустойчивость каналов связи с автоматическим обновлением DNS

