服务器测评网
我们一直在努力

Linux怎么添加DNS?Linux永久修改DNS配置的命令是什么?

在Linux操作系统中,配置DNS(域名系统)是确保网络连接稳定性和解析速度的关键环节,核心上文归纳是:Linux添加DNS的方法取决于具体的发行版以及所使用的网络管理工具,临时修改可直接编辑/etc/resolv.conf文件,而永久修改则需通过Netplan(Ubuntu/Debian系)或NetworkManager(CentOS/RHEL系)进行配置,且需注意systemd-resolved服务对配置文件的接管行为。

Linux怎么添加DNS?Linux永久修改DNS配置的命令是什么?

临时配置DNS:快速生效方案

对于需要立即测试或进行临时故障排查的场景,直接修改系统级的DNS配置文件是最快的方法,Linux系统中通用的DNS配置文件位于/etc/resolv.conf

通过文本编辑器(如vim或nano)打开该文件:

sudo vim /etc/resolv.conf

在文件中添加或修改以下内容:

nameserver 8.8.8.8
nameserver 114.114.114.114

这里,nameserver关键字后跟的是DNS服务器的IP地址,通常建议配置至少两个DNS服务器,主DNS负责解析,备用DNS在主DNS无响应时接管。8.8.8是Google提供的公共DNS,114.114.114是国内常用的114DNS。

注意事项:在现代Linux发行版中,/etc/resolv.conf通常不是一个静态文件,而是由systemd-resolved服务或NetworkManager动态生成的符号链接,这意味着,直接修改此文件在系统重启或网络服务重启后可能会被覆盖,这种方法仅适用于临时调试,不推荐作为生产环境的长期解决方案。

永久配置DNS:Ubuntu/Debian系(Netplan)

对于使用Ubuntu 18.04及更高版本、以及Debian新版的系统,默认采用Netplan作为网络配置工具,Netplan使用YAML格式的配置文件,位于/etc/netplan/目录下。

查看该目录下的配置文件,通常名为00-installer-config.yaml或类似名称:

ls /etc/netplan/

使用编辑器打开该文件:

sudo vim /etc/netplan/00-installer-config.yaml

在对应的网卡配置下(通常是ethernetswifis部分),添加nameservers字段,配置示例如下:

network:
  ethernets:
    eth0:
      dhcp4: true
      **nameservers:
        addresses: [8.8.8.8, 1.1.1.1]**
  version: 2

关键点:YAML文件对缩进非常敏感,必须使用空格而非Tab键,且保持层级对齐,配置完成后,保存并退出,执行以下命令使配置生效:

sudo netplan apply

此命令会立即应用后台网络配置,并更新/etc/resolv.conf文件,确保DNS设置在重启后依然有效。

Linux怎么添加DNS?Linux永久修改DNS配置的命令是什么?

永久配置DNS:CentOS/RHEL系(NetworkManager)

在CentOS 7、8、RHEL 8及Fedora等系统中,NetworkManager是默认的网络管理服务,使用nmcli命令行工具是修改DNS最专业且稳定的方法。

查看当前的网络连接名称:

nmcli connection show

输出结果中,NAME列即为连接名称(如System eth0Wired connection 1)。

使用nmcli命令修改指定连接的DNS服务器:

sudo nmcli con mod "System eth0" ipv4.dns "8.8.8.8 8.8.4.4"

上述命令将主DNS设为8.8.8.8,备用DNS设为8.8.4.4。如果需要同时设置DNS搜索域(search domain),可以使用以下命令:

sudo nmcli con mod "System eth0" ipv4.dns-search "example.com localdomain"

配置完成后,必须重启网络连接以使更改生效:

sudo nmcli con up "System eth0"

专业建议:在某些情况下,如果/etc/resolv.conf被systemd-resolved接管,建议手动设置DNS模式为manual,防止DHCP获取的DNS覆盖手动配置:

sudo nmcli con mod "System eth0" ipv4.ignore-auto-dns yes

进阶处理:Systemd-resolved与DNS缓存

现代Linux系统广泛使用systemd-resolved服务来处理DNS解析和缓存,这经常导致用户发现/etc/resolv.conf文件指向了0.0.53(本地存根),而非直接指向DNS服务器IP。

独立见解与解决方案
如果你希望完全绕过systemd-resolved的存根功能,直接让系统读取你的DNS配置,可以采取以下“硬核”方案,禁用并停止systemd-resolved服务:

sudo systemctl disable --now systemd-resolved

删除原有的符号链接/etc/resolv.conf,并创建一个新的静态文件:

sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo bash -c 'echo "nameserver 114.114.114.114" >> /etc/resolv.conf'

为了防止NetworkManager自动覆盖该文件,需修改NetworkManager配置文件/etc/NetworkManager/NetworkManager.conf,在[main]部分添加:

Linux怎么添加DNS?Linux永久修改DNS配置的命令是什么?

dns=none

最后重启NetworkManager:

sudo systemctl restart NetworkManager

这种方法虽然牺牲了DNS缓存带来的微小性能提升,但极大地提高了网络排查的透明度,确保系统严格按照你指定的DNS服务器进行解析,非常适合对网络行为有严格要求的运维场景。

验证DNS配置

无论采用哪种方法,配置完成后都必须进行验证,最常用的工具是nslookupdigping

使用nslookup解析域名:

nslookup www.baidu.com

输出结果中会显示Server: 8.8.8.8(即实际响应解析请求的DNS服务器地址)以及解析出的IP地址,如果能够正确返回IP,说明DNS配置成功且网络通畅。

使用dig命令可以获取更详细的解析信息:

dig www.google.com @8.8.8.8

该命令强制指定使用8.8.8.8进行查询,用于测试特定DNS服务器的连通性。

相关问答

Q1:为什么我修改了/etc/resolv.conf文件,重启后DNS设置又变回去了?
A: 这是因为您的Linux系统使用了NetworkManager或systemd-resolved服务来动态管理网络,这些服务会在网络启动或重启时,根据DHCP服务器的下发的信息或内部配置文件自动覆盖/etc/resolv.conf,要永久生效,必须按照上文提到的Netplan或nmcli方法修改网络连接配置,或者禁用自动管理功能。

Q2:在Linux中配置多个DNS服务器时,它们的查询顺序是怎样的?
A: Linux系统默认按照/etc/resolv.confnameserver出现的顺序从上到下进行查询,系统会先向第一个DNS服务器发送请求,如果在超时时间内未收到响应,则会尝试向第二个DNS服务器发送请求,建议将响应速度最快、最稳定的DNS服务器放在第一位。
能帮助您在Linux系统中精准、高效地完成DNS配置,如果您在实操过程中遇到特定发行版的报错,欢迎在评论区分享具体的错误日志,我们将共同探讨解决方案。

赞(0)
未经允许不得转载:好主机测评网 » Linux怎么添加DNS?Linux永久修改DNS配置的命令是什么?