在Linux系统中,查看DNS服务器配置是网络管理和故障排查中的常见操作,DNS(域名系统)作为互联网的核心服务之一,负责将人类可读的域名转换为机器可识别的IP地址,Linux系统提供了多种命令和工具来查看当前使用的DNS服务器配置,包括系统级配置、网络接口配置以及临时查询等,以下将详细介绍这些方法及其适用场景。

最常用的查看DNS服务器的方法是通过resolv.conf文件,该文件是Linux系统中DNS解析的核心配置文件,位于/etc/resolv.conf,它记录了系统在进行域名解析时使用的DNS服务器地址,用户可以通过cat、less或more等命令查看该文件的内容,执行cat /etc/resolv.conf会显示类似以下的内容:
nameserver 8.8.8.8
nameserver 8.8.4.4
search example.com
nameserver行指定了DNS服务器的IP地址,可以有多个,系统会按顺序尝试使用这些服务器;search行定义了域名搜索列表,当查询的域名不完整时(如只输入host),系统会自动添加搜索列表中的后缀进行尝试,需要注意的是,在许多现代Linux发行版(如Ubuntu 18.04+、CentOS 7+)中,/etc/resolv.conf文件可能是由系统网络管理工具(如systemdresolved、NetworkManager)动态生成的,直接编辑该文件可能无法永久保存配置。
对于使用systemdresolved服务的系统(如Ubuntu 20.04、Debian 10等),可以通过resolvectl命令查看更详细的DNS配置信息。systemdresolved是systemd提供的网络名称解析服务,它不仅管理本地DNS解析,还支持DNS over TLS、DNS over HTTPS等安全特性,执行resolvectl status会显示当前系统的DNS解析状态,包括全局DNS服务器、网络接口的DNS配置、域名搜索列表等。
Global DNS settings:
DNS Servers: 8.8.8.8 8.8.4.4
DNSSEC: no
DNSOverTLS: no
DNSStubListener: yes
...
Link 2 (eth0):
Current Scopes: DNS
DNS Servers: 192.168.1.1
DNSSEC: no
DNSOverTLS: no
这里,Global DNS settings部分显示了全局使用的DNS服务器,而Link 2 (eth0)部分则显示了特定网络接口(如以太网接口eth0)的DNS配置,如果需要查看特定接口的DNS信息,可以使用resolvctl query <域名>或resolvctl status <接口名>。
对于使用NetworkManager管理网络的系统(如Fedora、RHEL等),可以通过nmcli命令查看DNS配置,NetworkManager是Linux下常用的网络管理工具,它负责配置和管理网络连接,执行nmcli connection show <连接名> | grep ipv4.dns或nmcli device show <接口名> | grep dns可以查看指定连接或接口的DNS服务器配置。
ipv4.dns: 8.8.8.8, 8.8.4.4
nmcli connection show会列出所有网络连接的详细信息,包括DNS设置,如果需要修改DNS配置,也可以通过nmcli命令动态调整,例如nmcli connection modify <连接名> ipv4.dns "1.1.1.1 1.0.0.1"。

除了上述系统级配置外,还可以通过查询本地DNS缓存来查看最近解析的域名和使用的DNS服务器,Linux系统中的DNS缓存通常由systemdresolved或nscd(Name Service Cache Daemon)管理,对于systemdresolved,可以使用resolvctl query <域名>查看解析过程,
resolvctl query www.example.com
www.example.com: 93.184.216.34
link: eth0
servers: 192.168.1.1
这里,servers字段显示了解析该域名时使用的DNS服务器,对于使用nscd的系统,可以执行nscd i hosts刷新DNS缓存,然后通过cat /var/cache/nscd/hosts查看缓存内容,但这种方法无法直接显示DNS服务器信息。
如果需要查看系统中所有网络接口的DNS配置,可以结合ip和cat命令,执行ip route show | grep default可以获取默认网关对应的网络接口,然后查看该接口的配置文件(如/etc/sysconfig/networkscripts/ifcfg<接口名>,在CentOS/RHEL系统中),其中DNS1、DNS2等字段指定了DNS服务器地址,在Ubuntu/Debian系统中,网络接口配置通常位于/etc/netplan/目录下,可以通过cat /etc/netplan/*.yaml查看DNS配置。
以下是一个归纳不同方法查看DNS服务器的表格:
| 方法 | 命令/文件 | 适用场景 | 示例输出内容 |
|---|---|---|---|
查看resolv.conf |
cat /etc/resolv.conf |
传统系统,查看当前DNS配置 | nameserver 8.8.8.8 |
使用resolvectl |
resolvectl status |
systemdresolved管理的系统 | 全局和接口DNS配置 |
使用nmcli |
nmcli connection show <连接名> |
NetworkManager管理的系统 | ipv4.dns: 8.8.8.8, 8.8.4.4 |
| 查询DNS缓存 | resolvectl query <域名> |
查看特定域名的解析过程和使用的DNS服务器 | servers: 192.168.1.1 |
| 查看接口配置文件 | cat /etc/sysconfig/networkscripts/ifcfgeth0 |
RHEL/CentOS系统,查看静态DNS配置 | DNS1=8.8.8.8 |
在实际操作中,选择合适的方法取决于系统的发行版和网络管理工具,在Ubuntu 20.04中,推荐使用resolvectl;在CentOS 8中,nmcli是更优的选择;而在一些轻量级发行版或旧系统中,直接查看/etc/resolv.conf仍然有效,如果需要临时修改DNS服务器(例如用于测试),可以使用nameserver参数结合dig或nslookup命令,例如dig @8.8.8.8 www.example.com,这会临时使用指定的DNS服务器进行查询,而不影响系统配置。
需要注意的是,DNS配置的正确性直接影响网络访问,如果遇到域名解析失败的问题,可以按照以下步骤排查:首先检查/etc/resolv.conf或resolvectl status中的DNS服务器是否可达(使用ping命令);使用dig或nslookup测试DNS解析是否正常;检查网络接口配置和防火墙规则是否阻止了DNS查询(如UDP端口53的访问)。

相关问答FAQs:
-
问:为什么我修改了
/etc/resolv.conf文件后,DNS配置没有生效?
答:在现代Linux发行版中,/etc/resolv.conf文件通常由网络管理工具(如systemdresolved、NetworkManager)动态管理,直接编辑该文件可能无法持久化生效,建议通过系统工具修改配置,例如在Ubuntu中使用resolvectl,在CentOS中使用nmcli,或修改对应的网络配置文件(如/etc/netplan/*.yaml或/etc/sysconfig/networkscripts/ifcfg<接口名>)。 -
问:如何确认系统当前使用的DNS服务器是否响应正常?
答:可以使用dig或nslookup命令测试DNS解析,执行dig @8.8.8.8 www.example.com会使用指定的DNS服务器(8.8.8.8)查询www.example.com的IP地址,如果返回正确结果,说明该DNS服务器正常;如果执行nslookup www.example.com,系统会使用当前配置的DNS服务器进行查询,通过观察输出中的Server字段可以确认实际使用的DNS服务器,并通过Nonauthoritative answer等判断解析是否成功。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/288514.html