如何从外部访问Weave DNS-Server?

Ing*_*dau 12 linux dns docker docker-swarm weave

我在Docker-Swarm上使用Weave网络插件.

我创建了一个具有特定IP范围的docker网络,与我从内部网络路由的默认Weave网络不同.

为了使容器更易于访问,我使用weave附加DNS名称,如containername.auto.mycompany.de.现在我想访问我公司的网络.问题是,编织只允许从本地主机访问编织DNS.

就像在我的一个swarm节点上一样,我可以这样做:

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)
Run Code Online (Sandbox Code Playgroud)

但我找不到一种方法可以在这个(10.40.130/24)泊坞网络中的一个IP上访问编织容器,或者将端口暴露给群集节点.

我能想到但却不喜欢的唯一方法就是这样做:

iptables -t nat -A  DOCKER -p tcp --dport 53 -j DNAT --to-destination 172.17.0.1:53
Run Code Online (Sandbox Code Playgroud)

(这不起作用,这只是想法)

或者篡改编织脚本以使其在编织容器的开始处暴露端口.

有人知道更好的解决方案吗?

Ing*_*dau 2

事实上制定规则

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
Run Code Online (Sandbox Code Playgroud)

可以。当我第一次尝试时,我只是错过了,我的请求将来自服务器“外部”工作,而不是从内部发送到环回设备。

仍然不是一个很好的解决方案,但它可以完成工作。我期待看到你们更好的解决方案。

(赏金站!)