如何使用自定义 DNS 服务器?

如何使用自定义 DNS 服务器?

我有一个正在运行的 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 删除不可变属性以便将来修改此文件。

相关内容