Name Server - Системные DNS серверы

Name Server - Системные DNS серверы

Данная страница описывает настройку системных DNS серверов (name-server) и списка доменов для поиска (domain-search) в VyOS. Эти параметры определяют, как система VyOS разрешает доменные имена для всех системных операций.

Обзор

Системные DNS серверы в VyOS используются для:

  • Разрешения доменных имен для всех системных процессов
  • Обновления пакетов через apt/dpkg
  • NTP синхронизации (если NTP серверы указаны по имени)
  • Загрузки образов контейнеров (Docker/Podman)
  • VPN подключений к удаленным endpoint по имени
  • Syslog отправки на удаленные серверы по имени
  • Monitoring и alerting систем
  • API вызовов к внешним сервисам

Важные замечания

Отличие от DNS forwarding:

  • system name-server - DNS для самой системы VyOS
  • service dns forwarding - DNS сервер, который VyOS предоставляет клиентам

Приоритет конфигурации:

  • Статическая конфигурация system name-server имеет приоритет над DNS, полученными через DHCP
  • Если настроены оба, используются только статические серверы
  • DHCP DNS используются только если system name-server не настроен

VRF ограничения:

  • В текущих версиях VyOS нет способа принудительно направить системный DNS трафик через определенный VRF
  • Системные DNS запросы используют default VRF независимо от настроек management VRF

Файл конфигурации:

  • Конфигурация DNS записывается в /etc/resolv.conf
  • Файл генерируется автоматически при commit, не редактируйте вручную
  • Изменения применяются немедленно ко всем системным процессам

Конфигурация DNS серверов

Базовая настройка

IPv4 DNS серверы

# Добавить первый DNS сервер
set system name-server 8.8.8.8

# Добавить второй DNS сервер (резервный)
set system name-server 8.8.4.4

# Применить конфигурацию
commit
save

IPv6 DNS серверы

# Добавить IPv6 DNS сервер
set system name-server 2001:4860:4860::8888
set system name-server 2001:4860:4860::8844

commit
save

Dual-stack конфигурация

# Смешанная конфигурация IPv4 + IPv6
set system name-server 8.8.8.8
set system name-server 8.8.4.4
set system name-server 2001:4860:4860::8888
set system name-server 2001:4860:4860::8844

commit
save

Множественные DNS серверы

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

# Первый сервер - основной (используется первым)
set system name-server 192.168.1.53

# Второй сервер - резервный
set system name-server 192.168.1.54

# Третий сервер - fallback
set system name-server 8.8.8.8

commit
save

Поведение резолвера:

  • При недоступности первого сервера автоматически используется второй
  • При недоступности второго - третий
  • Timeout на каждый сервер составляет 5 секунд по умолчанию
  • Максимум 3 сервера рекомендуется (ограничение /etc/resolv.conf)

Удаление DNS серверов

# Удалить конкретный DNS сервер
delete system name-server 8.8.4.4

# Удалить все DNS серверы
delete system name-server

commit
save

Domain Search List

Описание

Domain-search (список доменов для поиска) определяет суффиксы, автоматически добавляемые к неполным доменным именам при резолюции.

Принцип работы:

  • При запросе короткого имени (например, server1) система добавляет суффиксы из списка
  • Запросы выполняются последовательно: server1.first-domain.com, server1.second-domain.com, и т.д.
  • При нахождении первого успешного разрешения поиск прекращается
  • Полные доменные имена (с точкой в конце или содержащие точки) не модифицируются

Ограничения RFC:

  • Максимум 6 доменов в списке
  • Каждый домен: максимум 253 символа
  • Допустимые символы: буквы, цифры, дефисы, точки
  • Домен не может начинаться или заканчиваться дефисом

Конфигурация

Базовая настройка

# Добавить первый домен для поиска
set system domain-search vyos.io

# Добавить дополнительные домены
set system domain-search vyos.net
set system domain-search vyos.network

commit
save

Результат в /etc/resolv.conf

# После применения конфигурации:
# nameserver 8.8.8.8
# nameserver 8.8.4.4
# search vyos.io vyos.net vyos.network

Проверка работы

# При настроенном domain-search: example.com

# Запрос короткого имени
vyos@router:~$ ping server1
# Система пробует: server1.example.com

# Запрос с точкой в конце (FQDN) - суффикс не добавляется
vyos@router:~$ ping server1.other-domain.org.
# Система запрашивает: server1.other-domain.org (без изменений)

# Запрос полного имени (содержит точки) - суффикс добавляется
vyos@router:~$ ping server1.local
# Система пробует: server1.local.example.com, затем server1.local

Удаление domain-search

# Удалить конкретный домен
delete system domain-search vyos.network

# Удалить все домены
delete system domain-search

commit
save

Приоритет DNS конфигурации

Статическая vs DHCP конфигурация

VyOS поддерживает получение DNS серверов через DHCP на WAN интерфейсах, но статическая конфигурация имеет приоритет.

Поведение:

  1. Если настроены статические system name-server - используются только они
  2. Если статические серверы не настроены, используются DNS из DHCP
  3. Если DHCP не предоставляет DNS и нет статических - система использует встроенный fallback (127.0.0.1 для локального кэша DNS, если включен)

Пример 1: Только статические серверы

# Статическая конфигурация
set system name-server 8.8.8.8
set system name-server 8.8.4.4

# DHCP на WAN интерфейсе (предоставляет DNS, но они игнорируются)
set interfaces ethernet eth0 address dhcp

commit
save

# Результат: используются только 8.8.8.8 и 8.8.4.4

Пример 2: Только DHCP серверы

# Нет статической конфигурации name-server

# DHCP на WAN интерфейсе (предоставляет DNS)
set interfaces ethernet eth0 address dhcp

commit
save

# Результат: используются DNS серверы, полученные через DHCP

Пример 3: Гибридная конфигурация (не работает как ожидается)

# ОШИБКА: Попытка совместить статические и DHCP DNS
set system name-server 8.8.8.8
set interfaces ethernet eth0 address dhcp

# Результат: используется только 8.8.8.8, DHCP DNS игнорируются

Рекомендация:

  • Для production систем используйте только статические DNS серверы
  • DHCP DNS оставляйте для временных или тестовых конфигураций
  • Не смешивайте оба подхода - это приводит к путанице

Переопределение DHCP DNS

Если нужно использовать статические DNS вместо DHCP:

# Отключить получение DNS через DHCP на интерфейсе
set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 dhcp-options no-default-route
set interfaces ethernet eth0 dhcp-options reject nameserver

# Настроить статические DNS
set system name-server 8.8.8.8
set system name-server 8.8.4.4

commit
save

Примечание: Опция reject nameserver может быть недоступна в некоторых версиях VyOS. В таком случае просто настройте статические серверы - они будут иметь приоритет.

Облачные провайдеры

Yandex Cloud

Yandex Cloud предоставляет внутренние DNS серверы для резолюции внутренних имен виртуальных машин и сервисов.

Использование внутреннего DNS Yandex Cloud

# Внутренний DNS сервер Yandex Cloud (второй IP из подсети)
# Для подсети 10.128.0.0/24 это будет 10.128.0.2
set system name-server 10.128.0.2

commit
save

Принцип работы:

  • Каждая подсеть в Yandex Cloud имеет встроенный DNS сервер на втором IP адресе
  • Для подсети 10.128.0.0/24 DNS: 10.128.0.2
  • Для подсети 192.168.1.0/24 DNS: 192.168.1.2
  • Резолвит внутренние FQDN виртуальных машин: vm-name.auto.internal

Использование публичных DNS Yandex

# Публичные DNS серверы Yandex (77.88.8.8)
set system name-server 77.88.8.8
set system name-server 77.88.8.1

commit
save

Характеристики Yandex DNS:

  • Адреса: 77.88.8.8, 77.88.8.1
  • Поддержка DNSSEC
  • Фильтрация вредоносных сайтов (опционально)
  • Низкая латентность для клиентов в России

Гибридная конфигурация Yandex Cloud

# Внутренний DNS для локальных имен + публичный для интернета
set system name-server 10.128.0.2
set system name-server 77.88.8.8
set system name-server 77.88.8.1

# Domain-search для внутренних имен
set system domain-search auto.internal
set system domain-search ru-central1.internal

commit
save

Пример полной конфигурации для Yandex Cloud

configure

# Hostname
set system host-name vyos-gateway-ru-central1-a
set system domain-name ru-central1.internal

# DNS конфигурация
# Первый - внутренний DNS Yandex Cloud (резолвит *.auto.internal)
set system name-server 10.128.0.2

# Второй - публичный DNS Yandex (для внешних имен)
set system name-server 77.88.8.8

# Третий - резервный публичный DNS
set system name-server 77.88.8.1

# Domain search для автоматического добавления суффиксов
set system domain-search ru-central1.internal
set system domain-search auto.internal

# NTP серверы (для проверки DNS резолюции)
set service ntp server ntp1.yandex.ru
set service ntp server ntp2.yandex.ru

commit
save
exit

Проверка:

# Проверить внутреннюю резолюцию
vyos@vyos-gateway-ru-central1-a:~$ nslookup vm-name.auto.internal
# Должен резолвится через 10.128.0.2

# Проверить внешнюю резолюцию
vyos@vyos-gateway-ru-central1-a:~$ nslookup google.com
# Должен резолвится через 77.88.8.8

# Проверить конфигурацию
vyos@vyos-gateway-ru-central1-a:~$ cat /etc/resolv.conf
# nameserver 10.128.0.2
# nameserver 77.88.8.8
# nameserver 77.88.8.1
# search ru-central1.internal auto.internal

VK Cloud (Cloud.ru)

VK Cloud предоставляет внутренние DNS серверы для резолюции виртуальных машин внутри проекта.

Использование внутреннего DNS VK Cloud

# Внутренний DNS сервер VK Cloud (второй IP из подсети)
# Для подсети 10.0.0.0/24 это будет 10.0.0.2
set system name-server 10.0.0.2

commit
save

Принцип работы:

  • Аналогично Yandex Cloud, каждая подсеть имеет DNS на втором IP
  • Резолвит внутренние FQDN виртуальных машин
  • Формат FQDN: vm-name.mcs.local или vm-name.cloud.local

Использование публичных DNS VK Cloud

VK Cloud не предоставляет публичные DNS серверы. Рекомендуется использовать:

# Google DNS
set system name-server 8.8.8.8
set system name-server 8.8.4.4

# Или Cloudflare DNS
set system name-server 1.1.1.1
set system name-server 1.0.0.1

# Или Yandex DNS
set system name-server 77.88.8.8
set system name-server 77.88.8.1

commit
save

Пример полной конфигурации для VK Cloud

configure

# Hostname
set system host-name vyos-gateway-msk1
set system domain-name msk1.cloud.vk.com

# DNS конфигурация
# Внутренний DNS VK Cloud (резолвит локальные VM)
set system name-server 10.0.0.2

# Публичные DNS для внешних имен
set system name-server 8.8.8.8
set system name-server 8.8.4.4

# Domain search
set system domain-search msk1.cloud.vk.com
set system domain-search mcs.local

# NTP
set service ntp server 0.ru.pool.ntp.org
set service ntp server 1.ru.pool.ntp.org

commit
save
exit

AWS (Amazon Web Services)

AWS предоставляет внутренний DNS резолвер для каждого VPC.

Использование Amazon Route 53 Resolver

# Amazon Route 53 Resolver (VPC DNS)
# Всегда доступен на IP: <VPC_CIDR_BASE> + 2
# Для VPC 10.0.0.0/16 это будет 10.0.0.2
set system name-server 10.0.0.2

commit
save

Принцип работы:

  • Адрес DNS: <VPC_CIDR_BASE> + 2
  • Резолвит внутренние EC2 имена: ip-10-0-1-5.ec2.internal
  • Резолвит Route 53 Private Hosted Zones
  • Перенаправляет публичные запросы в интернет

Пример для AWS

configure

# Hostname
set system host-name vyos-gateway-us-east-1a
set system domain-name us-east-1.compute.internal

# DNS конфигурация
set system name-server 10.0.0.2

# Domain search для EC2
set system domain-search us-east-1.compute.internal
set system domain-search ec2.internal

# NTP (AWS Time Sync Service)
set service ntp server 169.254.169.123

commit
save
exit

Azure (Microsoft Azure)

Azure предоставляет встроенный DNS для каждого виртуального сетевого окружения.

Использование Azure DNS

# Azure Virtual Network DNS
# Адрес: 168.63.129.16 (специальный Azure metadata IP)
set system name-server 168.63.129.16

commit
save

Принцип работы:

  • Адрес: 168.63.129.16 (используется для всех VNet)
  • Резолвит внутренние Azure VM имена
  • Поддерживает Azure Private DNS Zones
  • Перенаправляет публичные запросы

Пример для Azure

configure

# Hostname
set system host-name vyos-gateway-westeurope
set system domain-name internal.cloudapp.net

# DNS конфигурация
set system name-server 168.63.129.16

# Domain search
set system domain-search internal.cloudapp.net

# NTP (Azure NTP)
set service ntp server time.windows.com

commit
save
exit

Google Cloud Platform (GCP)

GCP предоставляет внутренний DNS резолвер для каждой VPC сети.

Использование Google Cloud DNS

# Google Cloud DNS (metadata server)
set system name-server 169.254.169.254

# Или использовать внутренний DNS VPC
# Для подсети 10.128.0.0/20 это будет 10.128.0.2
set system name-server 10.128.0.2

commit
save

Принцип работы:

  • Metadata DNS: 169.254.169.254
  • VPC DNS: <SUBNET_CIDR_BASE> + 2
  • Резолвит внутренние GCP VM имена: vm-name.c.project-id.internal
  • Поддерживает Cloud DNS Private Zones

Пример для GCP

configure

# Hostname
set system host-name vyos-gateway-europe-west1-b
set system domain-name c.my-project-id.internal

# DNS конфигурация
set system name-server 169.254.169.254
set system name-server 10.128.0.2

# Domain search
set system domain-search c.my-project-id.internal

# NTP (Google Public NTP)
set service ntp server time.google.com

commit
save
exit

Примеры конфигураций

Пример 1: Корпоративная сеть с внутренним DNS

Задача: Настроить VyOS для использования корпоративного DNS с резервными публичными серверами.

configure

# DNS конфигурация
# Основной корпоративный DNS (Active Directory)
set system name-server 192.168.1.10

# Резервный корпоративный DNS
set system name-server 192.168.1.11

# Публичный резервный (на случай отказа корпоративных)
set system name-server 8.8.8.8

# Domain search для корпоративных доменов
set system domain-search corp.example.com
set system domain-search example.com

# Hostname
set system host-name vyos-gateway
set system domain-name corp.example.com

commit
save
exit

Проверка:

# Проверить резолюцию корпоративных имен
nslookup dc01
# Должен резолвится как dc01.corp.example.com через 192.168.1.10

# Проверить резолюцию внешних имен
nslookup google.com
# Должен резолвится через корпоративный DNS

# Проверить конфигурацию
cat /etc/resolv.conf

Пример 2: Edge router с публичными DNS

Задача: Настроить пограничный маршрутизатор с надежными публичными DNS.

configure

# DNS конфигурация с несколькими провайдерами
# Google DNS
set system name-server 8.8.8.8
set system name-server 8.8.4.4

# Cloudflare DNS
set system name-server 1.1.1.1

# Hostname
set system host-name vyos-edge-router
set system domain-name edge.local

commit
save
exit

Пример 3: Multi-site с условной forwarding

Задача: Головной офис с филиалами, каждый филиал имеет свой DNS домен.

configure

# Основной офис (Москва)
set system host-name vyos-hq-moscow
set system domain-name moscow.corp.local

# DNS серверы
# Локальный DNS (резолвит moscow.corp.local)
set system name-server 192.168.1.53

# DNS головного офиса (резолвит corp.local и филиалы)
set system name-server 10.0.0.53

# Публичный резервный
set system name-server 8.8.8.8

# Domain search для всех филиалов
set system domain-search moscow.corp.local
set system domain-search spb.corp.local
set system domain-search ekb.corp.local
set system domain-search corp.local

commit
save
exit

Филиал (Санкт-Петербург):

configure

set system host-name vyos-branch-spb
set system domain-name spb.corp.local

# Локальный DNS филиала
set system name-server 192.168.2.53

# DNS головного офиса через VPN
set system name-server 10.0.0.53

# Публичный резервный
set system name-server 8.8.8.8

# Domain search
set system domain-search spb.corp.local
set system domain-search corp.local

commit
save
exit

Пример 4: DMZ с ограниченным DNS

Задача: DMZ роутер, который должен резолвить только определенные домены.

configure

set system host-name vyos-dmz
set system domain-name dmz.example.com

# DNS сервер с whitelist для DMZ
set system name-server 10.10.10.53

# Резервный публичный (ограниченный firewall правилами)
set system name-server 8.8.8.8

# Domain search только для DMZ
set system domain-search dmz.example.com

commit
save
exit

Пример 5: IPv6-only сеть

Задача: Настроить DNS для IPv6-only инфраструктуры.

configure

set system host-name vyos-ipv6-router
set system domain-name ipv6.example.com

# Google DNS (IPv6)
set system name-server 2001:4860:4860::8888
set system name-server 2001:4860:4860::8844

# Cloudflare DNS (IPv6)
set system name-server 2606:4700:4700::1111
set system name-server 2606:4700:4700::1001

# Domain search
set system domain-search ipv6.example.com

commit
save
exit

Пример 6: Dual-stack с приоритетом IPv6

Задача: Dual-stack сеть с предпочтением IPv6 для DNS.

configure

set system host-name vyos-dualstack
set system domain-name dualstack.example.com

# IPv6 DNS серверы (приоритет - указаны первыми)
set system name-server 2001:4860:4860::8888
set system name-server 2001:4860:4860::8844

# IPv4 DNS серверы (fallback)
set system name-server 8.8.8.8
set system name-server 8.8.4.4

# Domain search
set system domain-search dualstack.example.com

commit
save
exit

Команды проверки и мониторинга

Проверка конфигурации DNS

# Показать настроенные DNS серверы
show configuration system name-server

# Показать domain-search
show configuration system domain-search

# Показать всю системную конфигурацию
show configuration system

Проверка /etc/resolv.conf

# Просмотр актуального содержимого resolv.conf
cat /etc/resolv.conf

# Пример вывода:
# nameserver 8.8.8.8
# nameserver 8.8.4.4
# search vyos.io vyos.net

Тестирование DNS резолюции

Базовые команды

# DNS lookup с nslookup
nslookup google.com

# Вывод:
# Server:         8.8.8.8
# Address:        8.8.8.8#53
#
# Non-authoritative answer:
# Name:   google.com
# Address: 142.250.185.46
# DNS lookup с dig
dig google.com

# Детальная информация
dig google.com +short

# Проверка конкретного DNS сервера
dig @8.8.8.8 google.com
# DNS lookup с host
host google.com

# Reverse DNS lookup
host 8.8.8.8

Проверка domain-search

# При настроенном domain-search: example.com

# Запрос короткого имени (должен добавиться суффикс)
dig server1

# Вывод покажет: server1.example.com

# Проверка с verbose
dig +search server1

Трассировка DNS запросов

# Полная трассировка DNS резолюции
dig +trace google.com

# Вывод:
# . 86400 IN NS a.root-servers.net.
# ...
# google.com. 172800 IN NS ns1.google.com.
# ...
# google.com. 300 IN A 142.250.185.46

Проверка DNSSEC

# Проверить DNSSEC подписи
dig google.com +dnssec

# Проверить валидность DNSSEC
dig google.com +dnssec +multiline

Мониторинг производительности DNS

# Измерить время резолюции
time nslookup google.com

# Вывод:
# real    0m0.045s
# user    0m0.012s
# sys     0m0.008s
# Статистика DNS запросов с dig
dig google.com +stats

# Вывод включает:
# ;; Query time: 45 msec
# ;; SERVER: 8.8.8.8#53(8.8.8.8)
# ;; WHEN: Wed Jan 15 10:30:45 MSK 2025
# ;; MSG SIZE  rcvd: 55

Проверка доступности DNS серверов

# Ping DNS сервера
ping -c 4 8.8.8.8

# Проверить UDP порт 53
nc -vuz 8.8.8.8 53

# Или с nmap
nmap -sU -p 53 8.8.8.8

Проверка DNS для определенного домена

# Запрос всех DNS записей
dig example.com ANY

# Запрос конкретных типов записей
dig example.com A      # IPv4 адрес
dig example.com AAAA   # IPv6 адрес
dig example.com MX     # Mail exchange
dig example.com NS     # Name servers
dig example.com TXT    # Text records
dig example.com SOA    # Start of authority

Проверка reverse DNS

# Reverse lookup (PTR запись)
dig -x 8.8.8.8

# Или с host
host 8.8.8.8

# Или с nslookup
nslookup 8.8.8.8

Логирование DNS запросов

# Включить debug логирование DNS (временно)
sudo tcpdump -i any port 53 -vv

# Логировать DNS запросы в файл
sudo tcpdump -i any port 53 -w /tmp/dns-traffic.pcap

# Анализ сохраненного файла
sudo tcpdump -r /tmp/dns-traffic.pcap -vv

Проверка DNS кэша

# VyOS не имеет встроенного DNS кэша на уровне системы
# Но если включен dns forwarding, можно проверить его кэш

# Показать статистику dns forwarding (если настроен)
show dns forwarding statistics

# Очистить кэш dns forwarding (если настроен)
reset dns forwarding cache

Устранение неполадок (Troubleshooting)

Проблема 1: DNS не резолвит имена

Симптомы:

  • Команды nslookup, dig, host возвращают ошибки
  • Система не может обновить пакеты через apt update
  • NTP не синхронизируется (если NTP серверы указаны по имени)

Диагностика:

# Проверить конфигурацию DNS
show configuration system name-server

# Проверить /etc/resolv.conf
cat /etc/resolv.conf

# Проверить доступность DNS серверов
ping 8.8.8.8

# Проверить UDP порт 53
nc -vuz 8.8.8.8 53

# Проверить DNS резолюцию
nslookup google.com

Решение:

# Если DNS серверы не настроены - настроить
configure
set system name-server 8.8.8.8
set system name-server 8.8.4.4
commit
save
exit

# Проверить firewall правила (DNS должен быть разрешен)
show firewall

# Добавить правило, если DNS блокируется
configure
set firewall name WAN_LOCAL rule 100 action accept
set firewall name WAN_LOCAL rule 100 protocol udp
set firewall name WAN_LOCAL rule 100 destination port 53
commit
save
exit

# Проверить результат
nslookup google.com

Проблема 2: Медленная DNS резолюция

Симптомы:

  • Команды DNS занимают несколько секунд
  • Веб-браузинг медленный
  • SSH подключения долго устанавливаются

Диагностика:

# Измерить время резолюции
time nslookup google.com

# Проверить RTT к DNS серверам
ping -c 10 8.8.8.8

# Проверить статистику dig
dig google.com +stats

# Трассировка до DNS сервера
traceroute 8.8.8.8

Решение:

# Использовать более быстрые или близкие DNS серверы
configure

# Удалить медленные серверы
delete system name-server 8.8.8.8

# Добавить быстрые локальные серверы
set system name-server 192.168.1.53  # Локальный DNS
set system name-server 77.88.8.8     # Yandex DNS (для России)

commit
save
exit

# Проверить улучшение
time nslookup google.com

Проблема 3: Domain-search не работает

Симптомы:

  • Короткие имена не резолвятся
  • Необходимо указывать полные FQDN

Диагностика:

# Проверить конфигурацию domain-search
show configuration system domain-search

# Проверить /etc/resolv.conf
cat /etc/resolv.conf | grep search

# Тестовый запрос
dig +search server1

Решение:

# Настроить domain-search
configure
set system domain-search example.com
commit
save
exit

# Проверить /etc/resolv.conf
cat /etc/resolv.conf
# Должна быть строка: search example.com

# Тестовый запрос
dig server1
# Должен резолвится как server1.example.com

Проблема 4: DNS резолвит только IPv6 или только IPv4

Симптомы:

  • Dual-stack имена резолвятся только в один тип адресов
  • Нет A или AAAA записей

Диагностика:

# Проверить IPv4 резолюцию
dig google.com A

# Проверить IPv6 резолюцию
dig google.com AAAA

# Проверить оба
dig google.com A AAAA

Решение:

# Убедиться, что используются DNS серверы, поддерживающие оба протокола
configure

# Для dual-stack использовать современные DNS
set system name-server 8.8.8.8
set system name-server 2001:4860:4860::8888

commit
save
exit

# Проверить оба типа записей
dig google.com A
dig google.com AAAA

Проблема 5: Конфликт статических и DHCP DNS

Симптомы:

  • DNS серверы меняются после перезагрузки
  • /etc/resolv.conf содержит неожиданные серверы

Диагностика:

# Проверить статическую конфигурацию
show configuration system name-server

# Проверить DHCP конфигурацию на интерфейсах
show configuration interfaces ethernet

# Проверить /etc/resolv.conf
cat /etc/resolv.conf

Решение:

# Вариант 1: Использовать только статические DNS
configure
set system name-server 8.8.8.8
set system name-server 8.8.4.4
commit
save
exit

# Вариант 2: Использовать только DHCP DNS
configure
delete system name-server
commit
save
exit

# Вариант 3: Отключить DHCP DNS на интерфейсе (если поддерживается)
configure
set interfaces ethernet eth0 dhcp-options no-default-route
commit
save
exit

Проблема 6: DNS не резолвит внутренние cloud имена

Симптомы:

  • Внешние имена резолвятся, внутренние (*.auto.internal, *.ec2.internal) - нет
  • Используются публичные DNS вместо облачных

Диагностика:

# Проверить конфигурацию DNS
show configuration system name-server

# Попытаться резолвить внутреннее имя
nslookup vm-name.auto.internal

# Проверить, какой DNS сервер используется
dig vm-name.auto.internal

Решение (Yandex Cloud):

configure

# Добавить внутренний DNS Yandex Cloud первым
set system name-server 10.128.0.2

# Затем публичные
set system name-server 77.88.8.8

# Domain-search для внутренних имен
set system domain-search auto.internal
set system domain-search ru-central1.internal

commit
save
exit

# Проверить
nslookup vm-name.auto.internal

Решение (AWS):

configure

# Использовать VPC DNS
set system name-server 10.0.0.2

# Domain-search для EC2
set system domain-search us-east-1.compute.internal
set system domain-search ec2.internal

commit
save
exit

# Проверить
nslookup ip-10-0-1-5.ec2.internal

Проблема 7: VRF routing для DNS не работает

Симптомы:

  • Management VRF настроен, но DNS трафик идет через default VRF
  • DNS недоступен в изолированном VRF

Объяснение:

В текущих версиях VyOS нет способа направить системный DNS трафик через определенный VRF. Это известное ограничение.

Workaround:

# Вариант 1: Использовать DNS сервер доступный из default VRF
configure
set system name-server 8.8.8.8  # Публичный DNS через default route
commit
save
exit

# Вариант 2: Настроить static route для DNS сервера
configure
set protocols static route 192.168.1.53/32 next-hop 10.0.0.1
commit
save
exit

# Вариант 3: Использовать DNS forwarding с source-address
# (позволяет указать source IP для запросов)
configure
set service dns forwarding listen-address 127.0.0.1
set service dns forwarding name-server 192.168.1.53
set service dns forwarding source-address 10.0.0.10
commit
save
exit

# Изменить system name-server на localhost
configure
set system name-server 127.0.0.1
commit
save
exit

Проблема 8: DNSSEC валидация не работает

Симптомы:

  • DNSSEC-подписанные домены не резолвятся
  • Ошибки валидации DNSSEC

Диагностика:

# Проверить DNSSEC валидацию
dig google.com +dnssec

# Проверить, поддерживает ли DNS сервер DNSSEC
dig @8.8.8.8 . DNSKEY

Решение:

# Использовать DNS серверы с поддержкой DNSSEC
configure

# Google DNS (поддерживает DNSSEC)
set system name-server 8.8.8.8

# Cloudflare DNS (поддерживает DNSSEC)
set system name-server 1.1.1.1

# Yandex DNS (поддерживает DNSSEC)
set system name-server 77.88.8.8

commit
save
exit

# Проверить DNSSEC
dig google.com +dnssec

Лучшие практики (Best Practices)

1. Выбор DNS серверов

Используйте минимум 2 DNS сервера:

# Хорошо: 2-3 сервера
set system name-server 8.8.8.8
set system name-server 8.8.4.4

# Плохо: только один сервер
set system name-server 8.8.8.8

Выбирайте близкие по RTT серверы:

# Проверить RTT
ping -c 10 8.8.8.8
ping -c 10 77.88.8.8
ping -c 10 1.1.1.1

# Использовать сервер с наименьшим RTT
# Для России обычно:
set system name-server 77.88.8.8  # Yandex, ~5-10ms
set system name-server 8.8.8.8    # Google, ~20-30ms

Комбинируйте разных провайдеров:

# Диверсификация провайдеров DNS
set system name-server 77.88.8.8   # Yandex
set system name-server 8.8.8.8     # Google
set system name-server 1.1.1.1     # Cloudflare

2. Облачные инфраструктуры

Всегда используйте внутренний облачный DNS первым:

# Yandex Cloud
set system name-server 10.128.0.2   # Внутренний DNS
set system name-server 77.88.8.8    # Публичный резервный

# AWS
set system name-server 10.0.0.2     # VPC DNS
set system name-server 8.8.8.8      # Публичный резервный

# Azure
set system name-server 168.63.129.16  # Azure DNS
set system name-server 8.8.8.8        # Публичный резервный

Настраивайте domain-search для внутренних имен:

# Yandex Cloud
set system domain-search auto.internal
set system domain-search ru-central1.internal

# AWS
set system domain-search us-east-1.compute.internal
set system domain-search ec2.internal

3. Корпоративные сети

Приоритизируйте внутренние DNS:

# Корпоративный DNS первый (резолвит internal.corp.com)
set system name-server 192.168.1.10

# Резервный корпоративный
set system name-server 192.168.1.11

# Публичный только как last resort
set system name-server 8.8.8.8

Используйте domain-search для удобства:

set system domain-search corp.example.com
set system domain-search example.com

# Позволяет использовать:
# ping dc01 -> dc01.corp.example.com
# ping exchange -> exchange.corp.example.com

4. Безопасность

Используйте только доверенные DNS серверы:

# Хорошо: известные публичные DNS
set system name-server 8.8.8.8     # Google
set system name-server 1.1.1.1     # Cloudflare
set system name-server 77.88.8.8   # Yandex

# Плохо: случайные неизвестные DNS
set system name-server 123.45.67.89

Рассмотрите DNS over TLS/HTTPS для конфиденциальности:

Примечание: VyOS не поддерживает DoT/DoH напрямую через system name-server, но можно настроить через dns forwarding или внешний DNS proxy.

# Вариант с dns forwarding (требует дополнительных шагов)
set service dns forwarding listen-address 127.0.0.1
set service dns forwarding name-server 1.1.1.1
# Дополнительная настройка DoH требует ручной конфигурации

set system name-server 127.0.0.1

Мониторьте DNS трафик:

# Периодически проверяйте DNS запросы
sudo tcpdump -i any port 53 -c 100

# Ищите подозрительные запросы

5. Производительность

Минимизируйте latency:

# Проверить RTT к различным DNS серверам
ping -c 10 8.8.8.8
ping -c 10 77.88.8.8
ping -c 10 1.1.1.1

# Использовать самые быстрые

Ограничьте количество domain-search записей:

# Хорошо: 1-3 домена
set system domain-search corp.local
set system domain-search local

# Плохо: слишком много доменов (замедляет резолюцию)
set system domain-search domain1.com
set system domain-search domain2.com
set system domain-search domain3.com
set system domain-search domain4.com
set system domain-search domain5.com
set system domain-search domain6.com

Используйте локальный DNS кэш:

# Настроить dns forwarding как локальный кэш
set service dns forwarding listen-address 127.0.0.1
set service dns forwarding cache-size 10000
set service dns forwarding name-server 8.8.8.8
set service dns forwarding name-server 8.8.4.4

# Изменить system name-server на localhost
set system name-server 127.0.0.1

commit
save

6. Резервирование

Избыточность DNS серверов:

# Минимум 2, рекомендуется 3
set system name-server 192.168.1.10
set system name-server 192.168.1.11
set system name-server 8.8.8.8

Географическая избыточность:

# DNS серверы в разных дата-центрах
set system name-server 10.0.1.53   # DC1
set system name-server 10.1.1.53   # DC2
set system name-server 8.8.8.8     # Публичный резервный

7. Мониторинг и алертинг

Регулярно проверяйте DNS:

# Скрипт мониторинга DNS
sudo tee /config/scripts/dns-monitor.sh > /dev/null <<'EOF'
#!/bin/bash
# Мониторинг DNS резолюции

DNS_SERVERS="8.8.8.8 8.8.4.4"
TEST_DOMAIN="google.com"
TIMEOUT=5

for server in $DNS_SERVERS; do
    response=$(dig @$server $TEST_DOMAIN +time=$TIMEOUT +tries=1 +short 2>&1)
    if [ $? -eq 0 ] && [ -n "$response" ]; then
        echo "DNS $server: OK"
        logger -t dns-monitor "DNS $server: OK"
    else
        echo "DNS $server: FAILED"
        logger -t dns-monitor "ERROR: DNS $server FAILED"
        # Отправить алерт
    fi
done
EOF

chmod +x /config/scripts/dns-monitor.sh

# Запланировать проверку каждые 5 минут
set system task-scheduler task dns-monitor interval '*/5 * * * *'
set system task-scheduler task dns-monitor executable path '/config/scripts/dns-monitor.sh'

commit
save

Алертинг на потерю DNS:

# Интеграция с системой мониторинга
# Например, отправка в syslog для анализа SIEM
set system syslog host 10.0.0.100 facility local7 level warning

8. Документирование

Документируйте выбор DNS серверов:

# Добавьте комментарии в конфигурацию
configure
set system name-server 192.168.1.10
set system name-server 192.168.1.11
set system name-server 8.8.8.8

commit comment "DNS: 192.168.1.10/11 - корпоративные AD DNS, 8.8.8.8 - резервный"
save

Храните историю изменений:

# Просмотр истории изменений DNS
show system commit

# Сравнение конфигураций
show system commit diff 10

9. IPv6 Ready

Поддерживайте dual-stack:

# IPv4 + IPv6 DNS серверы
set system name-server 8.8.8.8
set system name-server 8.8.4.4
set system name-server 2001:4860:4860::8888
set system name-server 2001:4860:4860::8844

commit
save

10. Testing и Validation

Тестируйте DNS после изменений:

# После изменения конфигурации DNS всегда тестируйте
nslookup google.com
nslookup internal-server.corp.local
ping -c 4 ntp.pool.org

# Проверить время резолюции
time nslookup google.com

# Проверить domain-search
dig +search server1

Интеграция с другими сервисами VyOS

NTP

DNS используется для резолюции NTP серверов, указанных по имени:

configure

# DNS для резолюции NTP серверов
set system name-server 8.8.8.8
set system name-server 8.8.4.4

# NTP серверы по имени (требуют DNS резолюции)
set service ntp server 0.pool.ntp.org
set service ntp server 1.pool.ntp.org

commit
save
exit

# Проверить, что NTP серверы резолвятся
nslookup 0.pool.ntp.org
show ntp

Syslog

DNS используется для резолюции удаленных syslog серверов:

configure

# DNS конфигурация
set system name-server 8.8.8.8

# Syslog сервер по имени
set system syslog host syslog.corp.local facility all level info
set system syslog host syslog.corp.local protocol tcp
set system syslog host syslog.corp.local port 514

commit
save
exit

# Проверить резолюцию syslog сервера
nslookup syslog.corp.local

DNS Forwarding

System name-server может использоваться вместе с dns forwarding:

configure

# System DNS (для самой VyOS системы)
set system name-server 8.8.8.8
set system name-server 8.8.4.4

# DNS Forwarding (для клиентов LAN)
set service dns forwarding listen-address 192.168.1.1
set service dns forwarding name-server 8.8.8.8
set service dns forwarding name-server 8.8.4.4

commit
save
exit

Разница:

  • system name-server - используется самой системой VyOS
  • service dns forwarding name-server - upstream серверы для клиентов

VPN

DNS используется для резолюции удаленных VPN endpoint:

configure

# DNS конфигурация
set system name-server 8.8.8.8

# IPsec VPN с peer по имени
set vpn ipsec site-to-site peer vpn-gateway.example.com
set vpn ipsec site-to-site peer vpn-gateway.example.com authentication mode pre-shared-secret
set vpn ipsec site-to-site peer vpn-gateway.example.com authentication pre-shared-secret secret123

commit
save
exit

# Проверить резолюцию VPN peer
nslookup vpn-gateway.example.com

Containers

DNS используется для загрузки container images:

configure

# DNS конфигурация
set system name-server 8.8.8.8

# Container с image из registry по имени
set container name nginx image docker.io/nginx:latest

commit
save
exit

# Проверить резолюцию registry
nslookup docker.io

Скрипты автоматизации

Скрипт проверки DNS здоровья

sudo tee /config/scripts/dns-health-check.sh > /dev/null <<'EOF'
#!/bin/bash
# DNS Health Check Script

# Параметры
TEST_DOMAINS="google.com cloudflare.com yandex.ru"
DNS_SERVERS=$(grep ^nameserver /etc/resolv.conf | awk '{print $2}')
TIMEOUT=5

echo "=== DNS Health Check ==="
echo "Date: $(date)"
echo ""

# Проверка каждого DNS сервера
for dns in $DNS_SERVERS; do
    echo "Testing DNS server: $dns"

    # Проверка доступности DNS сервера
    if ping -c 1 -W 1 $dns > /dev/null 2>&1; then
        echo "  [OK] DNS server is reachable"
    else
        echo "  [FAIL] DNS server is unreachable"
        continue
    fi

    # Проверка резолюции тестовых доменов
    for domain in $TEST_DOMAINS; do
        start=$(date +%s%N)
        result=$(dig @$dns $domain +time=$TIMEOUT +tries=1 +short 2>&1)
        end=$(date +%s%N)

        if [ $? -eq 0 ] && [ -n "$result" ]; then
            duration=$(( ($end - $start) / 1000000 ))
            echo "  [OK] $domain resolved in ${duration}ms"
        else
            echo "  [FAIL] $domain resolution failed"
        fi
    done

    echo ""
done

echo "=== DNS Health Check Complete ==="
EOF

chmod +x /config/scripts/dns-health-check.sh

# Запустить проверку
/config/scripts/dns-health-check.sh

Скрипт автоматического выбора лучшего DNS

sudo tee /config/scripts/dns-benchmark.sh > /dev/null <<'EOF'
#!/bin/bash
# DNS Benchmark Script

DNS_CANDIDATES="8.8.8.8 8.8.4.4 1.1.1.1 1.0.0.1 77.88.8.8 77.88.8.1"
TEST_DOMAIN="google.com"
TEST_COUNT=10

echo "=== DNS Benchmark ==="

declare -A dns_times

for dns in $DNS_CANDIDATES; do
    echo -n "Testing $dns ... "

    total=0
    success=0

    for i in $(seq 1 $TEST_COUNT); do
        start=$(date +%s%N)
        dig @$dns $TEST_DOMAIN +time=2 +tries=1 +short > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            end=$(date +%s%N)
            duration=$(( ($end - $start) / 1000000 ))
            total=$(( $total + $duration ))
            success=$(( $success + 1 ))
        fi
    done

    if [ $success -gt 0 ]; then
        avg=$(( $total / $success ))
        dns_times[$dns]=$avg
        echo "Average: ${avg}ms (${success}/${TEST_COUNT} success)"
    else
        echo "FAILED"
    fi
done

echo ""
echo "=== Recommended DNS Servers ==="

# Сортировать по времени
for dns in "${!dns_times[@]}"; do
    echo "${dns_times[$dns]} $dns"
done | sort -n | head -3 | while read time dns; do
    echo "set system name-server $dns  # ${time}ms"
done
EOF

chmod +x /config/scripts/dns-benchmark.sh

# Запустить benchmark
/config/scripts/dns-benchmark.sh

Скрипт экспорта DNS конфигурации

sudo tee /config/scripts/export-dns-config.sh > /dev/null <<'EOF'
#!/bin/vbash
# Export DNS Configuration to JSON

source /opt/vyatta/etc/functions/script-template

OUTPUT_FILE="/config/dns-config-export.json"

echo "{" > "$OUTPUT_FILE"
echo "  \"timestamp\": \"$(date -Iseconds)\"," >> "$OUTPUT_FILE"
echo "  \"hostname\": \"$(hostname)\"," >> "$OUTPUT_FILE"
echo "  \"name_servers\": [" >> "$OUTPUT_FILE"

# Получить DNS серверы
NAMESERVERS=$(grep ^nameserver /etc/resolv.conf | awk '{print $2}')
FIRST=1
for ns in $NAMESERVERS; do
    if [ $FIRST -eq 1 ]; then
        FIRST=0
    else
        echo "," >> "$OUTPUT_FILE"
    fi
    echo -n "    \"$ns\"" >> "$OUTPUT_FILE"
done

echo "" >> "$OUTPUT_FILE"
echo "  ]," >> "$OUTPUT_FILE"
echo "  \"domain_search\": [" >> "$OUTPUT_FILE"

# Получить domain-search
SEARCH=$(grep ^search /etc/resolv.conf | sed 's/search //')
FIRST=1
for domain in $SEARCH; do
    if [ $FIRST -eq 1 ]; then
        FIRST=0
    else
        echo "," >> "$OUTPUT_FILE"
    fi
    echo -n "    \"$domain\"" >> "$OUTPUT_FILE"
done

echo "" >> "$OUTPUT_FILE"
echo "  ]" >> "$OUTPUT_FILE"
echo "}" >> "$OUTPUT_FILE"

echo "DNS configuration exported to $OUTPUT_FILE"
cat "$OUTPUT_FILE"
EOF

chmod +x /config/scripts/export-dns-config.sh

# Запустить экспорт
/config/scripts/export-dns-config.sh

Связанные документы

  • System Configuration - Общая конфигурация системы
  • Host Name - Настройка имени хоста и статических записей
  • DNS Forwarding - DNS сервер для клиентов
  • NTP - Настройка времени и NTP
  • Syslog - Настройка системного логирования
  • VPN - VPN конфигурация
  • Containers - Управление контейнерами

Дополнительные ресурсы

Заключение

Правильная настройка системных DNS серверов (name-server) и списка доменов для поиска (domain-search) в VyOS критически важна для корректной работы всех системных компонентов. DNS используется для обновления пакетов, синхронизации времени через NTP, отправки логов на удаленные серверы, установки VPN соединений и множества других операций.

Ключевые моменты:

  1. Избыточность: Всегда настраивайте минимум 2-3 DNS сервера для отказоустойчивости
  2. Производительность: Выбирайте DNS серверы с низким RTT для вашего региона
  3. Облачная интеграция: Используйте внутренние облачные DNS серверы для резолюции внутренних имен
  4. Безопасность: Используйте только доверенные DNS серверы
  5. Мониторинг: Регулярно проверяйте работоспособность DNS
  6. Документирование: Документируйте выбор DNS серверов и изменения конфигурации

Следуйте рекомендациям из раздела “Лучшие практики” для обеспечения надежной и производительной DNS инфраструктуры в вашей сети VyOS.