Skip to main content

Установка DNS сервера Bind на UbuntuServer 24.04 в Proxmox

Развёртывание DNS-сервера BIND9 для OT-сети Самара

Статус документа: рабочая инструкция, обновляется по мере выполнения проекта.

Редакция: 2, состояние проекта на 24.07.2026.

Цель: развернуть выделенный авторитетный и рекурсивный DNS-сервер BIND9 для производственных OT-сетей с поддержкой прямого и обратного разрешения имён, а также динамической регистрации DNS-записей.

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


1. Принятая архитектура

DNS-сервер разворачивается на отдельной виртуальной машине в Proxmox VE. Виртуальная машина не используется как маршрутизатор и не должна пересылать транзитный трафик между management- и OT-сетями.

Параметр Значение
Имя виртуальной машины SMR-SRV-OT-DNS
Hostname Ubuntu smr-srv-ot-dns
Операционная система Ubuntu Server 24.04.4 LTS
DNS-сервер BIND9, нативная установка из репозитория Ubuntu
Контейнеризация Не используется
Назначение ВМ DNS, диагностика и системное администрирование
Маршрутизация между интерфейсами Запрещена
Default route Только один, через management-интерфейс

1.1. Почему BIND9 устанавливается без Docker

  • упрощается привязка DNS-службы к нескольким локальным IP-адресам;
  • проще работать с динамически изменяемыми зонами;
  • служба управляется через systemd;
  • диагностика выполняется через journalctl, ss, dig и rndc;
  • обновления безопасности устанавливаются через apt;
  • проще резервировать конфигурацию и файлы зон.

2. План DNS-зон

2.1. Прямая зона

Принятое имя прямой зоны:

ot-samara.baltika.ru

Символ подчёркивания в имени обычной DNS-зоны не используется. Поэтому применяется вариант с дефисом.

plc-brew-001.ot-samara.baltika.ru
hmi-brew-001.ot-samara.baltika.ru
plc-fill-001.ot-samara.baltika.ru
hmi-util-001.ot-samara.baltika.ru

2.2. Обратные зоны

IP-сеть Назначение Обратная DNS-зона
10.255.0.0/16 Legacy OT 255.10.in-addr.arpa
172.16.66.0/24 Пивопроизводство, первая половина /23 66.16.172.in-addr.arpa
172.16.67.0/24 Пивопроизводство, вторая половина /23 67.16.172.in-addr.arpa
172.16.68.0/24 Розлив, первая половина /23 68.16.172.in-addr.arpa
172.16.69.0/24 Розлив, вторая половина /23 69.16.172.in-addr.arpa
172.16.70.0/24 Утилиты, первая половина /23 70.16.172.in-addr.arpa
172.16.71.0/24 Утилиты, вторая половина /23 71.16.172.in-addr.arpa

В домене in-addr.arpa октеты сетевого префикса записываются в обратном порядке. Для сети 10.255.0.0/16 используется зона 255.10.in-addr.arpa, а не 10.255.in-addr.arpa.


3. Сетевая схема

3.1. Текущее состояние OT-сети

Сеть VLAN Состояние
10.255.0.0/16 VLAN 1 Действующая legacy-сеть
172.16.66.0/23 VLAN 1 Действующая производственная сеть

Обе IP-подсети сейчас находятся в одном L2-домене. VLAN 1 поступает на отдельный физический порт Proxmox как нетегированный access-трафик.

3.2. Состояние после модернизации

Сеть VLAN Назначение Локальный DNS-адрес
172.16.66.0/23 2030 Пивопроизводство 172.16.66.53
172.16.68.0/23 2002 Розлив 172.16.68.53
172.16.70.0/23 2040 Утилиты 172.16.70.53
10.255.0.0/16 1 Legacy OT на переходный период 10.255.0.53

3.3. Адреса управления

Этап Адрес Шлюз Назначение
Развёртывание 192.168.1.53/24 192.168.1.1 Временное управление, обновления и Интернет
Production 10.44.100.228/24 10.44.100.1 Постоянное управление сервером

На сервере должен быть только один маршрут по умолчанию. На OT-интерфейсах шлюзы и системные DNS-серверы не назначаются.


4. Схема Proxmox и виртуальных интерфейсов

4.1. Физические интерфейсы и bridge

Proxmox Тип подключения Bridge Назначение
nic0 Нетегированная временная management-сеть vmbr0 Временное управление
nic1.2100 Tagged VLAN 2100 vmbr1 Production management
nic1.2002 Tagged VLAN 2002 vmbr3 Розлив
nic1.2030 Tagged VLAN 2030 vmbr4 Пивопроизводство
nic1.2040 Tagged VLAN 2040 vmbr5 Утилиты
nic2 Access/untagged VLAN 1 vmbr6 Legacy OT и текущая сеть 172.16.66.0/23

Старые элементы nic1.1 и vmbr2 удалены. VLAN 1 на коммутаторе передаётся без тега, поэтому VLAN-подинтерфейс nic1.1, ожидающий кадры с тегом 802.1Q VLAN ID 1, не получал трафик.

Коммутатор: access VLAN 1 / PVID 1
        |
        | Ethernet без тега 802.1Q
        v
Proxmox nic2 -> vmbr6 -> VM net6 -> Ubuntu enp2s1
                                      |- 10.255.0.53/16
                                      `- 172.16.66.53/23

4.2. Актуальные интерфейсы виртуальной машины

Ubuntu MAC Proxmox Назначение Адресация
ens18 BC:24:11:AE:75:CD net0 / vmbr0 Временное управление 192.168.1.53/24
ens20 BC:24:11:6B:32:0E net2 / vmbr3 VLAN 2002, розлив Позднее 172.16.68.53/23
ens21 BC:24:11:E4:E6:A9 net3 / vmbr4 VLAN 2030, пивопроизводство Позднее 172.16.66.53/23
ens22 BC:24:11:32:D6:01 net4 / vmbr5 VLAN 2040, утилиты Позднее 172.16.70.53/23
ens23 BC:24:11:D1:4C:AE net5 / vmbr1 Production management VLAN 2100 Позднее 10.44.100.228/24
enp2s1 BC:24:11:7E:0F:4D net6 / vmbr6 Access VLAN 1 10.255.0.53/16 и временно 172.16.66.53/23

Пропуски в нумерации net1 и ens19 нормальны. Пересоздавать сетевые карты только ради последовательных имён не требуется.

Адрес 172.16.66.53/23 нельзя одновременно назначать интерфейсу VLAN 1 и интерфейсу VLAN 2030. Во время миграции адрес сначала удаляется с enp2s1, затем назначается ens21.


5. Установка Ubuntu Server

5.1. Параметры ВМ

Ресурс Значение
CPU 2–4 vCPU
RAM 4 ГБ
Диск 32 ГБ
Дисковый контроллер VirtIO SCSI
Сетевые карты VirtIO
QEMU Guest Agent Включён в настройках ВМ

5.2. Параметры установщика

  • Hostname: smr-srv-ot-dns.
  • Установить OpenSSH Server.
  • Не устанавливать Docker.
  • Не устанавливать дополнительные snaps.
  • Во время установки активировать только management-интерфейс.
  • На остальных интерфейсах отключить DHCP.

6. Базовая подготовка Ubuntu

6.1. Обновление системы

sudo apt update
sudo apt full-upgrade -y

apt update обновляет индекс пакетов. apt full-upgrade устанавливает обновления и корректно обрабатывает изменение зависимостей.

6.2. Установка базовых пакетов

sudo apt install -y \
  ca-certificates \
  curl \
  nano \
  openssl \
  iputils-ping \
  tcpdump \
  arping \
  bash-completion \
  lsof \
  qemu-guest-agent \
  systemd-timesyncd \
  ufw
Пакет Назначение
ca-certificates Проверка TLS-сертификатов
curl Проверка HTTP/HTTPS
nano Редактирование конфигурации
openssl Криптографические операции и TLS-диагностика
iputils-ping Проверка IP-доступности
tcpdump Анализ DNS, ARP, ICMP и NTP
arping Проверка адресных конфликтов и L2-доступности
bash-completion Автодополнение команд
lsof Поиск процессов, использующих файлы и порты
qemu-guest-agent Интеграция с Proxmox
systemd-timesyncd Синхронизация времени
ufw Host firewall

7. QEMU Guest Agent

systemctl status qemu-guest-agent --no-pager
ls -l /dev/virtio-ports/

Ожидается:

Active: active (running)
/dev/virtio-ports/org.qemu.guest_agent.0

Служба qemu-guest-agent.service является статической. Состояние static нормально: служба запускается при наличии virtio-канала от Proxmox.


8. Часовой пояс и NTP

sudo timedatectl set-timezone Europe/Samara
sudo timedatectl set-local-rtc 0
sudo timedatectl set-ntp true

Аппаратные часы остаются в UTC, локальное время отображается для часового пояса Самары.

8.1. Временный NTP

Сервер 192.168.1.1 не ответил по UDP/123. На этапе развёртывания используется ntp.ubuntu.com.

sudo install -d -m 0755 /etc/systemd/timesyncd.conf.d
sudo tee /etc/systemd/timesyncd.conf.d/10-internal-ntp.conf >/dev/null <<'EOF'
[Time]
NTP=ntp.ubuntu.com
FallbackNTP=
EOF
sudo systemctl restart systemd-timesyncd
timedatectl status
timedatectl timesync-status
systemctl status systemd-timesyncd --no-pager

8.2. Production NTP

[Time]
NTP=10.44.14.34 10.44.14.33
FallbackNTP=

Нужно разрешить доступ от 10.44.100.228 к обоим NTP-серверам по UDP/123.


9. Передача управления сетью от cloud-init к Netplan

9.1. Что такое cloud-init

cloud-init выполняет первоначальную автоматическую настройку виртуальной машины: hostname, пользователей, SSH-ключей и сети. В Ubuntu он может формировать файл /etc/netplan/50-cloud-init.yaml. Для долгоживущего многосетевого DNS-сервера сеть ведётся администратором, поэтому отключается только сетевой модуль cloud-init.

9.2. Отключение сетевой конфигурации cloud-init

sudo install -d -m 0755 /etc/cloud/cloud.cfg.d
echo 'network: {config: disabled}' | \
  sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg >/dev/null
sudo mv /etc/netplan/50-cloud-init.yaml \
  /etc/netplan/50-cloud-init.yaml.disabled

network: {config: disabled} запрещает cloud-init формировать сеть, но не отключает cloud-init целиком. Переименование старого файла не даёт Netplan продолжать читать уже созданную DHCP-конфигурацию.

9.3. Текущая конфигурация Netplan

network:
  version: 2
  renderer: networkd

  ethernets:
    ens18:
      dhcp4: false
      dhcp6: false
      addresses:
        - 192.168.1.53/24
      nameservers:
        addresses:
          - 192.168.1.1
      routes:
        - to: default
          via: 192.168.1.1

    enp2s1:
      dhcp4: false
      dhcp6: false
      accept-ra: false
      link-local: []
      optional: true
      addresses:
        - 10.255.0.53/16
        - 172.16.66.53/23

У OT-интерфейса отсутствуют default route и nameservers. Поэтому он обслуживает непосредственно подключённые сети, но не меняет системную маршрутизацию и DNS самой Ubuntu.

9.4. Безопасное применение

sudo chmod 600 /etc/netplan/01-ot-dns.yaml
sudo netplan generate
sudo netplan get
sudo netplan try --timeout 120

netplan generate проверяет YAML, но не меняет активную сеть. netplan try применяет конфигурацию временно и ожидает подтверждения.

После неуспешного netplan try runtime-конфигурация откатывается, но файл на диске остаётся изменённым. До перезагрузки нужно восстановить резервную копию.

ip -br addr
ip route
ip route show default
ip route get 10.255.255.1
ip route get 172.16.66.221
ip route get 8.8.8.8
networkctl status enp2s1 --no-pager

10. Запрет маршрутизации через DNS-сервер

sysctl net.ipv4.ip_forward
sysctl net.ipv6.conf.all.forwarding

Оба значения должны быть равны нулю.

sudo tee /etc/sysctl.d/90-ot-dns-no-forwarding.conf >/dev/null <<'EOF'
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0
EOF
sudo sysctl -p /etc/sysctl.d/90-ot-dns-no-forwarding.conf

Сервер отвечает за собственные адреса, но не пересылает транзитный трафик между интерфейсами.


11. Настройка UFW

Сначала создаются разрешающие SSH-правила, затем включается политика запрета входящих соединений.

sudo ufw allow in on ens18 \
  proto tcp \
  from 192.168.1.0/24 \
  to 192.168.1.53 \
  port 22 \
  comment 'SSH temporary management network'

sudo ufw allow in on ens23 \
  proto tcp \
  from 10.44.100.0/24 \
  to 10.44.100.228 \
  port 22 \
  comment 'SSH production management network'

sudo ufw show added
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw logging low
sudo ufw enable

Перед включением UFW необходимо оставить открытой консоль Proxmox. Разрешающее SSH-правило создаётся до команды ufw enable.

sudo ufw status verbose
sudo ufw status numbered

Подтверждённое состояние: UFW активен, входящие соединения по умолчанию запрещены, исходящие разрешены, routed-трафик запрещён.


12. Проверка VLAN 1 и выявленная причина неисправности

12.1. Первоначальный симптом

При использовании пути nic1.1 → vmbr2 → ens19 IP-адреса назначались, но удалённые узлы возвращали Destination Host Unreachable. Ядро не получало ARP-ответов на непосредственно подключённом L2-сегменте.

12.2. Причина

На физическом интерфейсе Proxmox присутствовал нетегированный ARP-трафик сети 10.255.0.0/16. Интерфейс nic1.1 принимает только кадры с тегом VLAN 1, поэтому access/native-трафик до виртуальной машины не доходил.

12.3. Исправление

  1. физический линк VLAN 1 перенесён на nic2;
  2. порт коммутатора настроен как access VLAN 1 с PVID 1;
  3. создан vmbr6 с портом nic2;
  4. ВМ подключена через net6 / vmbr6;
  5. адреса перенесены на enp2s1;
  6. старые net1, ens19, vmbr2 и nic1.1 удалены.

12.4. Подтверждённые тесты

ping -I 10.255.0.53 -c 20 10.255.255.12
# 20 передано, 20 получено, 0% потерь

ping -I 172.16.66.53 -c 4 172.16.66.221
# 4 передано, 4 получено, 0% потерь

Проверки подтверждают рабочий путь enp2s1 → net6 → vmbr6 → nic2 → access VLAN 1 для обеих текущих OT-подсетей.

12.5. Примечание по arping

До назначения IPv4 установленная реализация arping требует источник 0.0.0.0:

sudo arping -0 -i enp2s1 -c 3 10.255.0.53
sudo arping -0 -i enp2s1 -c 3 172.16.66.53

13. Текущее фактическое состояние

Проверка Состояние
Ubuntu Server Ubuntu 24.04.4 LTS установлена и обновлена
Hostname smr-srv-ot-dns
QEMU Guest Agent Работает
Часовой пояс Europe/Samara
Временный management IP 192.168.1.53/24 на ens18
Default gateway 192.168.1.1 через ens18
Системный DNS Ubuntu 192.168.1.1
VLAN 1 Access/untagged через nic2 / vmbr6 / net6 / enp2s1
Legacy OT IP 10.255.0.53/16
Текущий IP сети 172.16.66.0/23 172.16.66.53/23
Связность 10.255.0.0/16 Подтверждена
Связность 172.16.66.0/23 Подтверждена
IP forwarding Отключён постоянно
UFW Активен
BIND9 Ещё не установлен

14. Следующий этап

  1. выполнить контрольную перезагрузку и повторно проверить адреса, маршруты, UFW, forwarding и OT-связность;
  2. настроить ens20 для VLAN 2002 с адресом 172.16.68.53/23 без шлюза;
  3. проверить L2-доступность VLAN 2002;
  4. настроить ens22 для VLAN 2040 с адресом 172.16.70.53/23 без шлюза;
  5. подготовить ens21 для будущей миграции 172.16.66.53/23 в VLAN 2030, но пока не назначать дублирующий адрес;
  6. настроить production management 10.44.100.228/24 на ens23 без немедленного удаления временного management-адреса;
  7. установить BIND9 и настроить прослушивание только localhost и OT DNS-адресов;
  8. создать прямую и семь обратных зон;
  9. открыть в UFW DNS TCP/53 и UDP/53 только для необходимых OT-сетей;
  10. настроить и проверить DDNS с учётом ограничений безопасности обновлений по IP-источнику.

BIND9 не должен слушать на management-адресах. Management-интерфейсы используются для SSH, обновлений, NTP и администрирования, а клиентские DNS-запросы принимаются на локальных адресах OT-сетей.


15. Контрольный набор команд после перезагрузки

ip -br addr
ip route
ip route show default
ip route get 8.8.8.8
ip route get 10.255.255.1
ip route get 172.16.66.221
ping -I 10.255.0.53 -c 4 10.255.255.1
ping -I 172.16.66.53 -c 4 172.16.66.221
sysctl net.ipv4.ip_forward
sysctl net.ipv6.conf.all.forwarding
sudo ufw status verbose
timedatectl timesync-status
systemctl status qemu-guest-agent --no-pager
networkctl status enp2s1 --no-pager

Ожидаемый результат: оба OT-адреса назначены enp2s1, default route существует только через ens18, forwarding равен нулю, UFW активен, NTP синхронизирован, QEMU Guest Agent работает.