DNS-серверы не получают запросы, инициированные клиентами.

Вопрос или проблема

Я использую unbound на Raspberry Pi. Я попробовал dnsmasq, чтобы выяснить, в чем проблема, но он тоже не работал. Я вижу с помощью Wireshark, что мой запрос идет от моего компьютера к Raspberry, но ничего не достигает сервера. Я запустил tcpdump на сервере и отслеживаю журнал unbound с уровнем детализации:5, но unbound не знает о запросах, которые приходят через локальную сеть, однако когда я выполняю dig mollevi.test @localhost на сервере, ответ правильный. Я попробовал это, используя мой Tailscale VPN, временно отключил все межсетевые экраны в локальной сети и пробовал как клиенты Linux, так и Windows (не ВМ), как в локальной сети, так и через мобильные данные (которые шли через Tailscale). Я мог пинговать порт 80 в каждом направлении с каждой упомянутой настройкой, но в журнале unbound ничего нет о запросах, которые не @localhost. Dnsmasq вел себя так же, но я хотел бы использовать unbound, если это возможно. Вот мои конфигурации:

server:
verbosity: 5
interface: 0.0.0.0
port: 53
do-ip4: yes
do-ip6: yes
do-udp: yes
do-tcp: yes
access-control: 192.168.1.0/24 allow
root-hints: "/etc/unbound/root.hints"

local-zone: "mollevi.test." static
local-data: "mollevi.test. 10800 IN A 127.0.0.1"
logfile: "/etc/unbound/unbound.log"

Когда я использовал Tailscale, я добавил access-control: 100.64.0.0/10 allow

sudo netstat -tuln | grep :53

tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN
udp        0      0 0.0.0.0:53              0.0.0.0:*
udp        0      0 0.0.0.0:5353            0.0.0.0:*
udp6       0      0 :::5353                 :::*

Кратко:

  1. Windows/Linux -> netstat/dig -> wireshark(клиент->сервер) ☑ -> Raspberry PI -> tcpdump☑ -> unbound.log☒ -> wireshark(сервер->клиент) ☒ -> истекло время ожидания запроса
  2. Raspberry -> dig mollevi.test @lan.ip.addr.ess -> правильный ответ

Спасибо за любые советы.

Вы разрешили входящий трафик с порта 53 с помощью IPTables и/или UFW?

sudo iptables -I INPUT -p udp --dport 53 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 53 -j ACCEPT
# если UFW включён на вашем Raspberry 
sudo ufw allow in 53
sudo ufw allow out 53

Ответ или решение

Проблема с DNS-серверами и отсутствие запрашиваемых клиентских запросов

Вы столкнулись с проблемой, когда ваш DNS-сервер, работающий на базе unbound на Raspberry Pi, не принимает клиентские запросы. Давайте рассмотрим возможные причины этой ситуации и предложим способы их решения.

Подробный анализ проблемы

  1. Конфигурация unbound

    Ваша конфигурация unbound выглядит в целом корректно, однако стоит обратить внимание на параметры, относящиеся к доступу и интерфейсам. В случае, если сервер не получает запросы от клиентов, возможная причина может заключаться в настройках контроля доступа (access-control). Вы уже добавили правило для Tailscale (100.64.0.0/10), но, возможно, потребуется убедиться, что локальная сеть также правильно настроена:

    access-control: 192.168.1.0/24 allow

    Убедитесь, что IP-адреса клиентов, инициирующих запросы, действительно попадают в диапазон 192.168.1.0/24.

  2. Проверка журналов и вывода tcpdump

    Вы упомянули, что unbound не фиксирует никаких запросов. Это может указывать на то, что пакеты не достигают сервера. Использование tcpdump — хорошее решение. Убедитесь, что вы используете правильные параметры для tcpdump, например:

    sudo tcpdump -i any -n port 53

    Это позволит вам отследить, доходят ли UDP-пакеты запросов до вашего устройства. Если вы видите запросы в tcpdump, но они не отображаются в журнале unbound, возможно, стоит увеличить уровень детализации в конфигурации:

    verbosity: 5

    Если вывод tcpdump показывает, что запрашиваемые пакеты до сервера не доходят, вам стоит проверить сетевые настройки.

  3. Настройки брандмауэра

    Как вы уже упомянули, отключение брандмауэра (firewall) может привести к разрешению проблем с доступом. Убедитесь, что правила IPTables или UFW (если используется) правильно настроены для приема трафика на порту 53 (как TCP, так и UDP):

    sudo iptables -I INPUT -p udp --dport 53 -j ACCEPT
    sudo iptables -I INPUT -p tcp --dport 53 -j ACCEPT

    Если вы используете UFW, выполните команды:

    sudo ufw allow in 53
    sudo ufw allow out 53

    Проверьте состояние брандмауэра с помощью:

    sudo ufw status verbose
  4. Проблемы с сетью

    Использование Wireshark на клиенте для анализа сетевого трафика будет полезно, чтобы убедиться, что запрос действительно отправляется. Проверьте настройки маршрутизатора — возможно, он блокирует трафик DNS.

  5. Проверка работы сервера

    Запросы от локального хоста (например, через dig mollevi.test @localhost) работают. Это подтверждает, что сервер unbound функционирует корректно. Однако стоит проверить также доступность DNS-сервера по его IP-адресу из вашей сети. Вы можете попробовать использовать telnet или другой инструмент для тестирования подключения к порту 53:

    telnet <lan.ip.addr> 53

Заключение

Убедитесь, что конфигурация вашего DNS-сервера (unbound) корректно настроена и что трафик не блокируется на уровне сетевых устройств или брандмауэры. Проверьте все сетевые настройки и, если возможно, протестируйте на другом оборудовании или с другим клиентом для устранения возможных переменных. Такой комплексный подход должен помочь выявить и решить проблему.

Если после выполнения всех указанных шагов проблема останется нерешенной, возможно, стоит обратиться к сообществу или на специализированные форумы по dns, где можно получить помощь от других пользователей, столкнувшихся с похожими ситуациями.

Оцените материал
Добавить комментарий

Капча загружается...