在Linux系统中,DNS(域名系统)配置的正确性直接影响网络访问能力,通过命令行设置DNS是系统管理和运维中的基础技能,Linux系统设置DNS的方式因发行版和网络管理工具的不同而有所差异,本文将详细介绍常见配置方法,包括临时修改、永久配置及不同发行版的适配方案,并附上验证方法和注意事项。
直接编辑/etc/resolv.conf文件(临时/永久配置)
/etc/resolv.conf
是Linux系统中存放DNS配置的核心文件,记录了系统使用的DNS服务器地址,直接编辑此文件是最简单的方式,但需注意部分系统下该文件可能被网络管理工具(如NetworkManager、systemd-resolved)动态覆盖,导致修改不持久。
查看当前DNS配置
使用cat
或less
命令查看文件内容:
cat /etc/resolv.conf
输出示例:
# Generated by NetworkManager
nameserver 192.168.1.1
nameserver 8.8.8.8
其中nameserver
行指定了DNS服务器地址,可配置多个(按优先级从上到下生效)。
修改DNS配置
使用文本编辑器(如vi
、nano
)打开文件:
sudo vi /etc/resolv.conf
在文件中添加或修改nameserver
行,例如配置公共DNS(如Google DNS:8.8.8
、Cloudflare DNS:1.1.1
)或内网DNS:
nameserver 8.8.8.8
nameserver 1.1.1.1
nameserver 192.168.1.1 # 内网DNS,优先级低于前两者
保存退出(vi
中按Esc
后输入wq
)。
永久生效的注意事项
- NetworkManager管理(Ubuntu桌面版/CentOS 7+):直接编辑
/etc/resolv.conf
会被NetworkManager覆盖,需通过nmcli
工具修改(见下文)。 - systemd-resolved管理(Ubuntu 18.04+ Server):该工具会维护
/etc/resolv.conf
,建议通过修改resolved.conf
配置或创建.network
文件(见后文)。 - 传统系统(如CentOS 6):直接编辑
/etc/resolv.conf
可永久生效,但需确保网络服务未使用动态管理工具。
使用NetworkManager的nmcli命令(Ubuntu/CentOS推荐)
NetworkManager是现代Linux发行版(如Ubuntu、CentOS 7+)默认的网络管理工具,通过nmcli
命令可安全、永久地修改DNS配置,避免直接编辑文件被覆盖的问题。
查看当前网络连接
nmcli connection show
输出示例:
NAME UUID TYPE DEVICE
ens33 12345678-1234-1234-1234-123456789012 ethernet ens33
记录当前活动的连接名称(如ens33
)。
修改DNS配置
为指定连接添加DNS服务器,例如添加8.8.8
和1.1.1
:
sudo nmcli connection modify "ens33" ipv4.dns "8.8.8.8 1.1.1.1"
若需配置IPv6 DNS,添加ipv6.dns
参数:
sudo nmcli connection modify "ens33" ipv6.dns "2001:4860:4860::8888"
重启网络连接使配置生效
sudo nmcli connection down "ens33" && sudo nmcli connection up "ens33"
验证配置
检查/etc/resolv.conf
是否更新,或使用nmcli
查看DNS设置:
nmcli connection show "ens33" | grep dns
使用systemd-networkd配置文件(Ubuntu Server适用)
对于使用systemd-networkd
作为网络管理工具的系统(如Ubuntu Server 18.04+),可通过创建或修改.network
文件实现DNS永久配置。
创建网络配置文件
以网卡ens33
为例,在/etc/systemd/network/
目录下创建配置文件(如ens33.network
):
sudo vi /etc/systemd/network/ens33.network
配置DNS和网卡信息
在文件中添加以下内容:
[Match]
Name=ens33
[Network]
DNS=8.8.8.8 1.1.1.1
Domains=example.com
DHCP=no
Address=192.168.1.100/24
Gateway=192.168.1.1
重启网络服务
sudo systemctl restart systemd-networkd
验证配置
检查/etc/resolv.conf
是否包含配置的DNS服务器,或使用resolvectl status
命令:
resolvctl status
传统ifcfg文件配置(CentOS/RHEL 6/7)
在较老的CentOS/RHEL系统中(如6、7版本),网络配置通过ifcfg
文件管理,需在网卡配置文件中添加DNS相关参数。
编辑网卡配置文件
以网卡eth0
为例,编辑/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
DOMAIN=example.com
重启网络服务
sudo systemctl restart network
验证配置
检查/etc/resolv.conf
是否更新,或使用nmcli
(若系统已安装NetworkManager)查看DNS设置。
不同发行版DNS配置方式对比
发行版/系统 | 推荐配置方式 | 配置文件/命令 | 重启服务 | 持久性说明 |
---|---|---|---|---|
Ubuntu桌面版 | nmcli命令 | nmcli connection modify |
nmcli connection up/down |
永久生效,不会被NetworkManager覆盖 |
CentOS 7+/RHEL 7+ | nmcli命令 | nmcli connection modify |
nmcli connection up/down |
永久生效 |
Ubuntu Server 18.04+ | systemd-networkd配置文件 | /etc/systemd/network/*.network |
systemctl restart systemd-networkd |
永久生效 |
CentOS 6/RHEL 6 | ifcfg文件 | /etc/sysconfig/network-scripts/ifcfg-* |
service network restart |
永久生效 |
验证DNS配置是否生效
配置完成后,可通过以下命令验证DNS解析是否正常:
- 使用nslookup命令:
nslookup www.baidu.com
若返回正确的IP地址(如
181.38.148
),则DNS配置生效。 - 使用dig命令:
dig www.baidu.com
查看
ANSWER SECTION
中的IP地址是否正确。 - 检查resolv.conf文件:
cat /etc/resolv.conf
确认
nameserver
行包含配置的DNS服务器。
注意事项
- 多DNS服务器优先级:
/etc/resolv.conf
或网络配置文件中,nameserver
按从上到下的顺序使用,若第一个DNS不可用,会自动尝试下一个。 - 避免直接修改关键文件:在NetworkManager或systemd-resolved管理的系统中,直接修改
/etc/resolv.conf
可能被覆盖,建议使用对应工具的命令或配置文件。 - 内网DNS与公共DNS结合:企业环境中通常建议同时配置内网DNS(如
168.1.1
)和公共DNS(如8.8.8
),确保内网服务解析优先,同时提供外部域名解析兜底。
相关问答FAQs
Q1:修改DNS后不生效,如何排查?
A:可按以下步骤排查:
- 检查
/etc/resolv.conf
是否包含配置的DNS服务器,若内容被清空或还原,说明被网络管理工具覆盖,需改用对应工具的配置方式(如nmcli
或systemd-networkd
)。 - 使用
systemctl status network
(或NetworkManager
、systemd-networkd
)检查网络服务状态,确保服务正常运行。 - 使用
nslookup
或dig
命令测试DNS解析,若仍失败,可能是防火墙(如iptables
、firewalld
)阻止了DNS查询端口(53),需放行相关规则。 - 检查网卡配置是否正确(如IP地址、网关),确保网络连通性。
Q2:如何设置多个DNS服务器并指定优先级?
A:在Linux中,DNS服务器的优先级由配置文件中的顺序决定,越靠前的优先级越高,不同配置方式下设置方法如下:
- 直接编辑/etc/resolv.conf:按优先级从上到下添加
nameserver
行,nameserver 192.168.1.1 # 内网DNS,优先级最高 nameserver 8.8.8.8 # 公共DNS,次优先 nameserver 1.1.1.1 # 备用DNS
- 使用nmcli命令:通过空格分隔多个DNS地址,系统会按顺序使用:
sudo nmcli connection modify "ens33" ipv4.dns "192.168.1.1 8.8.8.8 1.1.1.1"
- systemd-networkd配置文件:在
DNS
参数中按空格分隔多个地址:DNS=192.168.1.1 8.8.8.8 1.1.1.1
配置完成后重启网络服务,系统会按顺序依次尝试DNS服务器,确保解析的高可用性。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/32603.html