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

时间:2016-01-14 09:59:19

标签: 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)

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

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

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

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

或者篡改编织脚本,使其在编织容器的开始处显示端口。

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

1 个答案:

答案 0 :(得分: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

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

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

(Bounty站着!)