我们有两个远程办公室,它们都使用同一个 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
应经过以下步骤:
- 查询
8.28.0.9
sso.8x8.com
- 取回
CNAME
(见dig
下面的结果) - 查询
192.84.18.11
CNAME
- 一无所获
- 查询
208.67.222.222
CNAME
- 取回 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 地址(如果我的解释正确的话)。
我有几个问题:
我对此类复杂 DNS 查询所涉及的事件序列的理解是否正确?
这两种架构和版本之间是否存在相关差异,从而
dnsmasq
导致出现此问题?可能是什么原因导致的?有没有什么办法可以解决这个问题?
答案1
经过大量搜索和设置后,我找到了答案。
事实证明,dnsmasq
版本 2.69 中的行为发生了变化。指令的评估顺序server
从“自上而下”更改为“自下而上”。以下是详细信息来自dnsmasq
邮件列表。
解决方案很简单,就是颠倒指令的顺序server
。