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
commitDNS сервер будет использовать 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
commitDomain-Specific Forwarding
Перенаправление запросов для конкретных доменов на специфичные DNS серверы.
Базовый пример
Отправка запросов для домена example.com на корпоративный DNS:
set service dns forwarding domain example.com name-server '192.168.100.1'
commitSplit-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'
commitReverse 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
commitNegative 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
commitAuthoritative 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'
commitAAAA Record (IPv6)
set service dns forwarding authoritative-domain example.local records aaaa server1 address '2001:db8::10'
commitCNAME Record (Alias)
set service dns forwarding authoritative-domain example.local records cname www target 'server1.example.local'
commitMX 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'
commitNS Record (Name Server)
set service dns forwarding authoritative-domain example.local records ns ns1 target 'dns1.example.local'
commitPTR Record (Reverse DNS)
set service dns forwarding authoritative-domain 1.168.192.in-addr.arpa records ptr 10 target 'server1.example.local'
commitTXT Record
set service dns forwarding authoritative-domain example.local records txt spf value 'v=spf1 mx ~all'
commitSRV 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'
commitMulti-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
commitDNSSEC с валидацией
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'
commitDNSSEC проблемы
Если валидация вызывает проблемы, отключите:
set service dns forwarding dnssec off
commitИли используйте менее строгий режим:
set service dns forwarding dnssec process
commitSplit-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
commitRate 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
commitDNSSEC
Включайте DNSSEC для защиты от DNS spoofing:
set service dns forwarding dnssec validate
commitЛучшие практики
- Используйте allow-from - всегда ограничивайте источники запросов
- Множественные upstream - указывайте 2-3 upstream DNS сервера
- DNSSEC - включайте для безопасности
- Кэш - настраивайте размер кэша под нагрузку
- Split-horizon - разделяйте внутренние и внешние домены
- Firewall - дополнительно защищайте через firewall
- Мониторинг - регулярно проверяйте статистику и логи
- Резервирование - используйте несколько DNS серверов
- Документирование - документируйте domain-specific forwarding
- Тестирование - проверяйте разрешение имен после изменений
Публичные 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 сервиса