Ubuntu 19 上解析本地网络名称的问题

Ubuntu 19 上解析本地网络名称的问题

我在 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

相关内容