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 地址,它们可能会被使用,但我不确定这是如何工作的。我认为在可能的情况下,在大多数情况下最好使用网络管理器。
PLA*_*PLA 109
在 Ubuntu 18.04 和 20.04 中,您可以使用 systemd-resolve --status
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)
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)
小智 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 时。
小智 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)
令人惊奇的是有这么多方法可以做到这一点。在 Ubuntu Server 18.04 上,如果您不想安装任何额外的东西nm-tool
,例如 ,则systemd-resolve --status
可以开箱即用地获取 DNS 信息。
如果您不仅有兴趣获取 DNS 服务器,还有默认网关、IP 地址、网络掩码等,那么netplan ip leases eth0
将以易于阅读的形式为您提供所有这些信息(假设您对界面感兴趣eth0
) 。