为什么这个dnsmasqconfiguration在一个办公室里工作,而不是另一个?

我们有两个使用同一个VOIP提供商的远程办公室。 在注册该提供商的过程中,他们build议我们更改DNS设置,以便电话使用其DNS服务器进行VOIP呼叫。 两个办事处都在本地使用dnsmasq 。 这两个办公室的configuration的DNS部分(它们是相同的):

# Never forward plain names (without a dot or domain part) domain-needed # Never forward addresses in the non-routed address spaces. bogus-priv # If you don't want dnsmasq to read /etc/hosts, uncomment the # following line. no-hosts # or if you want it to read another file, as well as /etc/hosts, use # this. #addn-hosts=/etc/banner_add_hosts addn-hosts=/etc/dnsmasq.d/hosts/static.hosts # Set this (and domain: see below) if you want to have a domain # automatically added to simple names in a hosts-file. expand-hosts # Ensure DNS servers are queried in the order they appear below. That # will ensure proper georouting for VoIP, and will still work for websites # on those domains strict-order # Our upstream DNS Servers # 8x8 DNS servers (ensures best georouting for VoIP) server=/8x8.com/packet8.net/8.28.0.9 server=/8x8.com/packet8.net/192.84.18.11 # 8x8's DNS servers don't handle web domains; fail over to our default servers server=/8x8.com/packet8.net/# # default to OpenDNS server=208.67.222.222 server=208.67.220.220 

我们在设置办公室#1时遇到了一个问题:VOIP提供商的DNS服务器没有(由于某种原因)提供其Web服务器主机名,所以我们无法连接到他们的Web应用程序。 这个问题是通过添加上面的最终server=/xxxxx.com...行来解决的。 在第一台服务器不提供结果的情况下,该行提供“故障转移”。 添加此configuration后,办公室#1工作正常。

我们最近设置了#2办公室,而#1和#2之间的唯一区别是DNS服务器硬件(#1 =在x86_64上运行的Ubuntu,#2 =树莓派),因此, dnsmasq版本略有不同(#1 = 2.68,#2 = 2.76)。 事实certificate,办公室#2在办公室#1中遇到了同样的问题。

我的理解是,根据上面的configuration, sso.8x8.com的请求应该经过以下步骤:

  1. 查询8.28.0.9sso.8x8.com
  2. 取回CNAME (请参阅下面的dig结果)
  3. 查询CNAME192.84.18.11
  4. 不要回头
  5. 查询208.67.222.222CNAME
  6. 取回一个IP地址

当我在两个办公室dig受影响的地址时,我得到:

办公室1:

 ; <<>> DiG 9.9.5-3ubuntu0.16-Ubuntu <<>> sso.8x8.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17588 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;sso.8x8.com. IN A ;; ANSWER SECTION: sso.8x8.com. 54 IN CNAME sso.8x8.com.cdn.cloudflare.net. sso.8x8.com.cdn.cloudflare.net. 54 IN A 104.16.110.61 sso.8x8.com.cdn.cloudflare.net. 54 IN A 104.16.109.61 ;; Query time: 12 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Nov 02 13:39:34 PDT 2017 ;; MSG SIZE rcvd: 116 

办公室2:

 ; <<>> DiG 9.9.5-9+deb8u13-Raspbian <<>> sso.8x8.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28188 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;sso.8x8.com. IN A ;; ANSWER SECTION: sso.8x8.com. 300 IN CNAME sso.8x8.com.cdn.cloudflare.net. ;; Query time: 20 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Nov 02 13:40:34 PDT 2017 ;; MSG SIZE rcvd: 84 

在这两种情况下,我都能看到CNAME,但是在办公室#2中似乎没有按照要求inputIP地址(如果我正确解释的话)。

所以我有几个问题:

  1. 我对这种复杂的DNS查询所涉及的事件序列的理解是否正确?

  2. 引起这个问题的两个架构和dnsmasq版本之间是否有相关的区别? 什么可能导致这个?

  3. 有没有解决这个问题的方法?

经过多次search和玩设置,我find了答案。

事实certificate,在2.69版本中, dnsmasq的行为发生了变化。 server指令评估的顺序从“自上而下”改为“自下而上”。 以下是 dnsmasq邮件列表的详细信息 。

解决scheme只是颠倒server指令的顺序。