列出系统使用的 DNS 服务器的命令行

Anu*_*yal 325 command-line dns

是否有命令列出我的系统使用的 dns 服务器?

我试过

$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
$ cat /etc/network/interfaces 
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
Run Code Online (Sandbox Code Playgroud)

但它没有列出任何服务器,如果我转到“网络管理器 GUI 工具”,在无线部分它会列出“DNS 192.168.1.1 8.8.8.8 8.8.4.4”

我可以从命令行获取相同的信息吗?

我正在使用 Ubuntu 12.04 LTS

Mar*_*ied 313

resolv.conf 不再真正使用,除非您自己实现它。网络管理员现在就这样做了。我创建了一个别名来列出系统上的 DNS 服务器,因为我有时会从 OpenDNS 切换到 Google 的开放 DNS。

Ubuntu >= 15

nmcli device show <interfacename> | grep IP4.DNS
Run Code Online (Sandbox Code Playgroud)

Ubuntu <= 14

nmcli dev list iface <interfacename> | grep IP4
Run Code Online (Sandbox Code Playgroud)

就我而言,<interfacename>is eth0,这很常见,但并非总是如此。

看看这是不是你想要的。

编辑:

我认为resolv.conf实际上是间接使用的,因为网络管理器创建了侦听127.0.0.1的服务器,但我被告知这是一个不应指望的实现细节。我认为如果您在此条目之前输入 DNS 地址,它们可能会被使用,但我不确定这是如何工作的。我认为在可能的情况下,在大多数情况下最好使用网络管理器。

  • 我使用的是 15.04,而 'nmcli dev show |grep DNS' 对我有用。 (6认同)
  • 谢谢,是的,这似乎有效,ubuntu 网络似乎令人困惑,所以我可以在 resolve.conf/base 或 /etc/network/interfaces 或网络管理器中设置 dns 服务器,是否有关于 ubuntu 网络的权威指南? (3认同)
  • @vcardillo:最初的问题是:“我使用的是 Ubuntu 12.04 LTS”。自从我发布答案以来已经 5 年了。没有什么可以天长地久。 (2认同)

PLA*_*PLA 109

在 Ubuntu 18.04 和 20.04 中,您可以使用 systemd-resolve --status

  • 这已被 `resolvectl status` 取代。投票 https://askubuntu.com/a/1399661/25918 (6认同)
  • +1,内置检查。不需要外部实用程序。 (5认同)
  • +10,不需要额外的实用程序 (5认同)
  • 在 21.04 上,它显示“sd_bus_open_system:没有这样的文件或目录” (3认同)
  • 注意,如果你 cat /etc/resolv.conf 它甚至会说这个 (2认同)
  • IMO 这应该是公认的答案。另外,值得指出的是,“systemd-resolve mydomain.com”输出正在查询的 DNS 服务器(如果您设置了 VPN 等,则非常有用)。 (2认同)
  • 这不是完整的答案,因为它没有解释命令返回的内容。 (2认同)

tgm*_*883 88

这对 Ubuntu 13.10 及更早版本有效。对于 Ubuntu 14.04 及更高版本,请参阅Koala Yeung 的回答:How to know what DNS is I used in Ubuntu from 14.04 onwards


nm-tool
Run Code Online (Sandbox Code Playgroud)

你会得到类似的输出

NetworkManager Tool

State: connected (global)

- Device: eth0  [Wired connection 1] -------------------------------------------
  Type:              Wired
  Driver:            e1000e
  State:             connected
  Default:           yes
  HW Address:        00:11:22:33:44:55

  Capabilities:
    Carrier Detect:  yes
    Speed:           1000 Mb/s

  Wired Properties
    Carrier:         on

  IPv4 Settings:
    Address:         10.21.6.13
    Prefix:          24 (255.255.255.0)
    Gateway:         10.21.6.1

    DNS:             10.22.5.133
    DNS:             10.22.5.3
Run Code Online (Sandbox Code Playgroud)

或者只看DNS做

nm-tool | grep DNS
Run Code Online (Sandbox Code Playgroud)

  • 在 lubuntu 14.04 上也能很好地工作。谢谢 (2认同)
  • 在 15.10 上找不到 nm-tool (2认同)
  • 是的,这不再起作用了……16.x 中也没有“nm-tool”。“nmcli”(在马蒂·弗里德的回答中)是正确的选择 (2认同)

Pet*_*rch 69

这两个得分最高的答案,nmcli dev list iface <interfacename> | grep IP4并且nm-tool都认为网络管理器控制。它是 - 至少大部分时间在台式机上。但更完整的答案是有时网络管理器不受控制。例如直接vpnc搞乱/etc/resolv.conf

所以:首先检查是否使用了 127.0.0.1/localhost。这可以通过以下方式完成dig

> dig something.unknown  | grep SERVER:
;; SERVER: 127.0.0.1#53(127.0.0.1)
Run Code Online (Sandbox Code Playgroud)

现在您知道我们正在使用 localhost。继续使用流行的答案之一。我喜欢:

> nm-tool | grep DNS:
    DNS:             8.8.8.8
Run Code Online (Sandbox Code Playgroud)

但是如果 127.0.0.1/localhost没有被使用,那么nm-tool's 和nmcli's 的输出就会产生误导:

> dig something.unknown  | grep SERVER:
;; SERVER: 172.22.216.251#53(172.22.216.251)
> nm-tool | grep DNS:
    DNS:             8.8.8.8
Run Code Online (Sandbox Code Playgroud)

在这里,dig是正确的,nm-tool的信息具有误导性。实际上,我已通过 VPN 连接到的环境的本地地址已正确解析。所有这些 Google 的 DNS8.8.8.8 都不知道。

这是因为在使用 连接到 VPN 后vpnc,它会插入一行,/etc/resolv.conf如下所示:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 1.2.3.4
nameserver 127.0.0.1
search MyDomain
Run Code Online (Sandbox Code Playgroud)

  • 这是最完整的答案 (5认同)

小智 37

cat /etc/resolv.conf 应该显示您的 DNS 服务器。

您不能resolv.conf直接使用 Ubuntu 12.04修改。如果您需要更改它们,您可以/etc/network/interfaces通过添加以下内容在您的文件中添加新的 DNS 服务器 :

 dns-nameservers x.x.x.x x.x.x.x
Run Code Online (Sandbox Code Playgroud)

x您希望使用的 DNS 服务器在哪里。

如果我是你,我会卸载network-manager. 在我看来,这是一堆废话。

您可以手动完成所有需要做的事情,而无需担心更改设置,尤其是当您的计算机上有多个 NIC 时。

  • 更改 dns 后是否必须重新启动 nm? (2认同)

小智 15

在 Ubuntu 20.04 中,如果您resolve.conf指向环回:

$ sudo cat /run/systemd/resolve/resolv.conf
nameserver 127.0.0.53
options edns0 trust-ad
Run Code Online (Sandbox Code Playgroud)

和:

$ ss -plnt | grep ':53'
LISTEN   0        4096            127.0.0.53%lo:53               0.0.0.0:*    
Run Code Online (Sandbox Code Playgroud)

您可以使用resolvectl来显示接口的状态:

$ resolvectl status

Global
LLMNR setting: no                  
MulticastDNS setting: no                  
  DNSOverTLS setting: no                  
      DNSSEC setting: no                  
    DNSSEC supported: no                  
          DNSSEC NTA: 10.in-addr.arpa
....

Link 4 (wlo1)
      Current Scopes: DNS           
DefaultRoute setting: yes           
       LLMNR setting: yes           
MulticastDNS setting: no            
  DNSOverTLS setting: no            
      DNSSEC setting: no            
    DNSSEC supported: no            
  Current DNS Server: 10.128.128.128
         DNS Servers: 10.128.128.128
          DNS Domain: ~.
Run Code Online (Sandbox Code Playgroud)


ima*_*man 11

nmcli 版本 0.9.10

您可以使用以下任一命令:

nmcli -t -f IP4.DNS device show eth0
IP4.DNS[1]:192.168.1.1
IP4.DNS[2]:8.8.8.8

nmcli -t -f IP4.DNS connection show conn-name
IP4.DNS[1]:192.168.1.1
IP4.DNS[2]:8.8.8.8
Run Code Online (Sandbox Code Playgroud)


Phi*_*hil 5

令人惊奇的是有这么多方法可以做到这一点。在 Ubuntu Server 18.04 上,如果您不想安装任何额外的东西nm-tool,例如 ,则systemd-resolve --status可以开箱即用地获取 DNS 信息。

如果您不仅有兴趣获取 DNS 服务器,还有默认网关、IP 地址、网络掩码等,那么netplan ip leases eth0将以易于阅读的形式为您提供所有这些信息(假设您对界面感兴趣eth0) 。