DNS Forwarding

VyOS использует PowerDNS Recursor для предоставления DNS forwarding сервиса - легковесной DNS инфраструктуры для небольших и средних сетей.

Обзор

DNS Forwarding позволяет:

  • Кэшировать DNS запросы для ускорения разрешения имен
  • Перенаправлять запросы на upstream DNS серверы
  • Обеспечивать split-horizon DNS (разные ответы для разных доменов)
  • Функционировать как рекурсивный DNS сервер
  • Хостить авторитативные DNS зоны

Базовая конфигурация

Минимальная настройка

set service dns forwarding listen-address '192.168.1.1'
set service dns forwarding allow-from '192.168.1.0/24'
commit

Эта конфигурация:

  • Слушает на адресе 192.168.1.1
  • Принимает запросы от сети 192.168.1.0/24
  • Использует DNS серверы системы для upstream

Указание upstream DNS серверов

Явное указание DNS серверов:

set service dns forwarding listen-address '192.168.1.1'
set service dns forwarding allow-from '192.168.1.0/24'
set service dns forwarding name-server '8.8.8.8'
set service dns forwarding name-server '8.8.4.4'
commit

Использование системных DNS серверов

set service dns forwarding system
commit

Это использует DNS серверы, настроенные в системе (например, полученные через DHCP на WAN интерфейсе).

Использование DNS от DHCP клиента

set service dns forwarding dhcp eth0
commit

DNS сервер будет использовать nameservers, полученные через DHCP на интерфейсе eth0.

Listen Address

Адреса, на которых DNS сервер принимает запросы:

Один адрес:

set service dns forwarding listen-address '192.168.1.1'

Множественные адреса:

set service dns forwarding listen-address '192.168.1.1'
set service dns forwarding listen-address '192.168.2.1'
set service dns forwarding listen-address '::1'

Слушать на всех интерфейсах (не рекомендуется):

set service dns forwarding listen-address '0.0.0.0'

Access Control

Allow From

Разрешение запросов от конкретных сетей:

set service dns forwarding allow-from '192.168.1.0/24'
set service dns forwarding allow-from '192.168.2.0/24'
set service dns forwarding allow-from '10.0.0.0/8'

По умолчанию, если не указано, разрешены запросы только с localhost.

Ignore Hosts File

Игнорирование локального файла /etc/hosts:

set service dns forwarding ignore-hosts-file
commit

Domain-Specific Forwarding

Перенаправление запросов для конкретных доменов на специфичные DNS серверы.

Базовый пример

Отправка запросов для домена example.com на корпоративный DNS:

set service dns forwarding domain example.com name-server '192.168.100.1'
commit

Split-Horizon DNS

Различные DNS серверы для внутренних и внешних доменов:

# Внутренние домены на внутренний DNS
set service dns forwarding domain corp.local name-server '192.168.1.10'
set service dns forwarding domain internal.local name-server '192.168.1.10'

# Внешние запросы на публичные DNS
set service dns forwarding name-server '8.8.8.8'
set service dns forwarding name-server '1.1.1.1'

commit

Reverse DNS зоны

Перенаправление обратных DNS зон:

set service dns forwarding domain 1.168.192.in-addr.arpa name-server '192.168.1.10'
set service dns forwarding domain 2.168.192.in-addr.arpa name-server '192.168.2.10'
commit

Рекурсивный поиск в подменах

Добавление опции addNTA для игнорирования DNSSEC:

set service dns forwarding domain example.com addnta
commit

Кэширование

Cache Size

Размер кэша DNS (количество записей):

set service dns forwarding cache-size 10000
commit

По умолчанию: 10000 записей.

Для высоконагруженных сетей:

set service dns forwarding cache-size 50000
commit

Negative TTL

Время кэширования отрицательных ответов (NXDOMAIN):

set service dns forwarding negative-ttl 3600
commit

Значение в секундах. По умолчанию: 3600 (1 час).

DNSSEC

DNS Security Extensions для проверки подлинности DNS ответов.

Режимы DNSSEC

set service dns forwarding dnssec <mode>

Доступные режимы:

  • off - DNSSEC отключен (по умолчанию)
  • process-no-validate - обрабатывать DNSSEC записи, но не валидировать
  • process - обрабатывать и валидировать
  • log-fail - логировать неудачи валидации
  • validate - строгая валидация (отклонять невалидные ответы)

Рекомендуемая настройка:

set service dns forwarding dnssec validate
commit

Authoritative Domains

Хостинг собственных DNS зон на VyOS.

Создание зоны

set service dns forwarding authoritative-domain example.local
commit

Добавление записей

A Record (IPv4)

set service dns forwarding authoritative-domain example.local records a server1 address '192.168.1.10'
set service dns forwarding authoritative-domain example.local records a server2 address '192.168.1.20'
commit

AAAA Record (IPv6)

set service dns forwarding authoritative-domain example.local records aaaa server1 address '2001:db8::10'
commit

CNAME Record (Alias)

set service dns forwarding authoritative-domain example.local records cname www target 'server1.example.local'
commit

MX Record (Mail)

set service dns forwarding authoritative-domain example.local records mx mail priority 10
set service dns forwarding authoritative-domain example.local records mx mail server 'mail.example.local'
commit

NS Record (Name Server)

set service dns forwarding authoritative-domain example.local records ns ns1 target 'dns1.example.local'
commit

PTR Record (Reverse DNS)

set service dns forwarding authoritative-domain 1.168.192.in-addr.arpa records ptr 10 target 'server1.example.local'
commit

TXT Record

set service dns forwarding authoritative-domain example.local records txt spf value 'v=spf1 mx ~all'
commit

SRV Record (Service)

set service dns forwarding authoritative-domain example.local records srv _ldap._tcp entry 0
set service dns forwarding authoritative-domain example.local records srv _ldap._tcp entry 0 hostname 'ldap.example.local'
set service dns forwarding authoritative-domain example.local records srv _ldap._tcp entry 0 port 389
set service dns forwarding authoritative-domain example.local records srv _ldap._tcp entry 0 priority 10
set service dns forwarding authoritative-domain example.local records srv _ldap._tcp entry 0 weight 100
commit

Производительность и таймауты

Timeout

Таймаут для DNS запросов (миллисекунды):

set service dns forwarding timeout 1500
commit

По умолчанию: 1500ms.

Max Cache Entries

Максимальное количество кэшируемых записей:

set service dns forwarding max-cache-entries 100000
commit

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

Домашняя сеть

# Базовая настройка
set service dns forwarding listen-address '192.168.1.1'
set service dns forwarding allow-from '192.168.1.0/24'

# Публичные DNS серверы
set service dns forwarding name-server '8.8.8.8'
set service dns forwarding name-server '1.1.1.1'

# Кэш
set service dns forwarding cache-size 10000

commit

Корпоративная сеть с split-horizon

# Слушать на management интерфейсе
set service dns forwarding listen-address '192.168.10.1'
set service dns forwarding allow-from '192.168.0.0/16'

# Внутренние домены на корпоративный DNS
set service dns forwarding domain corp.local name-server '192.168.1.10'
set service dns forwarding domain corp.local name-server '192.168.1.11'

# Обратные зоны
set service dns forwarding domain 10.168.192.in-addr.arpa name-server '192.168.1.10'
set service dns forwarding domain 20.168.192.in-addr.arpa name-server '192.168.1.10'

# Внешние запросы
set service dns forwarding name-server '8.8.8.8'
set service dns forwarding name-server '8.8.4.4'

# Кэш и DNSSEC
set service dns forwarding cache-size 50000
set service dns forwarding dnssec validate

commit

Авторитативная зона для локальной сети

# DNS forwarding
set service dns forwarding listen-address '192.168.1.1'
set service dns forwarding allow-from '192.168.1.0/24'
set service dns forwarding name-server '8.8.8.8'

# Локальный домен
set service dns forwarding authoritative-domain home.local

# Серверы
set service dns forwarding authoritative-domain home.local records a router address '192.168.1.1'
set service dns forwarding authoritative-domain home.local records a nas address '192.168.1.10'
set service dns forwarding authoritative-domain home.local records a printer address '192.168.1.20'

# Алиасы
set service dns forwarding authoritative-domain home.local records cname gateway target 'router.home.local'
set service dns forwarding authoritative-domain home.local records cname storage target 'nas.home.local'

commit

Multi-site с несколькими локациями

# DNS forwarding
set service dns forwarding listen-address '10.0.0.1'
set service dns forwarding allow-from '10.0.0.0/8'

# HQ site
set service dns forwarding domain hq.corp.local name-server '10.1.0.10'

# Branch office 1
set service dns forwarding domain branch1.corp.local name-server '10.10.0.10'

# Branch office 2
set service dns forwarding domain branch2.corp.local name-server '10.20.0.10'

# Общий корпоративный домен
set service dns forwarding domain corp.local name-server '10.1.0.10'
set service dns forwarding domain corp.local name-server '10.1.0.11'

# Интернет
set service dns forwarding name-server '8.8.8.8'
set service dns forwarding name-server '1.1.1.1'

# Производительность
set service dns forwarding cache-size 100000
set service dns forwarding dnssec validate

commit

DNSSEC с валидацией

set service dns forwarding listen-address '192.168.1.1'
set service dns forwarding allow-from '192.168.1.0/24'

# DNS серверы с DNSSEC поддержкой
set service dns forwarding name-server '1.1.1.1'
set service dns forwarding name-server '9.9.9.9'

# Включить DNSSEC валидацию
set service dns forwarding dnssec validate

# Увеличить cache для DNSSEC
set service dns forwarding cache-size 20000

commit

Операционные команды

Очистка кэша

Полная очистка кэша:

reset dns forwarding all

Очистка для конкретного домена:

reset dns forwarding domain example.com

Перезапуск сервиса

restart dns forwarding

Просмотр статистики

Показать статистику DNS:

show dns forwarding statistics

Тестирование

Проверка разрешения имен через VyOS DNS:

nslookup example.com 192.168.1.1

или

dig @192.168.1.1 example.com

Логи

Просмотр логов DNS:

show log dns forwarding
monitor log | grep recursor

Интеграция с DHCP

DHCP сервер автоматически может использовать DNS forwarding.

В конфигурации DHCP указать:

set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 option name-server '192.168.1.1'

Где 192.168.1.1 - адрес VyOS с DNS forwarding.

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

DNS не отвечает

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

show service dns forwarding

Проверьте, запущен ли сервис:

show dns forwarding statistics

Проверьте firewall:

show firewall ipv4 input filter

Убедитесь, что порт 53 UDP открыт:

set firewall ipv4 input filter rule 30 action accept
set firewall ipv4 input filter rule 30 destination port 53
set firewall ipv4 input filter rule 30 protocol udp
set firewall ipv4 input filter rule 30 source address 192.168.1.0/24
commit

Медленное разрешение имен

Увеличьте размер кэша:

set service dns forwarding cache-size 50000
commit

Проверьте upstream DNS серверы:

dig @8.8.8.8 example.com

Измените upstream на более быстрые:

set service dns forwarding name-server '1.1.1.1'
set service dns forwarding name-server '8.8.8.8'
commit

DNSSEC проблемы

Если валидация вызывает проблемы, отключите:

set service dns forwarding dnssec off
commit

Или используйте менее строгий режим:

set service dns forwarding dnssec process
commit

Split-horizon не работает

Убедитесь, что domain-specific правила указаны правильно:

show service dns forwarding

Порядок важен - более специфичные домены должны быть указаны раньше.

Проверьте тестированием:

dig @192.168.1.1 server.corp.local

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

Ограничение доступа

Всегда используйте allow-from для ограничения источников:

set service dns forwarding allow-from '192.168.1.0/24'

Никогда не используйте 0.0.0.0/0 в allow-from - это откроет DNS для всего интернета (DNS amplification атаки).

Firewall правила

Дополнительно ограничьте через firewall:

set firewall ipv4 input filter rule 30 action accept
set firewall ipv4 input filter rule 30 destination port 53
set firewall ipv4 input filter rule 30 protocol udp
set firewall ipv4 input filter rule 30 source address 192.168.1.0/24
commit

Rate Limiting

Используйте firewall rate limiting для защиты от DoS:

set firewall ipv4 input filter rule 30 action accept
set firewall ipv4 input filter rule 30 destination port 53
set firewall ipv4 input filter rule 30 protocol udp
set firewall ipv4 input filter rule 30 limit rate 50/second
commit

DNSSEC

Включайте DNSSEC для защиты от DNS spoofing:

set service dns forwarding dnssec validate
commit

Лучшие практики

  1. Используйте allow-from - всегда ограничивайте источники запросов
  2. Множественные upstream - указывайте 2-3 upstream DNS сервера
  3. DNSSEC - включайте для безопасности
  4. Кэш - настраивайте размер кэша под нагрузку
  5. Split-horizon - разделяйте внутренние и внешние домены
  6. Firewall - дополнительно защищайте через firewall
  7. Мониторинг - регулярно проверяйте статистику и логи
  8. Резервирование - используйте несколько DNS серверов
  9. Документирование - документируйте domain-specific forwarding
  10. Тестирование - проверяйте разрешение имен после изменений

Публичные DNS серверы

Рекомендуемые публичные DNS:

  • Cloudflare: 1.1.1.1, 1.0.0.1 (быстрые, приватные)
  • Google: 8.8.8.8, 8.8.4.4 (надежные)
  • Quad9: 9.9.9.9, 149.112.112.112 (блокировка вредоносных доменов)
  • OpenDNS: 208.67.222.222, 208.67.220.220 (фильтрация контента)

Следующие шаги

  • DHCP Server - интеграция DHCP с DNS
  • Dynamic DNS - автоматическое обновление DNS
  • Firewall - защита DNS сервиса