Нет соединения DNS из контейнера Docker с хостовой сетью.

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

Я запускаю виртуальную машину Debian 12 с установленными pihole+unbound (версия v5.18.3) и docker (версия 20.10.24). Когда я нахожусь внутри контейнера docker и выполняю команду “curl gitlab.my.domain”, которая должна разрешаться на мой локальный экземпляр GitLab через pihole, но я получаю следующую ошибку:

curl: (6) Не удалось разрешить хост:
и dig отвечает:
ошибка связи с 10.0.0.3#53: время ожидания истекло

На любом другом хосте в сети, включая саму виртуальную машину, DNS-запросы работают идеально. Все другие контейнеры на разных хостах не имеют этой проблемы. Порт открыт, и pi-hole работает нормально. Даже в resolv.conf внутри контейнера docker есть запись “nameserver 10.0.0.3”. Контейнер имеет подключение к сети хоста, так как он отвечает на стандартную страницу-заглушку. Я на грани отчаяния. Что я пропустил?

Настройки брандмауэра в pihole были настроены неправильно (Отвечать только на интерфейсе eth0).

Как была решена проблема:
Настройки > DNS > Настройки интерфейса > Разрешить все источники

Теперь он также разрешается в контейнере docker.

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

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

Описание проблемы

Вы работаете с виртуальной машиной Debian 12, на которой установлены pihole и unbound, а также Docker. При попытке выполнить команду curl gitlab.my.domain внутри контейнера Docker происходит ошибка разрешения имени хоста (код ошибки 6). Инструмент dig сообщает о сбое связи с адресом DNS-сервера (10.0.0.3) и возвращает сообщение о таймауте.

Из вашего описания видно, что:

  1. DNS-запросы от других хостов в сети работают корректно.
  2. Контейнеры на других хостах не испытывают подобных проблем.
  3. Вы проверили, что порт открыт и pihole работает нормально.
  4. Файл resolv.conf внутри контейнера содержит корректный адрес DNS-сервера.

Эти улики указывают на проблемы с настройками взаимодействия контейнера с хостом.

Причины проблемы

  1. Настройки интерфейса pihole: Выясняется, что в настройках pihole было установлено ограничение на отклик только на интерфейсе eth0. Это означает, что pihole может не отвечать на DNS-запросы, поступающие из других интерфейсов, которые Docker использует для связи.

  2. Изоляция сетевых пространств: Docker использует собственные изолированные сетевые пространства, и, возможно, в настройках сети контейнера не было указано, как связаться с хостовой сетью или hDNS-сервером.

  3. Firewall: На уровне хоста или в настройках pihole могут быть агрессивные полосы фильтрации трафика, которые блокируют DNS-запросы из контейнера.

Решение проблемы

Как вы сами отметили в конце описания, проблема была решена изменением настроек pihole:

  1. Перейдите в интерфейс управления pihole: Settings > DNS > Interface Settings.
  2. Убедитесь, что опция Permit all origins активирована. Это изменение позволяет pihole отвечать на DNS-запросы с любых интерфейсов, что решает проблемы с доступом из контейнеров Docker.

Дополнительные рекомендации

  1. Проверка сетевых настроек Docker: Убедитесь, что мостовая сеть Docker настроена корректно. Используйте команду docker network ls для проверки.

  2. Просмотр логов pihole: Логи pihole могут помочь выявить, не блокируются ли запросы из контейнера. Логи можно проверить с помощью команды pihole -t.

  3. Тестирование соединения: Вы можете попробовать запустить контейнер с параметрами сетевого режима --network host, чтобы проверить, будет ли проблема сохраняться. Этот режим позволяет контейнеру использовать сетевой стек хоста напрямую.

  4. Firewall: Убедитесь, что любые настройки фаервола на хост-машине не ограничивают доступ к DNS-серверу для пакетов из Docker-контейнеров.

Заключение

Настройка DNS в Docker может быть непростой задачей, особенно в сочетании с приложениями, такими как pihole. Правильная конфигурация интерфейсов и исключение изоляции входа могут существенно упростить работу. Надеюсь, данная информация будет вам полезна в дальнейшей настройке вашего окружения.

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

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