我使用的是什么 DNS 服务器?

Grz*_*nio 340 networking dns

如何检查我使用的是哪个 DNS 服务器(在 Linux 中)?我正在使用网络管理器和到我大学 LAN 的有线连接。(我试图找出为什么我的域没有得到解析)

Lon*_*biz 274

这是我的方法:

( nmcli dev list || nmcli dev show ) 2>/dev/null | grep DNS
Run Code Online (Sandbox Code Playgroud)

在上述方式之前有效:

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

在 Debian 上,您需要安装network-manager 软件包

  • 如果您使用 **VPN** 和 **NetworkManager**,这将很有用。你的 `/etc/resolv.conf` 将指向你的机器,`dnsmasq` 解析名称由 **NetworkManager** 配置。 (17认同)
  • 在 Debian 上,这需要 `network-manager` 包。 (7认同)
  • 这是最好的答案,resolve.conf 并不总是显示真相 (4认同)
  • nm-tool 在较新的 linux 中不可用。例如,它不在 debian 8 的“network-manager”包中。 (3认同)
  • 我已经更新了答案以反映 2016 年对我有用的内容。 (2认同)
  • 这在 Ubuntu 虚拟机上对我不起作用。`nmcli dev show` 没有 DNS 信息。然而,“systemd-resolve --status”确实拥有真正的 DNS 服务器。https://unix.stackexchange.com/a/434756 (2认同)

小智 272

您应该能够在以下方面获得一些合理的信息:

$ cat /etc/resolv.conf 
Run Code Online (Sandbox Code Playgroud)

  • 这个文件在 Ubuntu 上通常指向 127.0.1.1 - 它是本地 DNS 缓存服务器,而不是实际的上游。 (51认同)
  • 但是,请注意(在现代 Linuxen 上)`/etc/nsswitch.conf` 的内容规定了使用哪些名称服务(DNS、LDAP 等)以及使用顺序。说`fgrep hosts: /etc/nsswitch.conf`。如果它只引用 DNS,`/etc/resolv.conf` 是查找名称服务器的正确位置。但您也有可能在使用 mDNS(又名 ZeroConf、又名 Avahi、又名 Bonjour 等)等。在这种情况下,事情取决于您使用的是什么。 (36认同)
  • 请参阅@G32RW 或@Lonniebiz 的答案,以了解在各种情况下更强大的方法,例如,当您得到类似“127.0.0.53”的答案时 (6认同)
  • 如果您配置了多个上游服务器?如何知道当前使用的是哪一个? (4认同)
  • 我建议提及该文件是一个链接,并为使用 resovconf 的系统(如 Ubuntu)动态生成。我已经看到这个答案数百万次了,直到今天我认为它是正确的,因为我现在明白它实际上是一个动态生成的文件。 (4认同)
  • @BarryKelly 检查您的路由器使用什么,然后 (3认同)
  • 此解决方案不再是最新的。我发现@G32RW 建议的`systemd-resolve --status` 是针对此问题的最新解决方案。 (3认同)
  • @Geremia 路由器?我在办公室 wifi 上,我想验证我使用的是哪个 DNS 服务器。或者我正在使用 VPN 并想进行类似的验证。通常我无法访问路由器。 (2认同)

小智 115

在运行 systemd 的系统上使用:

systemd-resolve --status
Run Code Online (Sandbox Code Playgroud)

或者:

resolvectl
Run Code Online (Sandbox Code Playgroud)

  • 这是在 Ubuntu 18.04 Bionic Beaver 中执行此操作的新默认方式 - 大家习惯它! (16认同)
  • systemd-resolve:无法识别的选项“--status” (11认同)
  • 这是唯一对我有用的解决方案,因为其他人返回了 127.0.0.53 (9认同)
  • 说“无法获取全局数据:未找到单元 dbus-org.freedesktop.resolve1.service。” (3认同)
  • 我在读什么?我只看到 DNSSEC 记录。 (2认同)

Fre*_*eit 96

我认为您还可以查询 DNS,它会显示返回结果的服务器。尝试这个:

dig yourserver.somedomain.xyz
Run Code Online (Sandbox Code Playgroud)

并且响应应该告诉您哪些服务器返回了结果。您感兴趣的输出将如下所示:

;; Query time: 91 msec
;; SERVER: 172.xxx.xxx.xxx#53(172.xxx.xxx.xxx)
;; WHEN: Tue Apr 02 09:03:41 EDT 2019
;; MSG SIZE  rcvd: 207
Run Code Online (Sandbox Code Playgroud)

您还可以dig通过使用来告诉查询特定的 DNS 服务器dig @server_ip

  • Ubuntu 18.04 只显示本地 dns 缓存:`SERVER: 127.0.0.53#53(127.0.0.53)` (12认同)
  • 在 Debian 上,这需要 `dnsutils` 包。 (11认同)
  • 如果您使用在本地计算机上运行的任何 DNS 掩码/缓存服务,它将隐藏真正的 DNS 服务器。 (8认同)
  • 这只告诉您哪个服务器用于该查询。它不会告诉您主机可能使用的所有 DNS 服务器。 (2认同)

小智 74

做一个,nslookup。它的部分结果包括它使用的服务器。

在下面的示例中,它显示使用的 DNS 服务器位于 8.8.8.8。

$ nslookup google.com
Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
Name:   google.com
Address: 172.217.22.174
Run Code Online (Sandbox Code Playgroud)

  • 在最近的 Ubuntu 上,这再次指向本地缓存服务器 127.0.0.1,如 [此评论](https://unix.stackexchange.com/questions/28941/what-dns-servers-am-i-使用#comment465023_28944) (13认同)
  • 在 Debian 上,这需要 `dnsutils` 包。 (8认同)

小智 20

使用新network-manager命令nmcli,执行以下操作:

nmcli --fields ipv4.dns,ipv6.dns con show [connection_name]
Run Code Online (Sandbox Code Playgroud)

在较新版本的网络管理器上(例如在 Ubuntu 16.04 中),字段名称略有不同:

nmcli --fields ip4.dns,ip6.dns con show [connection_name]
Run Code Online (Sandbox Code Playgroud)

如果您不知道连接名称,请使用:

nmcli -t --fields NAME con show --active
Run Code Online (Sandbox Code Playgroud)

例如,在旧版本的 nmcli 上:

$ nmcli --fields ip4.dns,ip6.dns con show 'Wired connection 1'
IP4.DNS[1]:                             172.21.0.13
IP4.DNS[2]:                             172.21.0.4
Run Code Online (Sandbox Code Playgroud)

  • 返回`错误:无效字段'ip4.dns';允许的字段:NAME、UUID、TYPE、TIMESTAMP、TIMESTAMP-REAL、AUTOCONNECT、AUTOCONNECT-PRIORITY、READONLY、DBUS-PATH、ACTIVE、DEVICE、STATE、ACTIVE-PATH。` (2认同)

小智 13

获取第一个 DNS SERVER(仅限 IP):

cat /etc/resolv.conf |grep -i '^nameserver'|head -n1|cut -d ' ' -f2
Run Code Online (Sandbox Code Playgroud)
  • cat 将输出 DNS 配置
  • grep 仅过滤名称服务器
  • head 将只保留第一行/实例
  • cut 取行的 ip 部分(第二列以 ' ' 作为分隔符)

要将 DNS ip 放在环境变量中,您可以使用如下:

export THEDNSSERVER=$(cat /etc/resolv.conf |grep -i '^nameserver'|head -n1|cut -d ' ' -f2)
Run Code Online (Sandbox Code Playgroud)

  • `grep -m 1` 在第一次匹配后停止匹配,因此您不必使用 `head` (3认同)

oHo*_*oHo 10

使用 resolvectl

$ resolvectl status | grep -1 'DNS Server'
    DNSSEC supported: no
  Current DNS Server: 1.1.1.1
         DNS Servers: 1.1.1.1
                      1.0.0.1
Run Code Online (Sandbox Code Playgroud)

为了兼容性,对于 Ubuntu 18.10 ,systemd-resolveresolvectl许多发行版上的符号链接:

$ type -a systemd-resolve
systemd-resolve is /usr/bin/systemd-resolve

$ ll /usr/bin/systemd-resolve
lrwxrwxrwx 1 root root 10 nov.  15 21:42 /usr/bin/systemd-resolve -> resolvectl

$ type -a resolvectl
resolvectl is /usr/bin/resolvectl

$ file /usr/bin/resolvectl
/usr/bin/resolvectl: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=09e488e849e3b988dd2ac93b024bbba18bb71814, stripped
Run Code Online (Sandbox Code Playgroud)


tom*_*nux 8

如果您正在使用网络管理器,您可能会从您大学的 dhcp 服务器获取所有网络参数。

如果您不想使用 shell 检查您的 dns 设置(如 hesse 和 Alexios 所述),您可以从“网络信息”面板中查看它们。

您可以通过在网络管理器图标上按鼠标右键并从菜单中选择“连接信息”来访问此面板。


小智 6

我有 Fedora 25,并且在命令行上对 sudo 命令也有类似的缓慢响应。

nmcli dev show | grep DNS 
Run Code Online (Sandbox Code Playgroud)

显示我的 3 个适配器中只有一个(两个活动的)有 DNS 条目。通过将 DNS 条目添加到一张没有条目的活动卡 - 快!一切都很好,响应时间很快。