如何查看由DHCP分配的DNS地址?

如何查看由DHCP分配的DNS地址?
ifconfig无法显示它。
$ ifconfig -a
eth0      Link encap:Ethernet  HWaddr 90:e6:ba:22:6a:f2  
          inet addr:192.168.1.111  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::92e6:baff:fe22:6af2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:224856 errors:0 dropped:0 overruns:0 frame:0
          TX packets:220040 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:166848627 (166.8 MB)  TX bytes:20256333 (20.2 MB)
          Interrupt:46 Base address:0x4000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:5889 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5889 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:468885 (468.8 KB)  TX bytes:468885 (468.8 KB)

wlan0     Link encap:Ethernet  HWaddr 00:26:5e:e8:4f:8e  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

通过执行命令 **ifconfig | grep 'inet addr:'**,会返回什么内容? - david6
@david6 网络地址:192.168.1.111 广播地址:192.168.1.255 子网掩码:255.255.255.0 网络地址:127.0.0.1 子网掩码:255.0.0.0 - Victor S
这应该能帮到你。请执行以下命令:cat /var/lib/dhcp3/dhclient.leases | grep dhcp-server-identifier - devav2
@devav2 $ cat /var/lib/dhcp/dhclient-529bed02-363e-4e97-bd5d-9f63f42f17f2-eth0.lease |grep dhcp-server-identifier 选项 DHCP 服务器标识符 192.168.1.1; 选项 DHCP 服务器标识符 192.168.1.1; 选项 DHCP 服务器标识符 192.168.1.1; 选项 DHCP 服务器标识符 192.168.1.1; 选项 DHCP 服务器标识符 192.168.1.1; - Victor S
@devav2 192.168.1.1 是我的路由器地址。 - Victor S
@david6 192.168.1.111 是我的电脑地址。 - Victor S
@david6 请查看 ifconfig 的输出结果。 - Victor S
1你在问什么?DHCP服务从一个地址池(或范围)分配IP地址。DNS服务器返回主机名、域名或邮箱(MX记录)的IP地址。你的ifconfig输出看起来正常。 - david6
@david6 我想获取当前网络连接所使用的DNS地址。 - Victor S
DNS服务器的IP地址是什么?请参考@Anwar的回答。主机名?还有其他什么吗? - david6
11个回答

至少从Ubuntu 15.10开始(可能也适用于早期版本),在终端中运行以下命令:
nmcli dev show eth0 | grep IP4

eth0 是最常见的接口,但也可能是 eth1eth2 等等。

对于旧版本,请使用 nmcli dev list iface eth0 | grep IP4


1很棒的回答!感谢你的分享!我明白了。 - Victor S
很高兴有所帮助。当我想要一种获取这些信息并解析它以按需显示的方法时,我找到了它,因为我有三个不同的可能的DNS服务器(ISP、Google和OpenDNS)。 - Marty Fried
8截至15.04版本,命令为nmcli dev show - Sergiy Kolodyazhnyy
3使用nmcli dev show eth0(在15.04上)也适用于Debian Buster。谢谢! - Luc
嘿 @SergiyKolodyazhnyy,你应该添加一个答案,你的命令是最好的! - Yandry Pozo
1@YandryPozo发布了答案,如所请求 :) - Sergiy Kolodyazhnyy
这个错误提示是“参数列表不被理解”。 - Douglas Gaskell
没有网络管理器将无法工作。 - mestia
@mestia - 嗯,考虑到nmcli是一个用于控制NetworkManager的命令行工具,这是有道理的。 - Marty Fried

现在Ubuntu(以及Debian和几乎所有的发行版)都使用systemd(使用file /sbin/init命令进行检查),也许更优雅的获取这些信息的方式是:
systemd-resolve --status
# Or 
resolvectl dns
  • freedesktop.org文档
  • Arch Wiki:在它说resolvectl的地方使用systemd-resolve --statussystemd-resolveresolvectl的符号链接)。
  • 如果您遇到DNS子系统问题,建议删除resolvconf软件包。可能与systemd-resolve冲突。可能会发生冲突

1适用于未运行NetworkManager的系统的完美解决方案。 Ubuntu 18.04,Ubuntu 19.10 - Ryan Jeremiah Freeman
它在Raspbian上也能运行。 - riofly
2在Buster中无法工作。我收到无法获取全局数据:找不到单元dbus-org.freedesktop.resolve1.service。 - Aenfa
@Aenfa Debian不在讨论范围内,但也许这个链接能帮到你。 - Pablo Bianchi

$ nm-tool 

还将列出DNS服务器。


1+1 是因为这已经经过测试,适用于14.04版本。对于15.04及更高版本,请使用其他答案中建议的nmcli - user37165

打开终端(Ctrl+Alt+T)并输入以下命令来获取DNS地址:
cat /var/lib/dhcp/dhclient.leases | grep dhcp-server-identifier

3/var/lib/dhcp/dhclient.leases里面什么都没有,是空的。 - Victor S
使用命令 "$ file /var/lib/dhcp/dhclient.leases" 检查文件状态,结果显示该文件为空。 - Victor S
尝试使用/var/lib/dhcp/dhclient.eth0.leases。 - frag
3那是一个无用的cat使用。你可能是指grep domain-name-servers /var/lib/dhcp/dhclient.leasesdomain-name,没有dhcp-server)。 - Pablo Bianchi

这是它:
cat /etc/resolv.conf

但请勿编辑此文件

2最近的Ubuntu版本(我认为是2012年之后)已经不再有用了,因为它会包含nameserver 127.0.1.1,指向本地安装的dnsmasq服务。按照@anwar-shah和@marty-fried所述,最好查询NetworkManager。 - gerlos
2根据你提到的,该文件可以被编辑,因此其中的地址不一定是由DHCP分配的。如果你自己进行了编辑,显然会有所不同,但是如果你使用公司VPN呢?或者其他因素影响了这个文件呢?这就是为什么我认为这不是一个好的答案,尽管简单且普适。它是一个很好的首要查看位置,但本身并不是一个完整的答案。 - Luc
在Ubuntu 22.04中,命令grep nameserver /etc/resolv.conf输出nameserver 127.0.0.53,即使DNS服务器已正确设置。 - frankfalse

作为@MartyFried答案的GUI替代方案,请尝试以下操作:
  1. 点击顶部面板上的网络连接图标。

  2. 选择Wi-Fi设置

  3. 它应该显示DNS服务器地址

    screenshot


4我的Ubuntu没有任何图形用户界面桌面。 - Victor S
@VictorS,它显示了与其他答案相同的信息。我已经检查过了。 - Anwar
1谢谢你的回答,对于Gnome或KDE用户来说非常方便。 - Victor S

在Ubuntu 16.04中,来自dhcp的信息被写入到:/var/lib/NetworkManager/dhclient-.conf

如我在评论中提到的(根据大家的要求,现在已经变成了一个答案),在Ubuntu 15.04及以后的版本中可以使用nmcli dev show命令。再加上grep命令,你就可以完成设置了。
$ nmcli dev show | grep 'DNS'                                                                                                                                                                     
IP4.DNS[1]:                  208.67.222.222
IP4.DNS[2]:                  208.67.220.220

我的实际解决方案(估计2015年,Ubuntu 14.04),是这样的:
  1. 启动CLI
  2. 输入:sudo apt-get install gnome-system-tools
  3. 安装成功后,在终端上输入:network-admin

如果你无论如何都做不到这一点,那么尝试这个,虽然对我来说还不够好,但它完成了我的工作:

  1. 输入 dig google.com
  2. 在最后你可以看到这样的东西(估计2015年);; SERVER: 然后是一个IP地址(至少在我的机器上)那就是为您解析该域名的实际DNS服务器。该服务器可能会根据主机名而变化。

以下方法适用于我在20.04 LTS和22.04 LTS上的操作:
resolvectl status

它将显示每个接口的DHCP广告和当前DNS服务器。任何手动配置的DNS服务器也会显示出来。 您还可以看到DNS域(这是我在找到这个帖子时正在寻找的)。
Global
       Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub

Link 2 (enp0s31f6)
Current Scopes: none
     Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

Link 3 (wlp4s0)
    Current Scopes: DNS
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.0.67
       DNS Servers: 192.168.0.67 192.168.0.66
        DNS Domain: home

Link 4 (docker0)
Current Scopes: none
     Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported