Linux环境下域名解析怎么配置?核心答案就是:通过修改/etc/resolv.conf指定DNS服务器,配合/etc/hosts本地映射表,必要时用nscd或systemd-resolved管理缓存,即可完成绝大多数场景的本地DNS解析配置。很多新手配置域名解析时,第一反应是去改网卡配置,结果重启网络服务后配置丢失,或者出现解析时好时坏的情况,这篇文章直接带你走一遍完整的本地DNS解析步骤,从配置文件原理到排查命令,全部是可验证的实操内容。
Linux环境下域名解析怎么配置:先搞懂系统读取顺序
Linux系统解析域名时,遵循一个固定的优先级逻辑,理解这个顺序,你就知道配置该往哪里写,行业共识认为,几乎所有主流发行版(如CentOS、Ubuntu、Debian)都遵循以下顺序:
/etc/hosts本地映射表,最优先读取- DNS缓存(如
nscd、systemd-resolved),如果命中直接返回 /etc/resolv.conf中配置的DNS服务器,最后兜底
举个例子,当你在浏览器访问example.com时,系统先看一眼/etc/hosts里有没有这个域名的手工映射,没有就去查缓存,缓存也没有才向外部DNS服务器发请求,这个机制决定了,如果你想让某个域名在本地强制指向特定IP,写进/etc/hosts绝对是最快的方案,这也是本地DNS解析步骤里最常用的一招。
第一步:修改/etc/resolv.conf配置上游DNS服务器
这是最直接的配置入口。/etc/resolv.conf文件里至少需要两个关键参数:nameserver和search。nameserver指定DNS服务器的IP地址,可以写多个,系统会按顺序尝试使用。search用于当你输入不完整域名时,自动补全后缀。
打开文件看看你当前的配置:
cat /etc/resolv.conf
正常情况下会有类似这样几行:
nameserver 114.114.114.114 nameserver 8.8.8.8 search example.com
修改方式直接用文本编辑器编辑,比如用vi或nano,添加或修改nameserver行后,保存退出即可立即生效,不需要重启任何服务,这里有个坑得提醒你:某些发行版(特别是带桌面环境的Ubuntu)默认开着
systemd-resolved服务,它会接管/etc/resolv.conf,你的手动修改可能会被覆盖,这种情况下,你需要先停掉这个服务:
sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved
然后把/etc/resolv.conf里的nameserver 127.0.0.53改成实际可用的公共DNS,比如114.114.114或5.5.5。
第二步:配置/etc/hosts实现本地域名强制映射
这是本地DNS解析步骤中的核心操作,当你在内网环境测试、想屏蔽某些域名广告、或者让特定域名指向本地开发服务器时,改/etc/hosts是零成本方案。
格式非常简单:
IP地址 域名【可选别名】
0.0.1 myapp.local 192.168.1.100 gitlab.example.com
修改后立即生效,不需要任何刷新操作,这里有一个关键细节:如果你写入的IP是局域网地址,确保你的网卡和对应服务在同一网段,否则解析指向这个IP时会连接超时,很多开发者在本地调试接口时,把生产域名临时映射到0.0.1,用完之后记得删掉,否则这个域名会一直指向本机,造成线上无法访问的假象。
第三步:针对网卡级别的永久DNS配置
前面说的/etc/resolv.conf修改是一次性的,如果重启网络服务或者重启机器,某些版本的系统会用DHCP分配的DNS覆盖掉它,如果你想持久化配置,就得去改网卡配置文件,这一步是Linux环境下域名解析怎么配置的进阶操作,不同发行版路径不一样:
-
CentOS/RHEL 7+:编辑
/etc/sysconfig/network-scripts/ifcfg-eth0(或对应网卡名),添加下面两行:DNS1=114.114.114.114 DNS2=8.8.8.8
改完后执行
systemctl restart network生效。 -
Ubuntu 18.04+(使用netplan):编辑
/etc/netplan/.yaml文件,在对应网卡段落下增加:nameservers: addresses: - 114.114.114.114 - 8.8.8.8保存后执行
sudo netplan apply。
如果你对现有DNS延迟不满意,想测试百度和阿里这些公共DNS哪个在本地响应更快,可以直接修改
/etc/resolv.conf里的nameserver,然后使用dig命令查看查询耗时,对比后再决定永久写在哪个配置文件里,这个方法能避免配置完后才发现网络卡顿。
本地DNS解析步骤详解:从缓存到生效的完整链路
配置写完后,你需要知道系统如何加载这些配置,才能判断是否需要清缓存。
nscd缓存服务的影响
nscd(Name Service Cache Daemon)是Linux下常用的域名缓存服务,如果系统里启用了nscd,你修改/etc/hosts或/etc/resolv.conf后,虽然理论上应该立即生效,但nscd可能缓存了旧的解析结果,导致你测试时域名还是指向老IP,此时需要清理nscd缓存:
sudo systemctl restart nscd
或者只清空hosts缓存:
sudo nscd -i hosts
绝大多数配置了nscd的服务器,在修改解析配置后都需要这一步,否则会遇到“文件全对,但解析结果就是不对”的尴尬情况。
使用systemd-resolved的现代方案
如果你用的是Ubuntu 22.04这类带systemd-resolved的系统,管理方式稍微不同,它不直接读取/etc/resolv.conf,而是通过内部的缓存和策略路由工作,查看当前解析状态:
sudo systemd-resolve --status
修改DNS解析时,除了前面说的禁用systemd-resolved,还有一种更温和的方式:直接编辑/etc/systemd/resolved.conf,在[Resolve]段落下写:
DNS=114.114.114.114 223.5.5.5 FallbackDNS=8.8.4.4
保存后输入sudo systemctl restart systemd-resolved,该方案能保留系统原有的DNS解析管理能力,执行上述命令后解析配置会正常加载。
验证本地DNS解析是否配置成功
配置步骤走完,怎么判断是否生效?推荐用以下命令逐层验证:
cat /etc/resolv.conf:确认当前生效的DNS服务器内容正确,查看当前系统使用的nameserver是否是你预期的地址。nslookup example.com:解析指定域名,输出结果里能看到查到了哪个IP,同时显示使用的是哪个DNS服务器(Server那一行),你可以通过它判断请求确实发送到了你配置的服务器。dig example.com:更详细的查询工具,能显示完整的解析过程、耗时、DNS服务器IP,返回的SERVER:字段就是实际使用的服务器。
测试优先级时,在/etc/hosts里加一条0.0.1 test.com,然后ping test.com,如果回显的是0.0.1说明hosts优先逻辑正常,本地解析生效,多数情况下,只要这几个命令的输出与你预期一致,就基本确认配置没有问题了。
排查解析不生效的常见问题
配置写完了,但实际使用过程中还需要确认缓存是否干扰了正常解析,当你发现域名解析结果不对时,先别急着改文件,按顺序检查以下三个因素:
- 缓存是否过期?重启
nscd或systemd-resolved后重试 - 配置是否被覆盖?检查网卡DHCP配置和
resolv.conf是否被服务修改 - 优先级是否冲突?看
/etc/hosts里有没有残留的旧映射
常见问题解答
Linux域名解析配置常见问题解答
Q:修改/etc/resolv.conf后,重启系统配置会丢失,这正常吗?
A:这很常见,尤其在DHCP环境下,系统启动时,DHCP客户端会用服务器下发的DNS覆盖resolv.conf,要做到永久生效,查阅man resolv.conf了解发行版对应的持久化配置方式,一般是改网卡配置文件或使用nmcli命令,你可以同时保留DHCP获取的IP,但覆盖它的DNS设置,具体操作取决于你是否使用NetworkManager服务管理网络。
Q:/etc/hosts和DNS服务器同时配置了一个域名,生效的是哪个?
A:/etc/hosts里的优先,因为系统查询顺序是先看本机映射表,再走网络请求,如果你修改了/etc/hosts但没有生效,大概率是缓存未清理,用nscd -i hosts刷新即可,这一行为适用于多数Linux发行版。
配置Linux下的域名解析,核心就是掌握/etc/hosts、/etc/resolv.conf和缓存服务的关系,理解查询顺序比死记命令更管用,配合本文中的dig和nslookup验证方法,你就能在本地部署、内网测试和日常网络异常时快速定位问题根源。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/624019.html





