Рейтинг:0

Невозможно использовать Docker DNS с nftables

флаг pw

У меня есть DNS-контейнер bind9, работающий на 10.64.128.53, который находится на сетевых «серверах» докеров в подсети 10.64.128.0/24. это отлично работает, и если я запускаю: nslookup google.com 10.64.128.53

Я получаю вывод:

Сервер: 10.64.128.53
Адрес: 10.64.128.53#53

Неавторитетный ответ:
Название: google.ru
Адрес: 216.58.193.142

Когда я запускаю ту же команду в контейнере докеров: docker run --rm -it --сетевые серверы --dns 10.64.128.53 alpine nslookup google.com 10.64.1 28.53

Я получаю вывод:

Сервер: 10.64.128.53
Адрес: 10.64.128.53:53

Неавторитетный ответ:
Название: google.ru
Адрес: 216.58.193.142

Это ожидается Теперь, если я бегу: docker run --rm -it --сетевые серверы --dns 10.64.128.53 alpine nslookup google.com Я получаю вывод:

nslookup: запись на «127.0.0.11»: в соединении отказано
;; время соединения истекло; нет доступа к серверам

Для меня это не имеет особого смысла, потому что я указал свой DNS-сервер докера, но я предполагаю, что докер запускает его через внутренний прокси-сервер на 127.0.0.11. Это было бы здорово, если бы я использовал его, но мне это не нужно. Лучшее решение, о котором я могу думать, это перезапись /etc/resolv.conf с моим DNS-сервером, но это кажется ужасным решением. я видел это https://github.com/moby/moby/issues/19474#issuecomment-173093011 но не могу заставить это работать в nftables, но я думаю, что это единственный способ, потому что кажется, что DNS-серверу докеров требуются подключения с 127.0.0.11:53

Хост - Gentoo Linux, я знаю, что сеть работает, когда установлен iptables. Я вижу эти ошибки в журналах докеров всякий раз, когда запускаю виртуальную машину:

time="2022-01-25T03:08:56Z" level=warning msg="Не удалось найти iptables: exec: \"iptables\": исполняемый файл не найден в $PATH"
time="2022-01-25T03:08:56Z" level=error msg="установить правило не удалось, [-t nat -I DOCKER_OUTPUT -d 127.0.0.11 -p udp --dport 53 -j DNAT --to- пункт назначения 127.0.0.11:50360]"
time="2022-01-25T03:08:56Z" level=error msg="установить правило не удалось, [-t nat -I DOCKER_POSTROUTING -s 127.0.0.11 -p udp --sport 50360 -j SNAT --to- источник: 53]"
time="2022-01-25T03:08:56Z" level=error msg="установить правило не удалось, [-t nat -I DOCKER_OUTPUT -d 127.0.0.11 -p tcp --dport 53 -j DNAT --to- пункт назначения 127.0.0.11:46531]"
time="2022-01-25T03:08:56Z" level=error msg="установить правило не удалось, [-t nat -I DOCKER_POSTROUTING -s 127.0.0.11 -p tcp --sport 46531 -j SNAT --to- источник: 53]"

Я также вижу эту ошибку каждый раз, когда пытаюсь запустить команды nslookup в контейнерах докеров, но я не уверен, насколько это связано:

time="2022-01-25T03:20:08.094540639Z" level=error msg="Обработчик POST /v1.41/exec/d52b964c2e34acb78b67e5d2f02a8143e1efb3c45da0936fe128ed14fb6296ce/resize вернул ошибку: невозможно изменить размер остановленного контейнера: неизвестно"

Просто использование iptables на самом деле не является решением, я хочу, чтобы это был чисто nftables, и это не кажется неразумным.

Если у меня работает iptables, Docker DNS работает, но в iptables не добавляются правила. Я этого не понимаю, почему он требует iptables, но не устанавливает правил?

флаг jp
Docker не поддерживает nftables.
Desultory avatar
флаг pw
Это бесполезно. Должен быть способ использовать чисто nftables с докером, iptables и nftables достаточно похожи.
флаг jp
Docker сильно зависит от iptables для настройки своей сети, но он вообще не поддерживает nftables. Если вы выполните поиск в Google `site:docs.docker.com nftables`, вы найдете ровно одно совпадение.
Desultory avatar
флаг pw
Все, кроме DNS, отлично работает с nftables, проблема в том, что докер использует хаки, чтобы заставить работать внутренний DNS.
Ginnungagap avatar
флаг gu
У меня в основном идентичная настройка с Gentoo без устаревшей опции ядра iptables, и единственный способ заставить Docker действительно работать — это изменить точку входа контейнеров, чтобы исправить `/etc/resolve.conf` перед запуском реальной точки входа. Я в тупике, что Docker такой грязный, особенно когда у них якобы есть опция в конфигурации демона, чтобы не изменять конфигурацию iptables, которая в любом случае в основном игнорируется.
Desultory avatar
флаг pw
@Ginnungagap, каков ваш точный метод изменения resolv.conf контейнера? Я согласен, что это не должно быть так грязно. Я чувствую, что указание параметров DNS должно просто перезаписать resolv.conf или что-то в этом роде вместо докера с использованием прокси-сервера DNS внутри

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.