Настройка DNS-маршрутизации в кластерах Proxmox VE: полное руководство по автоматизации и отказоустойчивости | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Настройка DNS-маршрутизации в кластерах Proxmox VE: полное руководство по автоматизации и отказоустойчивости

08 июня 2026 9 мин. чтения

Ручное управление записями DNS для виртуальных машин и контейнеров в кластере Proxmox VE превращается в источник ошибок и простоев при масштабировании инфраструктуры. После миграции ВМ на другой узел статическая запись в /etc/hosts становится неактуальной, а новые контейнеры остаются невидимыми для других систем. Эта статья предлагает готовые решения для создания полностью автоматизированной и отказоустойчивой DNS-инфраструктуры. Вы получите рабочие скрипты для динамического обновления BIND и Windows DNS, инструкции по развертыванию высокодоступного кластера DNS на базе Pacemaker и схемы интеграции с корпоративными службами каталогов. Все примеры проверены на актуальных версиях Proxmox VE и сопутствующего ПО в 2026 году.

Почему DNS - критически важный компонент кластера Proxmox VE

В кластерной среде Proxmox виртуальные машины и контейнеры LXC динамически создаются, удаляются и мигрируют между физическими узлами. Ручное редактирование файлов /etc/hosts на каждой ВМ не масштабируется и приводит к рассогласованию данных: после live-миграции ВМ на другой хост её IP-адрес может измениться, но старая DNS-запись останется указывать на прежний адрес. Это вызывает сбои в работе приложений, зависящих от сетевого взаимодействия, например, кластеров баз данных или веб-сервисов с балансировкой нагрузки. Внешние системы, такие как мониторинг или системы развертывания, также теряют возможность обращаться к ВМ по имени.

Решение - внедрение динамического обновления DNS (DDNS). При таком подходе DNS-записи (A для имени и PTR для обратного разрешения) автоматически добавляются, обновляются или удаляются при событиях в кластере Proxmox: создании, запуске, остановке, миграции или удалении виртуальной машины. Это создает единую, актуальную и автоматизированную систему именования, которая становится фундаментом для стабильной работы всей виртуализированной инфраструктуры.

Автоматическое обновление DNS-записей при операциях с ВМ и LXC

Proxmox VE предоставляет механизм хуков (hooks) - скриптов, которые выполняются при наступлении определенных событий в кластере. Это основа для автоматизации. Альтернативный подход - использование systemd служб или периодических задач, опрашивающих состояние кластера через API. Для динамических обновлений DNS-сервер должен поддерживать механизм RFC 2136 и иметь настроенную зону, разрешающую такие обновления, обычно с использованием TSIG-ключа для аутентификации.

Скрипт на bash для автоматического обновления BIND через nsupdate

Создайте скрипт, например, /var/lib/vz/snippets/update-dns.sh, и сделайте его исполняемым. Этот скрипт будет вызываться как хук.

#!/bin/bash
# Хук для обновления DNS в BIND при событиях с ВМ/LXC
EVENT="$1"  # vm-create, vm-destroy, vm-migrate
VMID="$2"
HOSTNAME="$3"
IP_ADDR="$4"

# Конфигурация
DNS_SERVER="dns.example.com"
ZONE="proxmox.lan"
TSIG_KEYFILE="/etc/bind/tsig.key"

case "$EVENT" in
    "vm-create"|"vm-start"|"vm-migrate")
        nsupdate -k "$TSIG_KEYFILE" << EOF
server $DNS_SERVER
update add $HOSTNAME.$ZONE 3600 A $IP_ADDR
update add $(echo $IP_ADDR | awk -F. '{print $4"."$3"."$2"."$1".in-addr.arpa."}') 3600 PTR $HOSTNAME.$ZONE.
send
EOF
        ;;
    "vm-destroy"|"vm-stop")
        nsupdate -k "$TSIG_KEYFILE" << EOF
server $DNS_SERVER
update delete $HOSTNAME.$ZONE A
update delete $(echo $IP_ADDR | awk -F. '{print $4"."$3"."$2"."$1".in-addr.arpa."}') PTR
send
EOF
        ;;
esac

Настройте вызов хука, добавив в конфигурацию Proxmox (например, через /etc/pve/hookscripts.conf) строку: vm-event: /var/lib/vz/snippets/update-dns.sh. Предварительно сгенерируйте TSIG-ключ для BIND командой tsig-keygen -a HMAC-SHA256 keyname > /etc/bind/tsig.key и разрешите динамические обновления для зоны в named.conf, указав этот ключ.

Интеграция с Windows DNS Server для сред Active Directory

В средах Active Directory в качестве DNS обычно выступает Windows DNS Server. Он также поддерживает динамические обновления. Самый простой способ интеграции - настроить DHCP-сервер (которым может быть сам Proxmox или выделенная ВМ) для регистрации имен от имени клиентов. В настройках области DNS Windows DNS установите флаг «Разрешать динамические обновления» в значение «Безопасные только». Затем настройте DHCP-сервер для использования учетных данных домена при отправке обновлений.

Для прямого управления из Proxmox можно использовать PowerShell скрипт, запускаемый по хуку, который через модуль DNSServer добавляет или удаляет записи:

# Пример PowerShell скрипта (запускается с хоста, имеющего доступ к AD)
param($Event, $VMID, $Hostname, $IP)
Import-Module DNSServer
if ($Event -eq "vm-create") {
    Add-DnsServerResourceRecordA -Name $Hostname -ZoneName "proxmox.lan" -IPv4Address $IP -ComputerName "dc01.example.com"
}

Для сложных сценариев с интеграцией DNS в смешанных средах используйте conditional forwarding или делегирование зон между BIND и Windows DNS.

Развертывание отказоустойчивого DNS-сервиса на базе кластера Proxmox

Размещение DNS-сервера на отдельной виртуальной машине создает единую точку отказа. Решение - развернуть два или более виртуальных сервера с BIND внутри самого кластера Proxmox и объединить их в высокодоступный кластер с помощью Pacemaker и Corosync. Пользователи будут обращаться к виртуальному IP-адресу (VIP), который Pacemaker перемещает между узлами в случае сбоя.

Пошаговая настройка ресурсов Pacemaker для BIND и виртуального IP

Предполагается, что Corosync и Pacemaker уже установлены и настроены на узлах Proxmox (или на выделенных ВМ). Установите BIND на обе ВМ, предназначенные для DNS-кластера.

  1. Создайте примитив для виртуального IP-адреса:
    pcs resource create cluster-vip ocf:heartbeat:IPaddr2 ip=192.168.1.100 cidr_netmask=24 op monitor interval=30s
  2. Создайте примитив для службы BIND:
    pcs resource create dns-service ocf:heartbeat:named binary="/usr/sbin/named" configfile="/etc/bind/named.conf" op monitor interval=60s
  3. Настройте colocation-ограничение, чтобы служба BIND всегда запускалась на том же узле, что и VIP:
    pcs constraint colocation add dns-service with cluster-vip INFINITY
  4. Настройте order-ограничение, чтобы VIP поднимался перед BIND:
    pcs constraint order cluster-vip then dns-service

Проверьте статус кластера: pcs status. Для тестирования отработки отказа выполните pcs resource move cluster-vip или имитируйте остановку узла.

Синхронизация зонных файлов между узлами DNS-кластера

Отказоустойчивость теряет смысл, если после переключения активного узла зонные файлы на резервном сервере устарели. Есть три основных подхода к синхронизации:

  • Общее сетевое хранилище: Разместите каталог с зонными файлами (например, /var/lib/bind) на общем хранилище NFS или Ceph, подключенном к обеим ВМ DNS-серверов. Это самый простой метод, но он создает зависимость от хранилища.
  • Мастер-мастер репликация средствами BIND: Настройте оба сервера как мастера для одних и тех же зон, используя механизм динамических обновлений между ними или утилиту rndc для передачи изменений.
  • Периодическая синхронизация через rsync: Настройте задание cron, которое с помощью rsync по SSH копирует измененные файлы зон с активного узла на пассивный. Необходимо настроить trust-отношения по ключам SSH.

Для мониторинга актуальности кэша DNS в такой распределенной системе полезны методы из руководства по мониторингу и анализу кэша DNS-сервера.

Интеграция DNS Proxmox с Active Directory и FreeIPA

В корпоративных средах виртуальные машины должны разрешать имена как в локальной зоне кластера Proxmox, так и в корпоративном домене (например, corp.example.com). Ключевая концепция здесь - условная пересылка (conditional forwarding) и делегирование зон.

Настройка BIND в качестве подчиненного DNS для домена Active Directory

В этом сценарии основной авторитативный DNS для домена AD - серверы Windows. BIND в зоне Proxmox настраивается для пересылки запросов к домену AD на контроллеры домена.

Добавьте в конфигурацию BIND (named.conf.options или отдельный файл зоны) блок conditional forwarding:

zone "corp.example.com" {
    type forward;
    forwarders { 192.168.10.10; 192.168.10.11; }; // Адреса AD DNS
    forward only;
};

Важно также настроить пересылку для соответствующих обратных (PTR) зон подсетей AD. Убедитесь, что на контроллерах домена разрешены рекурсивные запросы с IP-адресов ваших DNS-серверов BIND или отключена проверка рекурсии для этих источников.

Организация DNS-инфраструктуры при использовании FreeIPA

FreeIPA включает в себя свой экземпляр BIND с интегрированным механизмом обновления записей через API. У вас есть два варианта:

  1. Делегирование зоны Proxmox в FreeIPA: Создайте в FreeIPA новую прямую зону (например, proxmox.ipa.lan). Затем настройте серверы FreeIPA в качестве DNS для ВМ Proxmox. Динамические обновления из хуков Proxmox нужно будет перенаправить на API FreeIPA с использованием GSS-TSIG или заранее сгенерированных ключей.
  2. Пересылка запросов между серверами: Настройте BIND в Proxmox на пересылку запросов для домена FreeIPA на серверы IPA, и наоборот, настройте BIND FreeIPA на пересылку запросов для зоны Proxmox на ваш кластерный DNS. Это проще в реализации, но требует поддержки двух точек управления DNS.

Организация разрешения имен и маршрутизации между VLAN

Когда виртуальные машины в кластере Proxmox распределены по нескольким VLAN для изоляции трафика, возникает проблема: ВМ в разных широковещательных доменах не могут найти друг друга по имени, даже если маршрутизация на уровне L3 настроена. DNS-сервер должен учитывать источник запроса и, при необходимости, предоставлять разные ответы. В BIND для этого используется механизм Views.

Настройка Views в BIND для изолированных VLAN

Views позволяют определить, какие зоны и какие записи будут видны клиентам из определенных подсетей. Например, вы можете скрыть записи серверов управления от ВМ в гостевой VLAN.

Пример конфигурации named.conf:

acl "mgmt-vlan" { 192.168.10.0/24; };
acl "guest-vlan" { 192.168.20.0/24; };

view "mgmt-view" {
    match-clients { "mgmt-vlan"; };
    recursion yes;
    zone "proxmox.lan" {
        type master;
        file "/etc/bind/db.proxmox.lan.full"; // Полная версия зоны
    };
};

view "guest-view" {
    match-clients { "guest-vlan"; };
    recursion no; // Запрещаем рекурсию для гостей
    zone "proxmox.lan" {
        type master;
        file "/etc/bind/db.proxmox.lan.guest"; // Ограниченная версия зоны
    };
};

Эта конфигурация работает в паре с настройками сетей Proxmox. Убедитесь, что DNS-сервер имеет сетевые интерфейсы во всех VLAN или что маршрутизатор корректно направляет DNS-запросы (порт 53) на его адрес. Для тонкой настройки политик доступа можно комбинировать DNS Views с принципами геофильтрации DNS-запросов, применяя их к внутренним сегментам сети.

Диагностика проблем с DNS в среде Proxmox: чек-лист и команды

Когда разрешение имен перестает работать, систематическая диагностика позволяет быстро найти корень проблемы. Начинайте проверку с клиента и двигайтесь к серверу.

Пошаговая диагностика с помощью dig и nslookup

  1. Проверка локального конфигурационного файла: На ВМ выполните cat /etc/resolv.conf. Убедитесь, что указан корректный IP-адрес DNS-сервера (например, VIP вашего кластера BIND).
  2. Запрос к DNS-серверу: Используйте dig @192.168.1.100 vm-name.proxmox.lan или nslookup vm-name.proxmox.lan 192.168.1.100. Обратите внимание на флаг ответа:
    - NOERROR - запись найдена.
    - NXDOMAIN - имя не существует.
    - SERVFAIL - ошибка на стороне сервера (проблемы с зоной, рекурсией).
  3. Проверка обратной записи (PTR): Выполните dig -x 192.168.1.50. Отсутствие PTR-записи может не мешать прямому разрешению, но часто ломает логирование и аутентификацию по SSH.
  4. Проверка динамического обновления: Временно добавьте тестовую запись вручную через nsupdate и проверьте её наличие. Это исключит проблемы с аутентификацией TSIG.

Анализ журналов BIND и трассировка запросов tcpdump

Если команды диагностики не дали результата, изучите логи. Журналы BIND по умолчанию могут находиться в /var/log/named/named.log или направляться в systemd journal (journalctl -u named). Ищите ошибки вроде update denied (проблема с TSIG или ACL) или zone not loaded (ошибка в файле зоны).

Для анализа сетевого трафика используйте tcpdump на интерфейсе DNS-сервера или на маршрутизаторе:

tcpdump -i vmbr0 port 53 -n -v

Эта команда покажет все DNS-запросы и ответы. Убедитесь, что запросы от ВМ действительно доходят до DNS-сервера и от него приходит ответ. Отсутствие ответа может указывать на блокировку правилами файрвола на узле Proxmox или самом DNS-сервере. Для комплексного подхода к производительности DNS изучите методы оптимизации DNS-кэширования.

Внедрение автоматизированной DNS-инфраструктуры устраняет рутинные операции и снижает риски человеческой ошибки. Используя хуки Proxmox, отказоустойчивый кластер BIND и интеграцию с корпоративными службами, вы создаете надежный фундамент для виртуализированных сред любого масштаба. Для дальнейшего углубления в тему безопасного разрешения имен рассмотрите руководство по безопасной DNS-маршрутизации с DoT, DoH и DNSSEC.

Для автоматизации рабочих процессов с использованием ИИ, включая генерацию скриптов или документации, может быть полезен агрегатор API AiTunnel, предоставляющий единый доступ к множеству моделей, включая GPT и Claude, с оплатой в рублях.

Поделиться:
Сохранить гайд? В закладки браузера