我正在使用哪些DNS服务器?


247

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

Answers:


206

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

$ cat /etc/resolv.conf 

26
但是,请注意(在现代Linuxen上)内容/etc/nsswitch.conf决定了要使用的名称服务(DNS,LDAP等)以及顺序。说fgrep hosts: /etc/nsswitch.conf。如果仅引用DNS,/etc/resolv.conf则是查找名称服务器的正确位置。但是,您可能还会使用mDNS(又名ZeroConf,又名Avahi,又名Bonjour等),在这种情况下,取决于您使用的是什么。
Alexios 2012年

27
在Ubuntu上,该文件通常指向127.0.1.1-它是本地DNS缓存服务器,而不是实际的上游服务器。
巴里·凯利

2
@BarryKelly检查您的路由器使用了什么,然后
Geremia

2
并且,如果您配置了几个上游服务器?如何知道当前使用的是哪一个?
西尔文·勒鲁

4
请参阅@ G32RW或@Lonniebiz的答案,以了解在各种情况下的更可靠方法,例如,当您获得诸如127.0.0.53
nealmcb

192

这是我的方法:

nmcli dev show | grep DNS

上面的方法更有效:

nm-tool | grep DNS

14
如果您使用的是VPNNetworkManager,则此功能很有用。您/etc/resolv.conf将指向您的计算机,并dnsmasq解析由NetworkManager配置的名称。
格热戈日祖尔

6
在Debian上,这需要network-manager软件包。
TranslucentCloud

2
nm-tool在较新的Linux中不可用。例如它不是在的Debian 8的“网络管理器”包
不要亮

2
我已经更新了答案,以反映出2016
有用的东西。– Lonniebiz

3
这是最好的答案,resolve.conf并不总是显示真相
Blade

71

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

dig yourserver.somedomain.xyz

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

;; 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

您还可以告诉dig使用以下方法查询特定的DNS服务器dig @server_ip


8
在Debian上,这需要dnsutils软件包。
Faheem Mitha 2012年

6
如果使用在本地计算机上运行的任何DNS掩码/缓存服务,它将隐藏真实的DNS服务器。
karatedog

3
Ubuntu 18.04仅显示了本地dns缓存:SERVER: 127.0.0.53#53(127.0.0.53)
wisbucky

57

只是做一个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

1
您能否举例说明在提示中输入什么?
chovy

示例: $ nslookup www.google.com
Ren

7
在Debian上,这需要dnsutils软件包。
Gayan Weerakutti

5
在最近的Ubuntu上,这再次指向本地缓存服务器127.0.0.1(已在此注释中
FriendFX

在CentOS 7中,它退出并出错,但是它是一个vm,所以我nslookup google.com在Windows主机中这样做了,然后找到了名称服务器。/etc/resolv.conf像这样添加:nameserver xx.xx.xx.xx并重新启动service network,一切都很好。夸你。
WesternGun

54

在运行systemd的系统上使用:

systemd-resolve --status

3
systemd-resolve:无法识别的选项'--status'–
Acumenus

@ABB系统?系统版本?
G32RW'4

229-4ubuntu21.2
Acumenus'Apr

10
这是在Ubuntu 18.04 Bionic Beaver中执行此操作的新默认方法-大家都习惯它!
AveryFreeman '18

4
这是唯一对我
有用的

13

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

nmcli --fields ipv4.dns,ipv6.dns con show <connection_name>

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

nmcli --fields ip4.dns,ip6.dns con show <connection_name>

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

nmcli -t --fields NAME con show --active

例如:

$ 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

我的结果:order «con» «show» is not valid
Sopalajo de Arrierez,2016年

在Ubuntu 15.10上使用network-manager 1.0.4对我来说工作正常。也许您有旧版本?
Sameer 2013年

表格格式非常糟糕。我希望获得类似于Powershell的格式的列。
CMCDragonkai '17

1
返回Error: invalid field 'ip4.dns'; allowed fields: NAME,UUID,TYPE,TIMESTAMP,TIMESTAMP-REAL,AUTOCONNECT,AUTOCONNECT-PRIORITY,READONLY,DBUS-PATH,ACTIVE,DEVICE,STATE,ACTIVE-PATH.
FriendFX

仅仅nmcli是我在ubuntu 19.04上所需的一切
约翰·米

9

获得第一个DNS服务器(仅IP):

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

要将DNS ip放入环境变量中,可以使用以下方法:

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

2
grep -m 1在第一次比赛之后停止比赛,因此您不必使用head
sshow

为了减轻负担,使用Perl regexp捕获组非常简洁,并且grep使用文件参数:grep -Pom 1 '^nameserver \K\S+' /etc/resolv.conf。刚刚用grep perl正则表达式
sshow

8

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

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

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


5

使用 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

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

$ 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

在Ubuntu 18.10上完美工作。
乔治·斯托亚诺夫

3

命令

 nmcli dev list iface <interfacename> | grep IP4

用您的替换“ interfacename”。

范例

 nmcli dev list iface eth0 | grep IP4

这将列出所有DNS服务器(如果使用多个)。


nmcli dev list iface [devicename]是正确的命令
Sebix

我没有注意到<interface>是隐藏的,因为我使用了<>
Maythux 2015年

1
在debian上,我得到一个错误-$ nmcli dev list iface eth0错误:'dev'命令'list'无效。
2015年

nmcli是RH专用命令。
Rui F Ribeiro

这是正确的答案!
VAdaihiep

3

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

nmcli dev show | grep DNS 

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


也许是另一种选择
Amos Folarin


0

一旦认为自己找到了dns,就可以直接使用dig:查询它 dig @<dns ip> <host to lookup>。如果它可以正常工作,则应在其后看到SERVER状态为NOERROR

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.