在Linux系统中,DNS(域名系统)配置用于将域名解析为IP地址,正确配置DNS对于网络访问至关重要,本文将详细介绍Linux系统中修改DNS配置的多种方法,涵盖不同发行版和场景,并说明注意事项及验证方式。
直接编辑/etc/resolv.conf文件
/etc/resolv.conf
是Linux系统中传统的DNS配置文件,记录了系统使用的DNS服务器地址。此方法适用于临时修改或未使用网络管理工具的系统,但部分现代发行版(如Ubuntu 18.04+)可能被NetworkManager或systemd-resolved覆盖,重启后失效。
操作步骤:
- 使用文本编辑器(如vi、nano)打开文件,需root权限:
sudo vi /etc/resolv.conf
- 添加或修改
nameserver
行,指定DNS服务器(如公共DNS:Google DNS8.8.8
、Cloudflare DNS1.1.1
):nameserver 8.8.8.8 nameserver 1.1.1.1
- 保存文件(vi中按
wq
退出),无需重启服务,立即生效。
注意事项:
- 若文件被系统自动管理(如Ubuntu默认由systemd-resolved管理),直接编辑可能被覆盖,需通过其他方法永久修改。
- 可添加
search
和domain
行配置本地域名后缀(如search example.com
),但非必需。
通过NetworkManager管理(适用于Ubuntu/Debian/CentOS/RHEL等)
NetworkManager是主流Linux发行版默认的网络管理工具,可通过命令行或配置文件永久修改DNS。
方法1:使用nmcli命令(推荐)
nmcli
是NetworkManager的命令行工具,操作简洁且支持动态更新。
- 查看当前网络连接名称:
nmcli connection show
输出类似
Wired connection 1
、eno1
等,记下目标连接名(如默认连接为Wired connection 1
)。 - 修改DNS配置(支持多个DNS,用空格分隔):
sudo nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8 1.1.1.1"
- 重启连接使配置生效:
sudo nmcli connection up "Wired connection 1"
方法2:修改NetworkManager配置文件
- 编辑
/etc/NetworkManager/NetworkManager.conf
,确保[main]
段包含dns=none
(避免自动覆盖DNS):sudo vi /etc/NetworkManager/NetworkManager.conf
添加或修改:
[main] dns=none
- 编辑连接配置文件(路径通常为
/etc/NetworkManager/system-connections/连接名.nmconnection
),添加DNS配置:sudo vi /etc/NetworkManager/system-connections/Wired connection 1.nmconnection
在
[ipv4]
或[ipv6]
段添加:dns=8.8.8.8;1.1.1.1;
- 重启NetworkManager服务:
sudo systemctl restart NetworkManager
注意事项:
- 修改前确保NetworkManager服务运行(
systemctl status NetworkManager
)。 - 若使用DHCP获取IP,需在连接配置中禁用
dhcp-dns
选项(ipv4.ignore-auto-dns yes
)。
通过systemd-resolved管理(Ubuntu 18.04+/CentOS 8+默认使用)
systemd-resolved
是systemd提供的本地DNS解析服务,通过/etc/systemd/resolved.conf
配置。
操作步骤:
- 编辑
/etc/systemd/resolved.conf
:sudo vi /etc/systemd/resolved.conf
- 取消注释并修改
DNS
行,指定DNS服务器:DNS=8.8.8.8 1.1.1.1
- 取消注释
DNSStubListener=no
(若需直接使用/etc/resolv.conf
):DNSStubListener=no
- 重启
systemd-resolved
服务:sudo systemctl restart systemd-resolved
- 创建
/etc/resolv.conf
的符号链接(指向systemd生成的文件):sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
验证配置:
运行systemd-resolve --status
,查看Current DNS Server
是否为配置的DNS地址。
网络接口配置文件(传统系统,如CentOS 7-、Debian旧版)
CentOS/RHEL系统:
编辑网络接口配置文件(如/etc/sysconfig/network-scripts/ifcfg-eth0
):
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
添加或修改DNS配置:
DNS1=8.8.8.8 DNS2=1.1.1.1
重启网络服务:
sudo systemctl restart network
Debian/Ubuntu旧版:
编辑/etc/network/interfaces
文件,在接口配置中添加dns-nameservers
:
sudo vi /etc/network/interfaces
示例:
auto eth0 iface eth0 inet dhcp dns-nameservers 8.8.8.8 1.1.1.1
重启网络服务:
sudo systemctl restart networking
使用netplan配置(Ubuntu 18.04+ Server默认)
netplan
是Ubuntu Server等系统的网络配置工具,通过YAML文件管理网络和DNS。
操作步骤:
- 编辑netplan配置文件(如
/etc/netplan/01-netcfg.yaml
):sudo vi /etc/netplan/01-netcfg.yaml
- 在配置中添加
nameservers
段,指定DNS地址:network: version: 2 ethernets: eth0: dhcp4: yes nameservers: addresses: [8.8.8.8, 1.1.1.1] search: [example.com]
- 应用配置:
sudo netplan apply
DNS配置方法对比
方法 | 适用场景 | 配置方式 | 是否永久生效 | 优点 | 缺点 |
---|---|---|---|---|---|
直接编辑resolv.conf | 临时修改、无网络管理工具的系统 | 文件编辑 | 否 | 简单快速 | 易被系统服务覆盖 |
nmcli命令 | NetworkManager管理的系统 | 命令行 | 是 | 动态更新、管理方便 | 需熟悉nmcli语法 |
systemd-resolved | Ubuntu 18.04+/CentOS 8+默认 | 配置文件 | 是 | 系统级管理、支持本地缓存 | 配置稍复杂 |
网络接口配置文件 | 传统系统(CentOS 7-、Debian旧版) | 接口文件编辑 | 是 | 直接控制网络接口 | 不同发行版文件路径差异 |
netplan | Ubuntu 18.04+ Server等 | YAML配置文件 | 是 | 声明式配置、易管理 | 需了解YAML语法 |
验证DNS配置是否生效
-
使用nslookup命令:
nslookup www.baidu.com
若返回的DNS服务器为配置的地址(如
8.8.8
),则配置生效。 -
使用dig命令:
dig @8.8.8.8 www.baidu.com
查看
;; ANSWER SECTION
是否返回正确的IP地址。 -
查看resolv.conf内容:
cat /etc/resolv.conf
确认
nameserver
行为配置的DNS地址(注意:可能为符号链接,指向系统管理工具生成的文件)。
注意事项
- 备份配置文件:修改前建议备份原配置(如
sudo cp /etc/resolv.conf /etc/resolv.conf.bak
),避免配置错误导致网络问题。 - 避免配置冲突:若同时使用多种方法(如直接编辑
resolv.conf
和nmcli),可能导致配置覆盖,建议选择一种主要方式。 - DNS服务器可达性:确保配置的DNS服务器可访问(如
ping 8.8.8.8
测试网络连通性)。 - 重启服务的影响:修改网络或DNS配置后,重启相关服务(如NetworkManager、network)可能影响当前网络连接,建议在非高峰期操作。
相关问答FAQs
问题1:为什么我修改了/etc/resolv.conf中的DNS,重启后还是恢复了?
解答:现代Linux系统(如Ubuntu 18.04+、CentOS 8+)通常使用NetworkManager或systemd-resolved管理DNS配置,直接编辑/etc/resolv.conf
会被这些服务自动覆盖,需通过对应的管理工具(如nmcli、编辑systemd-resolved.conf
或netplan配置)进行永久修改,在Ubuntu系统中,可通过nmcli connection modify "连接名" ipv4.dns "DNS地址"
设置,并重启连接使配置持久生效。
问题2:如何确认Linux系统当前使用的DNS服务器配置是否生效?
解答:可通过以下三种方式确认:(1)使用nslookup
或dig
命令测试域名解析,如nslookup www.example.com
,查看返回的DNS服务器是否为配置的地址;(2)直接查看/etc/resolv.conf
(注意可能为符号链接,指向系统生成的文件,如/run/systemd/resolve/stub-resolv.conf
);(3)若使用systemd-resolved,运行systemd-resolve --status
,查看Current DNS Server
字段是否显示配置的DNS地址,同时可检查DNS缓存状态。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/34516.html