Установка 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:
ip -br link show nic2
cat /sys/class/net/nic2/carrier
ethtool nic2 | grep -E 'Speed:|Duplex:|Link detected:'
bridge link show master vmbr6
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; };, файл зоны можно редактировать вручную. После каждого изменения:
- увеличить SOA serial;
- выполнить
named-checkzone; - перечитать нужную зону через
rndc reload; - проверить запись через
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. Следующие этапы
- открыть UDP/53 и TCP/53 в UFW только на активных OT-интерфейсах;
- подключить по одному тестовому клиенту в VLAN 1, 2002 и 2040;
- проверить прямые и обратные запросы с каждого клиента;
- после появления тестового узла в VLAN 2030 выполнить миграцию адреса
172.16.66.53/23сenp2s1наens21; - перевести default route с временного management на production management после проверки маршрутизации и NTP;
- выбрать архитектуру DDNS и способ аутентификации обновлений;
- спроектировать secondary DNS и разрешить контролируемые zone transfer.
Все изменения Netplan выполнять через
netplan try. Перед изменением BIND создавать резервную копию, выполнятьnamed-checkconfиnamed-checkzone, затем проверять результат черезdig.