Установка 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 tryruntime-конфигурация откатывается, но файл на диске остаётся изменённым. До перезагрузки нужно восстановить резервную копию.
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. Исправление
- физический линк VLAN 1 перенесён на
nic2; - порт коммутатора настроен как access VLAN 1 с PVID 1;
- создан
vmbr6с портомnic2; - ВМ подключена через
net6 / vmbr6; - адреса перенесены на
enp2s1; - старые
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. Следующий этап
- выполнить контрольную перезагрузку и повторно проверить адреса, маршруты, UFW, forwarding и OT-связность;
- настроить
ens20для VLAN 2002 с адресом172.16.68.53/23без шлюза; - проверить L2-доступность VLAN 2002;
- настроить
ens22для VLAN 2040 с адресом172.16.70.53/23без шлюза; - подготовить
ens21для будущей миграции172.16.66.53/23в VLAN 2030, но пока не назначать дублирующий адрес; - настроить production management
10.44.100.228/24наens23без немедленного удаления временного management-адреса; - установить BIND9 и настроить прослушивание только localhost и OT DNS-адресов;
- создать прямую и семь обратных зон;
- открыть в UFW DNS TCP/53 и UDP/53 только для необходимых OT-сетей;
- настроить и проверить 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 работает.