Как получить доступ к DNS-серверу Weave от внешнего?

Я использую сетевой плагин Weave на Docker-Swarm.

Я создал сеть докеров с определенным диапазоном IP-адресов, отличную от сети Weave по умолчанию, к которой я направляюсь из своей внутренней сети.

Чтобы сделать контейнеры еще более доступными, я использую weave для присоединения имен DNS, таких как containsername.auto.mycompany.de. Теперь я хочу получить доступ к тем из моей сети. Проблема в том, что переплетение позволяет только доступ к переплетению DNS с локального хоста.

Как и на одном из моих узлов рой, я могу сделать:

host foobar.auto.mycompany.de 172.17.0.1
Using domain server:
Name: 172.17.0.1
Address: 172.17.0.1#53
Aliases: 

foobar.auto.mycompany.de has address 10.40.13.3
Host foobar.auto.mycompany.de not found: 3(NXDOMAIN)
Host foobar.auto.mycompany.de not found: 3(NXDOMAIN)

Но я не нахожу способ сделать контейнер переплетения доступным на одном из IP из этой (10.40.130/24) докеревой сети или открыть порт для роя node.

Единственный способ, о котором я могу думать, но не люблю, делает что-то вроде этого:

iptables -t nat -A  DOCKER -p tcp --dport 53 -j DNAT --to-destination 172.17.0.1:53

(это не работает, это просто идея)

Или вмешаться в переплетение script, чтобы он отображал порт при запуске контейнера переплетения.

Знает ли кто-нибудь лучшее решение?

Ответ 1

Фактически установка правил

iptables -A DOCKER -p tcp -m tcp --dport 53 -j DNAT --to-destination 172.17.0.1:53
iptables -A DOCKER -p udp -m udp --dport 53 -j DNAT --to-destination 172.17.0.1:53

делает это. Когда я впервые попробовал это, я просто пропустил, чтобы увидеть, что мой запрос пришел бы из "внешнего" сервера для работы, а не изнутри в loopback-устройство.

Все еще не очень красивое решение, но оно выполняет эту работу. Я с нетерпением жду возможности увидеть лучшие решения от вас, ребята.

(Баунти стоит!)