我在 VBox 上运行 Unbuntu 19。网络驱动程序是 Nat。我家里的网络使用 dnsmasq 作为 dns 和 dhcp。该服务器称为路由器,为 dhcp 客户端提供具有所需选项的 ip 地址,包括 dns 服务器地址,其中 dnsmasq 服务器是第一个。这一切对于连接到网络的所有设备都运行良好。
使用的dns服务器在这里:(第一个是dnsmasq服务器,1.1.1.1、8.8.8.8、208.67.222.222和第一个来自dhcp服务器)
$ nmcli dev show | grep DNS
IP4.DNS[1]: 192.168.178.2
IP4.DNS[2]: 1.1.1.1
IP4.DNS[3]: 8.8.8.8
IP4.DNS[4]: 208.67.222.222
IP4.DNS[5]: 8.8.4.4
IP4.DNS[6]: 62.140.140.251
IP4.DNS[7]: 62.140.138.233
我遇到的问题没有发生在 Ubuntu 18(在 VBox 中)上,但发生在运行在 VBox 中的 Ubuntu 19 上。
当我在应由 dnsmasq 服务器提供服务的本地网络上尝试时dig host
,没有得到任何结果。
$ dig router
; <<>> DiG 9.11.5-P1-1ubuntu2.4-Ubuntu <<>> router
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 24896
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;router. IN A
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: za jun 01 13:49:59 CEST 2019
;; MSG SIZE rcvd: 35
当我明确指定服务器时,我得到了一个很好的响应:
$ dig router @192.168.178.2
; <<>> DiG 9.11.5-P1-1ubuntu2.4-Ubuntu <<>> router @192.168.178.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10229
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;router. IN A
;; ANSWER SECTION:
router. 0 IN A 192.168.178.2
;; Query time: 3 msec
;; SERVER: 192.168.178.2#53(192.168.178.2)
;; WHEN: za jun 01 14:02:00 CEST 2019
;; MSG SIZE rcvd: 51
如果有人能帮助我解决这个问题,我将非常感激。
干杯
答案1
“第一个” 意义不大。较旧的 Linux libc 版本习惯总是选择第一个配置的服务器,但后来为了实现更好的负载平衡,它被改为随机排列列表,假设所有服务器都以相同的方式工作。
每个操作系统都希望所有配置的 DNS 服务器提供相同的数据。如果一台服务器响应“没有这样的域”,则该响应是最终的——除非操作系统收到不一点反应都没有。
因此,当操作系统决定向 Google DNS 等服务器查询您的本地名称时,它会收到否定的回应,这就是结局——它不会继续询问其他服务器。
你应该做的是配置主机仅有的使用 dnsmasq,并配置 dnsmasq 本身以使用您需要的任何公共上游服务器。这样,您可以从所有不同的操作系统获得可预测的结果,并且还可以获得本地缓存的优势。
(或者如果您的主机支持它,他们可以使用 systemd-resolved 来理解特定于域的名称服务器,并且可以根据域名将查询定向到 dnsmasq 或公共 DNS......但这是多余的,因为 dnsmasq 已经可以集中执行此操作,配置起来会很麻烦。)
答案2
试试这个。sudo apt-get install libnss-winbind
备份 /etc/nsswitch.conf
编辑 /etc/nsswitch.conf:
主机:文件 mdns4_minimal [NOTFOUND=return] dns myhostname 到
主机:文件获胜 mdns4_minimal [NOTFOUND=return] dns myhostname