首先,我对这篇文章很抱歉,但是我不知道怎么把它简化到这个程度。我已经削减了许多不必要的配置材料,以结束对基本信息的需要。
我正在设置一个dns递归对,ns1和ns2,每个在一个单独的服务器上。每个服务器都包含powerdns-对dnsdist前端和递归后端,它们运行在单独的容器中,每个容器由Docker -组合管理,基于Docker集线器的tcely/dnsdist。
ns1: 192.168.0.1
ns2: 192.168.0.2我的目标是让dnsdist能够在它的负载平衡函数中查询两个递归,所以我有一个dnsdist.conf,它简化为基本元素,如下所示:
newServer{address='192.168.0.1:5300', order=1}
newServer{address='192.168.0.2:5300', order=2}
setServerPolicy(firstAvailable)
setLocal('0.0.0.0')两台服务器大致相同,但顺序颠倒了,因此主递归应该是“本地的”递归。
我不会将事情与recursor.conf混淆,只需说它允许--从0.0.0.0/0开始,所以递归器在这一点上不会阻止任何人查询它。
最后,我们要说的是:
启动吊舱时,dnsdist会产生以下日志错误:
...
Marking downstream 192.168.0.1:5300 as 'down'
Marking downstream 192.168.0.2:5300 as 'up'
...当我试图找出为什么它认为本地递归被关闭时,通过进入dnsdist容器并从那里运行“挖掘”,我得到如下信息:
/ # dig @192.168.0.2 -p 5300 a.root-servers.net. +short
198.41.0.4
/ # dig @192.168.0.1 -p 5300 a.root-servers.net. +short
;; reply from unexpected source: 172.20.0.1#5300, expected 192.168.0.1#5300因此,当我查询另一个容器的外部IP时,它似乎使用内部IP进行应答。如果我能够查询其他容器的内部IP (在本例中是172.20.0.1 ),我会这样做,但该IP是容器的本地ip,每次重新启动时都会更改。
所以,问题是,我该如何解决这个问题?在Docker中是否有一种方法可以对所使用的内部IP地址进行硬编码,或者让容器/dnsdist忽略它从另一个IP地址得到的答复这一事实?
编辑-用于澄清: Docker自动分配网络名称,因此,例如,我可以'ping递归‘,它将解析到解析器-容器私有IP地址。我不能将它用于任何事情,因为dnsdist.conf只接受IP地址,正如我开始解释的那样,当容器启动时,这些IP地址是由docker随机设置的。
发布于 2019-07-18 11:10:21
(或至少有一个)解决方案是为pod (容器对)创建一个本地网络:
version: '3'
services:
dnsdist:
image: 'tcely/dnsdist'
container_name: powerdns-dnsdist
restart: 'unless-stopped'
tty: true
stdin_open: true
command: ["--disable-syslog", "--uid", "dnsdist", "--gid", "dnsdist", "--verbose"]
volumes:
- /data/docker/volumes/dnsdist-recursor/dnsdist:/etc/dnsdist
expose:
- '53'
- '53/udp'
ports:
- '53:53'
- '53:53/udp'
networks:
dnsnet:
ipv4_address: 172.28.1.10
recursor:
image: 'tcely/powerdns-recursor'
container_name: powerdns-recursor
restart: 'unless-stopped'
command: ["--disable-syslog=yes", "--log-timestamp=no", "--local-address=0.0.0.0", "--setuid=pdns-recursor", "--setgid=pdns-recursor"]
volumes:
- /data/docker/volumes/dnsdist-recursor/pdns-recursor:/etc/pdns-recursor
ports:
- '5300:53'
- '5300:53/udp'
networks:
dnsnet:
ipv4_address: 172.28.1.11
networks:
dnsnet:
ipam:
driver: default
config:
- subnet: '172.28.1.0/24'现在,您可以按以下方式设置dnsdist.conf
newServer{address='172.28.1.11:53', order=1}
newServer{address='192.168.0.2:5300', order=2}
setServerPolicy(firstAvailable)
setLocal('0.0.0.0')重新启动
重复并冲洗。
https://serverfault.com/questions/975435
复制相似问题