hosts文件优先于DNS解析,是本地静态映射,路径为Windows的C:\Windows\System32\drivers\etc\hosts或Linux/macOS的/etc/hosts,修改后立即生效,用于开发测试、内网访问或广告屏蔽。

服务器基础网络配置中,DNS 解析和 hosts 文件修改是两个独立但常被混淆的功能。hosts 文件用于本地静态映射,不依赖任何服务器;DNS 配置则决定系统向哪个远程服务发起域名查询。二者共存时,系统始终优先查 hosts,再走 DNS。
一、直接修改 hosts 实现本地解析
这是最轻量、最即时的域名映射方式,适合开发测试、内网访问或屏蔽广告等场景。
-
Linux / macOS 路径:/etc/hosts,需用
sudo权限编辑,例如:sudo nano /etc/hosts - Windows 路径:C:\Windows\System32\drivers\etc\hosts,必须以管理员身份运行记事本或 VS Code 打开
-
格式要求:每行一条,IP 地址与域名之间用空格或 Tab 分隔,如:
127.0.0.1 dev.api.local192.168.5.20 app.internal -
生效验证:保存后立即生效,无需重启服务,可用
ping dev.api.local或nslookup dev.api.local查看返回 IP 是否匹配
二、为服务器配置 DNS 服务器地址
DNS 配置影响所有未被 hosts 拦截的域名查询行为,常见于生产环境或需要统一解析策略的场景。
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
-
临时生效(推荐测试用):直接编辑
/etc/resolv.conf,添加:nameserver 114.114.114.114nameserver 8.8.8.8
注意:某些发行版(如 systemd-resolved 管理的系统)会覆盖该文件,修改后可能被重置 -
持久生效(推荐生产用):
• CentOS/RHEL:在网卡配置文件(如/etc/sysconfig/network-scripts/ifcfg-eth0)中添加:DNS1=114.114.114.114DNS2=1.1.1.1
然后执行systemctl restart NetworkManager或service network restart
• Ubuntu/Debian:修改/etc/netplan/*.yaml,在nameservers下指定地址,再运行sudo netplan apply
三、理解解析优先级与典型误用
系统名称解析有明确顺序,错误假设会导致配置“看似没生效”。
- 优先级固定为:hosts 文件 > 本地 DNS 配置(如 resolv.conf)> 全局 DNS 服务(如 systemd-resolved)
- 常见误区:试图通过改 DNS 服务器来让 hosts 生效——其实 hosts 完全不经过 DNS;或以为改了 DNS 就能覆盖 hosts 中的条目——实际恰恰相反
- 安全提醒:hosts 文件无加密、无校验,恶意篡改可劫持流量;生产环境大量映射建议改用轻量 DNS 服务(如 dnsmasq 或 CoreDNS),便于集中管理与审计
四、何时该选 hosts,何时该配 DNS?
根据目标决定工具,避免过度设计。
- 用 hosts 的情况:单台服务器绑定几个固定测试域名、屏蔽特定域名、快速验证某服务是否可达
- 配 DNS 的情况:全网统一解析策略、需要支持泛解析或 SRV 记录、要兼容内部域名(如 *.corp.example.com)、需对接 Active Directory 或云厂商私有 DNS
- 两者协同用法:hosts 处理关键短链(如 k8s API server 地址),DNS 处理其余公网及内部通用域名,兼顾速度与灵活性

















