Linux中配置本地解析劫持用于测试应用,本质是让特定域名强制解析到指定IP,不走真实DNS查询;常用方法包括修改/etc/hosts文件(最简单直接)、临时覆盖/etc/resolv.conf、或用dnsmasq搭建轻量劫持DNS以支持泛域名和响应控制。

Linux 中配置本地解析劫持用于测试应用,本质是让特定域名强制解析到你指定的 IP(比如本地开发服务、测试环境或 mock 服务器),不走真实 DNS 查询。这属于“可控的解析覆盖”,常见于前后端联调、灰度测试、安全渗透测试或离线环境模拟。
修改 /etc/hosts 文件(最简单直接)
这是最常用、零依赖、立即生效的方式,适用于单机测试场景。
- 用 root 权限编辑:
sudo nano /etc/hosts - 在末尾添加行,格式为:
IP地址 域名 [别名...] - 例如让生产域名指向本机 Nginx:
127.0.0.1 api.example.com - 再比如模拟内网服务:
192.168.50.10 auth-service.internal - 保存后无需重启服务,大多数程序(curl、浏览器、Python requests)会优先读取 hosts
临时覆盖 resolv.conf(仅影响 DNS 查询路径)
若测试应用明确走系统 DNS 解析(如某些 Java 应用、容器内进程),且你希望它查某个自建 DNS 或拦截代理,可临时改写 /etc/resolv.conf:
- 注释或删除原有 nameserver 行
- 添加:
nameserver 127.0.0.1(假设你已在本机运行 dnsmasq 或 CoreDNS 并配置了劫持规则) - 为防 NetworkManager 或 systemd-resolved 自动覆盖,建议先锁定文件:
sudo chattr +i /etc/resolv.conf(测试完记得chattr -i)
用 dnsmasq 搭建轻量劫持 DNS(适合多域名/通配符/响应控制)
当需要更灵活策略(如泛域名 *.dev → 127.0.0.1,或返回 NXDOMAIN 测试容错),推荐 dnsmasq:
- 安装:
sudo apt install dnsmasq(Debian/Ubuntu)或sudo yum install dnsmasq(RHEL/CentOS) - 编辑配置:
sudo nano /etc/dnsmasq.conf - 添加劫持规则:
address=/example.com/127.0.0.1(精确匹配)或address=/.dev/127.0.0.1(匹配所有 .dev 域) - 确保启用监听:
listen-address=127.0.0.1,并关闭上游转发(可选):no-resolv - 启动:
sudo systemctl restart dnsmasq - 再把
/etc/resolv.conf的 nameserver 改为127.0.0.1即可生效
验证是否生效
不要只信浏览器——用命令行确认底层解析行为:
-
ping -c 1 api.example.com看是否发向目标 IP -
getent hosts api.example.com(绕过缓存,直查解析器) -
nslookup api.example.com 127.0.0.1(查 dnsmasq 是否响应) -
dig @127.0.0.1 api.example.com(查看原始 DNS 响应)











