我有一个正在运行的 DNS 服务器172.18.0.2
,我想将其用作我的 DNS 服务器。我进入网络管理器并设置了我的连接:
服务器的工作原理:
$ host test 172.18.0.2
Using domain server:
Name: 172.18.0.2
Address: 172.18.0.2#53
Aliases:
test has address 93.184.216.34
但 Ubuntu 没有使用它:
$ host test
Host test not found: 2(SERVFAIL)
我怎样才能获得预期的行为?
Ubuntu 版本 19.04。
systemd-resolve --status
输出:
Link 2 (enp0s31f6)
Current Scopes: DNS
DefaultRoute setting: yes
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
Current DNS Server: 172.18.0.2
DNS Servers: 172.18.0.2
DNS Domain: ~.
dig host
输出:
; <<>> DiG 9.11.5-P1-1ubuntu2.6-Ubuntu <<>> host
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 39546
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;host. IN A
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: dim. déc. 15 21:08:57 CET 2019
;; MSG SIZE rcvd: 33
答案1
让所有内容与您的自定义 DNS 配合的最可靠方法是使用您自己的 TLD,例如 .local 或类似名称,并在 /etc/resolv.conf 中将其设为搜索域。这样,当您搜索“主机”时,它将自动知道搜索 .local 域。DNS 是围绕域设计的。
如果您确实不想使用 TLD,那么输入/etc/hosts
可能适合您的用例。这会将“主机”直接映射到您想要的资源。
如果您目前由于 systemd 存根解析器而遇到问题,这里有一种手动指定名称服务器的方法(根据您提供的 dig 输出,看起来可能是这种情况,而且我过去也遇到过这个问题。在进行任何更改之前备份所有配置,并注意这假设未修改的 /etc/nsswitch.conf):
以下命令将指示您的 /etc/resolv.conf 是否是符号链接:
kano@:~$ file -s /etc/resolv.conf
/etc/resolv.conf: symbolic link to ../run/systemd/resolve/stub-resolv.conf
要测试此方法,请备份原始 resolv.conf 符号链接,以备需要回滚时使用(要回滚,只需重命名备份 /etc/resolv.conf,无需重新启动即可使上述操作生效)。修改现有符号链接将不起作用:
kano@:~$ mv /etc/resolv.conf /etc/resolv.conf.bak
最后,使用您选择的文本编辑器在新的自定义 /etc/resolv.conf 中指定所需的名称服务器和搜索值(我的 AWS 实例 /etc/resolv.conf 内容如下,您需要根据您的环境进行调整)。
kano@:~$ cat /etc/resolv.conf
nameserver 172.31.0.2
search us-west-2.compute.internal
如果这可以解决名称解析问题(并且您可以通过dig host
它查询您指定的名称服务器而不是存根解析器 127.0.0.53 来验证),我会考虑将不可变属性(您可以使用检查属性lsattr filename
)添加到您的 /etc/resolv.conf 以防止升级/systemd 通过以下方式覆盖它:
chattr +i /etc/resolv.conf
您将需要通过 chattr -i 删除不可变属性以便将来修改此文件。