Skip to main content

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

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

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

Текущее состояние: сеть Ubuntu настроена, IP forwarding отключён, UFW активен, BIND9 установлен и работает как авторитетный DNS без рекурсии и без forwarder, прямая и семь обратных зон загружены и проверены локально.

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


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

DNS-сервер разворачивается на отдельной виртуальной машине в Proxmox VE. BIND9 устанавливается нативно из репозитория Ubuntu, без Docker.

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

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

Виртуальная машина уже создаёт отдельную границу изоляции. Нативная установка упрощает:

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

1.2. Авторитетный режим без рекурсии

Сервер отвечает только за зоны, перечисленные в /etc/bind/named.conf.local. Для внешних доменов, например ubuntu.com, сервер возвращает REFUSED.

OT-клиент → запрос имени из ot-samara.baltika.ru → локальный авторитетный ответ
OT-клиент → запрос внешнего имени             → REFUSED

Это исключает зависимость от внешнего DNS и не превращает OT-сервер в рекурсивный resolver.


2. План DNS-зон

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

ot-samara.baltika.ru

Примеры имён оборудования:

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.

Каждая сеть /23 состоит из двух соседних сетей /24, поэтому для неё создаются две стандартные обратные зоны.


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

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

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

Обе подсети пока находятся в одном L2-домене и назначены одному интерфейсу Ubuntu.

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 Постоянное управление сервером; default route пока не активирован

На сервере должен быть только один маршрут по умолчанию. Сейчас активен маршрут через ens18 → 192.168.1.1. Будущий маршрут через ens23 → 10.44.100.1 оставлен в Netplan комментарием.

3.4. Важное ограничение маршрутизации

ВМ многосетевая, но не является маршрутизатором:

net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0

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


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

4.1. Рабочая схема bridge

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 / nic1.2002 VLAN 2002, Розлив 172.16.68.53/23
ens21 BC:24:11:E4:E6:A9 net3 / vmbr4 / nic1.2030 VLAN 2030, Пивопроизводство Пока без IPv4; позднее 172.16.66.53/23
ens22 BC:24:11:32:D6:01 net4 / vmbr5 / nic1.2040 VLAN 2040, Утилиты 172.16.70.53/23
ens23 BC:24:11:D1:4C:AE net5 / vmbr1 / nic1.2100 Production management 10.44.100.228/24
enp2s1 BC:24:11:7E:0F:4D net6 / vmbr6 / nic2 Untagged access VLAN 1 10.255.0.53/16, 172.16.66.53/23

4.2. Почему VLAN 1 подключён через отдельный физический access-порт

Рабочий путь VLAN 1:

Коммутатор: access VLAN 1 / PVID 1
    ↓ untagged Ethernet
Proxmox nic2
    ↓
vmbr6
    ↓
VM net6
    ↓
Ubuntu enp2s1

Предыдущая схема nic1.1 → vmbr2 была удалена. Linux-подинтерфейс nic1.1 ожидает кадры с тегом VLAN 1, тогда как access/native VLAN 1 приходит без тега.

4.3. Состояние физического линка и виртуального интерфейса

Внутри ВМ интерфейс может показывать UP, LOWER_UP даже при отключённом кабеле nic2. Гостевая ОС видит виртуальный VirtIO/tap-порт, а не физический carrier хоста.

Физический линк проверяется на Proxmox:

carrier = 0 означает отключённый физический линк, carrier = 1 — подключённый.

4.4. Правило миграции VLAN 2030

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


5. Параметры виртуальной машины и установка Ubuntu

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

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

  • 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 Интеграция Ubuntu с 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

Служба может иметь тип static. Это нормально: она запускается при наличии virtio-канала, созданного Proxmox.


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

8.1. Часовой пояс

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

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

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

8.3. Проверка

timedatectl status
timedatectl timesync-status
systemctl status systemd-timesyncd --no-pager
journalctl -u systemd-timesyncd --since "5 minutes ago" --no-pager

Подтверждённое состояние: часы синхронизированы, источник ntp.ubuntu.com, stratum 2.

8.4. Production NTP

После окончательного перевода default route в production management планируются серверы:

10.44.14.34
10.44.14.33

Потребуется маршрут от 10.44.100.228 и разрешение UDP/123. Пока default route остаётся через ens18, эта замена не выполняется.


9. Netplan

9.1. Отключение управления сетью со стороны cloud-init

sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg >/dev/null <<'EOF'
network: {config: disabled}
EOF

sudo mv /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.disabled

9.2. Актуальный файл /etc/netplan/01-ot-dns.yaml

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

    ens20:
      dhcp4: false
      dhcp6: false
      accept-ra: false
      link-local: []
      optional: true
      addresses:
        - 172.16.68.53/23

    ens21:
      dhcp4: false
      dhcp6: false
      accept-ra: false
      link-local: []
      optional: true

      # Будущий адрес VLAN 2030.
      # Нельзя включать, пока этот адрес назначен enp2s1.
      # addresses:
      #   - 172.16.66.53/23

    ens22:
      dhcp4: false
      dhcp6: false
      accept-ra: false
      link-local: []
      optional: true
      addresses:
        - 172.16.70.53/23

    ens23:
      dhcp4: false
      dhcp6: false
      accept-ra: false
      link-local: []
      optional: true
      addresses:
        - 10.44.100.228/24

      # Будущий production default route.
      # Включать одновременно с отключением default route на ens18.
      # routes:
      #   - to: default
      #     via: 10.44.100.1

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

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

netplan try временно применяет конфигурацию и автоматически откатывает её, если администратор не подтвердит изменения.

9.4. Подтверждённое состояние

ens18   192.168.1.53/24
enp2s1  10.255.0.53/16 172.16.66.53/23
ens20   172.16.68.53/23
ens21   без IPv4
ens22   172.16.70.53/23
ens23   10.44.100.228/24

Активный маршрут по умолчанию:

default via 192.168.1.1 dev ens18

Проверена доступность production management: 10.44.100.225, 10.44.100.1 и 10.44.100.210 отвечают через ens23.


10. Запрет маршрутизации и UFW

10.1. IP 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 --system

Проверка:

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

10.2. Текущие правила UFW

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw default deny routed

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 enable
sudo ufw status verbose

Подтверждённое состояние:

Status: active
Default: deny (incoming), allow (outgoing), disabled (routed)

10.3. DNS-правила UFW — следующий сетевой этап

Пока локальные зоны проверены только через 127.0.0.1. Перед тестами с OT-клиентов нужно открыть UDP/53 и TCP/53 строго на OT-интерфейсах.

# VLAN 1, сеть 10.255.0.0/16
sudo ufw allow in on enp2s1 proto udp from 10.255.0.0/16 to 10.255.0.53 port 53 comment 'DNS legacy OT UDP'
sudo ufw allow in on enp2s1 proto tcp from 10.255.0.0/16 to 10.255.0.53 port 53 comment 'DNS legacy OT TCP'

# VLAN 1, временная сеть 172.16.66.0/23
sudo ufw allow in on enp2s1 proto udp from 172.16.66.0/23 to 172.16.66.53 port 53 comment 'DNS brew current UDP'
sudo ufw allow in on enp2s1 proto tcp from 172.16.66.0/23 to 172.16.66.53 port 53 comment 'DNS brew current TCP'

# VLAN 2002
sudo ufw allow in on ens20 proto udp from 172.16.68.0/23 to 172.16.68.53 port 53 comment 'DNS filling UDP'
sudo ufw allow in on ens20 proto tcp from 172.16.68.0/23 to 172.16.68.53 port 53 comment 'DNS filling TCP'

# VLAN 2040
sudo ufw allow in on ens22 proto udp from 172.16.70.0/23 to 172.16.70.53 port 53 comment 'DNS utilities UDP'
sudo ufw allow in on ens22 proto tcp from 172.16.70.0/23 to 172.16.70.53 port 53 comment 'DNS utilities TCP'

Правила для ens21 добавляются после миграции адреса 172.16.66.53/23 в VLAN 2030. На management-интерфейсах порт 53 не открывается.


11. Установка BIND9

sudo apt update
sudo apt install -y bind9 bind9-utils dnsutils
Пакет Назначение
bind9 Служба named
bind9-utils named-checkconf, named-checkzone, rndc
dnsutils dig, host, nslookup

Подтверждённая версия на момент установки:

BIND 9.18.39-0ubuntu0.24.04.5-Ubuntu

bind9.service является alias для основной службы named.service. Поэтому журнал удобнее смотреть через journalctl -u named.

11.1. Резервная копия исходной конфигурации

backup_dir="/root/bind9-before-configuration-$(date +%F-%H%M%S)"
sudo mkdir -m 0700 "$backup_dir"
sudo cp -a /etc/bind "$backup_dir/"
sudo tar -C "$backup_dir" -czf "${backup_dir}.tar.gz" bind
sudo sha256sum "${backup_dir}.tar.gz"

12. Глобальная конфигурация BIND

12.1. Файл /etc/bind/named.conf.options

// Сети, которым разрешено обращаться к авторитетным OT-зонам.
acl "ot-clients" {
    localhost;
    10.255.0.0/16;
    172.16.66.0/23;
    172.16.68.0/23;
    172.16.70.0/23;
};

options {
    directory "/var/cache/bind";

    listen-on {
        127.0.0.1;
        10.255.0.53;
        172.16.66.53;
        172.16.68.53;
        172.16.70.53;
    };

    listen-on-v6 { none; };

    allow-query {
        ot-clients;
    };

    recursion no;
    allow-query-cache { none; };
    dnssec-validation no;

    allow-transfer { none; };

    version "not disclosed";
    minimal-responses yes;
    auth-nxdomain no;
};

12.2. Смысл ключевых параметров

Параметр Назначение
acl "ot-clients" Перечень сетей, которым разрешены DNS-запросы
listen-on Точные локальные адреса, на которых BIND открывает TCP/UDP 53
listen-on-v6 { none; } Запрет DNS-прослушивания по IPv6
allow-query Кто может спрашивать записи авторитетных зон
recursion no Не разрешать внешние имена через другие DNS-серверы
allow-query-cache { none; } Не предоставлять клиентам рекурсивный кэш
dnssec-validation no Валидация рекурсивных ответов не нужна, потому что рекурсия отключена
allow-transfer { none; } Запрет AXFR/IXFR до появления secondary DNS
version "not disclosed" Не публиковать точную версию в version.bind

В конфигурации намеренно отсутствуют:

forwarders { ... };
forward only;

12.3. Проверка и перечитывание

sudo named-checkconf
sudo rndc reconfig
sudo rndc flush
systemctl is-active named

Внешний запрос должен быстро получить отказ:

dig @127.0.0.1 ubuntu.com A +norecurse

Ожидается status: REFUSED.


13. Файлы зон

13.1. Каталог зон

sudo install -d -o bind -g bind -m 0750 /var/lib/bind/zones

Каталог размещён в /var/lib/bind, чтобы позднее BIND мог создавать журналы динамических обновлений .jnl.

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

Файл /var/lib/bind/zones/db.ot-samara.baltika.ru:

$ORIGIN ot-samara.baltika.ru.
$TTL 3600

@   IN  SOA smr-srv-ot-dns.ot-samara.baltika.ru. hostmaster.ot-samara.baltika.ru. (
        2026072401 ; serial
        3600       ; refresh
        900        ; retry
        1209600    ; expire
        300        ; negative cache TTL
)

@                   IN  NS      smr-srv-ot-dns.ot-samara.baltika.ru.

smr-srv-ot-dns     IN  A       10.255.0.53
smr-srv-ot-dns     IN  A       172.16.66.53
smr-srv-ot-dns     IN  A       172.16.68.53
smr-srv-ot-dns     IN  A       172.16.70.53

dns                 IN  CNAME   smr-srv-ot-dns
sudo chown bind:bind /var/lib/bind/zones/db.ot-samara.baltika.ru
sudo chmod 0640 /var/lib/bind/zones/db.ot-samara.baltika.ru

13.3. Контакт администратора в SOA

Текущее значение:

hostmaster.ot-samara.baltika.ru.

Оно соответствует адресу hostmaster@ot-samara.baltika.ru. Поле является опубликованным контактом и не используется BIND для автоматической отправки почты.

Рабочий адрес perelygin_mv@baltika.com в SOA записывается так:

perelygin_mv.baltika.com.

При замене контакта нужно увеличить serial, например с 2026072401 до 2026072402, проверить зону и перечитать её:

sudo named-checkzone ot-samara.baltika.ru /var/lib/bind/zones/db.ot-samara.baltika.ru
sudo rndc reload ot-samara.baltika.ru

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

Каждая обратная зона содержит собственные SOA и NS. Пример файла db.66.16.172:

$TTL 3600

@   IN  SOA smr-srv-ot-dns.ot-samara.baltika.ru. hostmaster.ot-samara.baltika.ru. (
        2026072401
        3600
        900
        1209600
        300
)

@   IN  NS   smr-srv-ot-dns.ot-samara.baltika.ru.
53  IN  PTR  smr-srv-ot-dns.ot-samara.baltika.ru.

Для адреса 10.255.0.53 в зоне 255.10.in-addr.arpa используется владелец 53.0:

53.0  IN  PTR  smr-srv-ot-dns.ot-samara.baltika.ru.

13.5. Файл /etc/bind/named.conf.local

zone "ot-samara.baltika.ru" {
    type master;
    file "/var/lib/bind/zones/db.ot-samara.baltika.ru";
    allow-update { none; };
    notify no;
};

zone "255.10.in-addr.arpa" {
    type master;
    file "/var/lib/bind/zones/db.255.10";
    allow-update { none; };
    notify no;
};

zone "66.16.172.in-addr.arpa" {
    type master;
    file "/var/lib/bind/zones/db.66.16.172";
    allow-update { none; };
    notify no;
};

zone "67.16.172.in-addr.arpa" {
    type master;
    file "/var/lib/bind/zones/db.67.16.172";
    allow-update { none; };
    notify no;
};

zone "68.16.172.in-addr.arpa" {
    type master;
    file "/var/lib/bind/zones/db.68.16.172";
    allow-update { none; };
    notify no;
};

zone "69.16.172.in-addr.arpa" {
    type master;
    file "/var/lib/bind/zones/db.69.16.172";
    allow-update { none; };
    notify no;
};

zone "70.16.172.in-addr.arpa" {
    type master;
    file "/var/lib/bind/zones/db.70.16.172";
    allow-update { none; };
    notify no;
};

zone "71.16.172.in-addr.arpa" {
    type master;
    file "/var/lib/bind/zones/db.71.16.172";
    allow-update { none; };
    notify no;
};

allow-update { none; }; запрещает DDNS. notify no; отключает уведомления, потому что secondary DNS пока отсутствует.


14. Основные DNS-записи — расшифровка

14.1. Общий формат

ИМЯ  TTL  КЛАСС  ТИП  ЗНАЧЕНИЕ
Элемент Смысл
$ORIGIN Базовый суффикс, который BIND добавляет к коротким именам
$TTL Время хранения ответа в кэше, в секундах
@ Вершина текущей зоны, то есть значение $ORIGIN
IN Класс Internet, используемый для обычных DNS-записей
Точка в конце имени Имя полное; $ORIGIN дописывать не нужно

14.2. SOA — паспорт зоны

SOA означает Start of Authority. Запись описывает конкретную зону:

  • MNAME — primary DNS-сервер зоны;
  • RNAME — контакт ответственного администратора;
  • serial — версия зоны;
  • refresh — как часто secondary проверяет serial;
  • retry — через сколько повторить неудачную проверку;
  • expire — когда secondary перестаёт считать старую копию действительной;
  • negative cache TTL — сколько кэшировать ответ об отсутствии имени.

14.3. NS — серверы зоны

NS означает Name Server. Запись перечисляет авторитетные DNS-серверы, которые обслуживают зону.

@ IN NS smr-srv-ot-dns.ot-samara.baltika.ru.

SOA у зоны одна, а NS-записей может быть несколько.

14.4. A и AAAA

A связывает имя с IPv4-адресом:

plc-001 IN A 172.16.66.100

AAAA является IPv6-аналогом A. В проекте IPv6 для DNS-службы не используется.

14.5. CNAME

CNAME создаёт псевдоним другого DNS-имени:

dns IN CNAME smr-srv-ot-dns

Имя, являющееся CNAME, не должно одновременно иметь A, PTR, MX и другие обычные записи.

14.6. PTR

PTR связывает IP-адрес с DNS-именем. Команда dig -x автоматически формирует обратное имя в in-addr.arpa.

172.16.66.53
→ 53.66.16.172.in-addr.arpa
→ smr-srv-ot-dns.ot-samara.baltika.ru.

14.7. MX

MX означает Mail Exchanger — сервер, принимающий электронную почту для домена.

@     IN MX 10 mail1.ot-samara.baltika.ru.
@     IN MX 20 mail2.ot-samara.baltika.ru.
mail1 IN A     172.16.66.25
mail2 IN A     172.16.66.26

Чем меньше число, тем выше приоритет. MX указывает на DNS-имя, а не на IP-адрес. Для текущей OT-зоны MX не нужен, поскольку она не предназначена для приёма почты.


15. Проверка конфигурации и зон

15.1. Проверка отдельной зоны

sudo named-checkzone \
  ot-samara.baltika.ru \
  /var/lib/bind/zones/db.ot-samara.baltika.ru

Ожидается:

zone ot-samara.baltika.ru/IN: loaded serial 2026072401
OK

15.2. Проверка всей конфигурации и загрузки зон

sudo named-checkconf
sudo named-checkconf -z

named-checkconf проверяет синтаксис конфигурации. Ключ -z дополнительно пытается загрузить все primary-зоны.

15.3. Запуск и состояние

sudo systemctl start named
systemctl is-active named
sudo rndc status
sudo journalctl -u named --since "3 minutes ago" --no-pager

Подтверждённое состояние:

number of zones: 13
server is up and running
query logging is OFF
recursive clients: 0

Число 13 складывается из восьми созданных зон, четырёх стандартных localhost-зон Ubuntu и одной служебной managed-keys zone.


16. Проверка через dig

16.1. SOA

dig @127.0.0.1 ot-samara.baltika.ru SOA +norecurse

16.2. NS

dig @127.0.0.1 ot-samara.baltika.ru NS +norecurse

16.3. A и CNAME

dig @127.0.0.1 smr-srv-ot-dns.ot-samara.baltika.ru A +norecurse
dig @127.0.0.1 dns.ot-samara.baltika.ru A +norecurse

16.4. PTR

dig @127.0.0.1 -x 10.255.0.53 +norecurse
dig @127.0.0.1 -x 172.16.66.53 +norecurse
dig @127.0.0.1 -x 172.16.68.53 +norecurse
dig @127.0.0.1 -x 172.16.70.53 +norecurse

16.5. Внешнее имя

dig @127.0.0.1 ubuntu.com A +norecurse

Ожидаемая логика:

собственные зоны → status: NOERROR, флаг aa
внешние зоны     → status: REFUSED

16.6. Основные элементы вывода dig

Поле или флаг Смысл
NOERROR Запрос обработан без ошибки
NXDOMAIN Такого имени не существует
REFUSED Политика сервера запрещает запрос
SERVFAIL Сервер не смог обработать запрос
qr Пакет является ответом
aa Авторитетный ответ из собственной зоны
rd Клиент запросил рекурсию
ra Сервер предоставляет рекурсию; в данном проекте отсутствует
QUESTION Что было запрошено
ANSWER Непосредственный ответ
AUTHORITY Информация об авторитетной зоне
ADDITIONAL Дополнительные полезные записи и EDNS OPT

17. Важный нюанс нескольких A-записей DNS-сервера

Имя smr-srv-ot-dns.ot-samara.baltika.ru сейчас имеет четыре A-записи. Это корректно для обычных авторитетных ответов, но между OT-подсетями отсутствует маршрутизация.

При будущем DDNS Windows-клиент может получить SOA MNAME, разрешить его в один из четырёх адресов и выбрать адрес другой, недоступной подсети. Поэтому DDNS нельзя включать простым широким allow-update без проектного решения.

До включения DDNS нужно выбрать один из вариантов:

  • BIND views с разными ответами для разных сетей;
  • отдельные DNS-имена primary-сервера для каждого VLAN;
  • маршрутизация между OT-подсетями;
  • централизованные обновления через DHCP и TSIG.

Разрешение DDNS только по IP-адресу клиента без TSIG не обеспечивает аутентификацию. Любой узел с разрешённым адресом сможет изменять записи зоны.


18. Правила редактирования зон

Пока используется allow-update { none; };, файл зоны можно редактировать вручную. После каждого изменения:

  1. увеличить SOA serial;
  2. выполнить named-checkzone;
  3. перечитать нужную зону через rndc reload;
  4. проверить запись через dig.
sudo named-checkzone ot-samara.baltika.ru /var/lib/bind/zones/db.ot-samara.baltika.ru
sudo rndc reload ot-samara.baltika.ru
dig @127.0.0.1 ot-samara.baltika.ru SOA +norecurse

После включения DDNS появятся файлы .jnl. Тогда прямое редактирование работающей динамической зоны запрещается. Используется:

sudo rndc freeze ot-samara.baltika.ru
# редактирование файла и увеличение serial
sudo rndc thaw ot-samara.baltika.ru

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

Проверка Состояние
Ubuntu Server 24.04.4 LTS, обновлена
Hostname smr-srv-ot-dns
QEMU Guest Agent Работает
Часовой пояс Europe/Samara
NTP Синхронизирован через ntp.ubuntu.com
Netplan Статическая многосетевая конфигурация применена и проверена
Default route 192.168.1.1 через ens18
Production management 10.44.100.228/24, локальная связность проверена
IP forwarding Отключён для IPv4 и IPv6
UFW Активен; SSH разрешён только из management-сетей
BIND9 9.18.39, служба named активна
Рекурсия Отключена
Forwarder Отсутствует
Прямая зона Загружена и отвечает с флагом aa
Семь обратных зон Загружены и проверены
DDNS Пока запрещён
Удалённый DNS-доступ Пока закрыт UFW; локальные тесты успешны

20. Следующие этапы

  1. открыть UDP/53 и TCP/53 в UFW только на активных OT-интерфейсах;
  2. подключить по одному тестовому клиенту в VLAN 1, 2002 и 2040;
  3. проверить прямые и обратные запросы с каждого клиента;
  4. после появления тестового узла в VLAN 2030 выполнить миграцию адреса 172.16.66.53/23 с enp2s1 на ens21;
  5. перевести default route с временного management на production management после проверки маршрутизации и NTP;
  6. выбрать архитектуру DDNS и способ аутентификации обновлений;
  7. спроектировать secondary DNS и разрешить контролируемые zone transfer.

Все изменения Netplan выполнять через netplan try. Перед изменением BIND создавать резервную копию, выполнять named-checkconf и named-checkzone, затем проверять результат через dig.