为什么这个 dnsmasq 配置在一个办公室有效,但在另一个办公室无效?

为什么这个 dnsmasq 配置在一个办公室有效,但在另一个办公室无效?

我们有两个远程办公室,它们都使用同一个 VOIP 提供商。在注册此提供商时,他们建议我们更改 DNS 设置,以便电话使用他们的 DNS 服务器进行 VOIP 呼叫。两个办公室都使用域名系统本地。以下是两个办公室的配置的 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...上面的最后一行解决了这个问题。此行在第一台服务器未提供结果的情况下提供“故障转移”。添加此配置后,办公室 #1 运行正常。

我们最近设立了办公室 #2,办公室 #1 和办公室 #2 之间的唯一区别是 DNS 服务器硬件(办公室 #1 = Ubuntu 在 x86_64 上运行,办公室 #2 = Raspberry Pi),因此版本略有不同dnsmasq(办公室 #1 = 2.68,办公室 #2 = 2.76)。而且,办公室 #2 遇到的问题与办公室 #1 遇到的问题相同。

据我了解,基于上述配置,请求sso.8x8.com应经过以下步骤:

  1. 查询8.28.0.9sso.8x8.com
  2. 取回CNAME(见dig下面的结果)
  3. 查询192.84.18.11CNAME
  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中它似乎并没有跟进并请求 IP 地址(如果我的解释正确的话)。

我有几个问题:

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

  2. 这两种架构和版本之间是否存在相关差异,从而dnsmasq导致出现此问题?可能是什么原因导致的?

  3. 有没有什么办法可以解决这个问题?

答案1

经过大量搜索和设置后,我找到了答案。

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

解决方案很简单,就是颠倒指令的顺序server

相关内容