hosts 文件怎么改:刷新 DNS、和 DoH 冲突时怎么查
临时把某个域名指到测试机、或挡住一个广告域名时,人们会改 hosts。Windows 上文件在 C:\Windows\System32\drivers\etc\hosts,macOS 与多数 Linux 在 /etc/hosts。保存后用浏览器打开,地址栏仍进原来的网站,甚至提示无法访问一个你并没有写进去的 IP。
hosts 只影响「这一台电脑、走系统解析、并且没有被加密 DNS 绕开」的程序。浏览器若打开了安全 DNS,会直接向服务商查询,根本不读你改的那一行。下面先说明它和线路的关系,再按系统写入、刷新缓存、核对是否被 DoH 绕过。不要用 hosts 假装自己换了地区,地区类网站认的是出口 IP,不是这一行文本。
hosts、系统 DNS 和加密 DNS 各管一层
三层同时存在时,优先级常常是:浏览器安全 DNS 最优先,其次才是 hosts,最后才是系统 DNS。所以「文件里写对了」不够。
| 对比项 | hosts | 系统 DNS | 浏览器安全 DNS |
|---|---|---|---|
| 改什么 | 单个域名对一个 IP | 把域名交给解析器 | 浏览器自己做 DoH 或 DoT |
| 典型路径 | etc\hosts 或 /etc/hosts | 网卡里的 DNS 服务器 | 浏览器设置中的安全 DNS |
| 生效范围 | 本机多数传统程序 | 未写进 hosts 的名字 | 常常只影响该浏览器 |
| 失效表现 | 仍打开旧站 | 全机解析都错 | 只有浏览器不听 hosts |
| 刷新 | 改完还要清缓存 | 换 DNS 后要清缓存 | 关闭安全 DNS 再试 |
| 和线路 | 不改变出口 IP | 可能被隧道内 DNS 取代 | 可能绕过隧道里的 DNS |
写对一行并让它生效:分步操作
- 第一步:先想清楚这台机器要不要同时用线路。若你正在用刺猬VPN,安装后用自定义用户名和密码注册即可,不需要邮箱和手机号。智能分流或全局连接会改变 DNS 走哪一侧。改 hosts 之前先记下当前是连接还是断开,避免把「线路里的解析」和「本机 hosts」混成一次实验。免费节点永久免费、不限流量、不限速。
- 第二步:用管理员权限打开文件。Windows 在开始菜单搜记事本,右键以管理员身份运行,再打开 C:\Windows\System32\drivers\etc\hosts。直接双击经常没有写入权限,保存时不报错或另存到别处。macOS 与 Linux 用具备管理员权限的编辑器打开 /etc/hosts。
- 第三步:在文件末尾新起一行,先写 IP,空一格,再写域名,不要加协议和路径。正确例子是一行里只有地址和主机名。以 # 开头的是注释。不要删掉文件里原有的 localhost 行。
- 第四步:保存后刷新缓存。Windows 用管理员命令提示符执行 ipconfig /flushdns。macOS 执行 sudo dscacheutil -flushcache,再执行 sudo killall -HUP mDNSResponder。Linux 视发行版重启本机缓存服务,或确认没有 nscd 仍握着旧答案。
- 第五步:用系统自带解析看结果,而不是先看浏览器。Windows 执行 nslookup 时要注意:nslookup 往往不读 hosts,它直接问 DNS 服务器,所以不能用它证明 hosts 生效。改用 ping 主机名,看回显的 IP 是否变成你写的那个。macOS 可用 dscacheutil -q host -a name 加域名。
- 第六步:浏览器仍进旧站时,打开该浏览器的安全 DNS 或「使用安全 DNS」开关。Chrome 在设置、隐私与安全、安全里。Edge 有同类开关。Firefox 在网络设置里的「基于 HTTPS 的 DNS」。先关掉再访问同一主机名。
- 第七步:若只想让命令行工具听 hosts、浏览器继续用加密 DNS,就保持浏览器开关开着,并用 ping 验证文件。不要以为全系统已经统一。
- 第八步:实验结束把你加的那一行删掉或注释,再次刷新 DNS。留着过期 IP 会让以后恢复正常的网站一直进错机器。
改了却不生效时按现象查
- 保存按钮是灰的:没有管理员权限。Windows 必须用管理员记事本。不要把副本存在桌面还以为系统会读。
- ping 已经是新 IP,浏览器仍是旧页面:浏览器安全 DNS,或页面被缓存。关掉安全 DNS,再用无痕窗口。
- ping 仍是旧 IP:缓存没清,或你编辑的不是正在使用的那份 hosts。确认路径,再执行对应的刷新命令。
- 只有某一个浏览器不对:那个浏览器单独开了 DoH。其他浏览器正常就不要重装系统。
- 连接线路之后 hosts 像是消失:隧道里的 DNS 策略盖过了预期,或分流把这个域名送去了别的解析。断开线路再 ping 一次做对照。
- 写成了 https 开头或带了斜杠:这一行非法,系统会忽略。只保留 IP 和主机名。
- 公司电脑改完立刻被还原:管理软件会覆盖 hosts。个人实验换一台没有策略的机器,不要和组策略对着干。
什么时候该改 hosts,什么时候不该
打不开某个海外站点时,先用线路而不是在 hosts 里猜一个 IP。IP 会变,写死之后证书也会对不上主机名。刺猬VPN可按域名做智能分流。实际可用性取决于当前网络环境。
| 对比项 | 改 hosts | 换 DNS | 使用线路 |
|---|---|---|---|
| 目标 | 把一个名字固定到一个 IP | 更换解析服务 | 改变出口与可达性 |
| 能否换地区 | 不能 | 不能单独换网站认定的地区 | 由节点出口决定 |
| 浏览器 DoH | 可能被绕过 | 也可能被绕过 | 视客户端 DNS 设置 |
| 影响面 | 通常只这一台 | 这一台或整个局域网 | 这一台已连接的设备 |
| 撤销 | 删行并刷新缓存 | 改回原来的 DNS | 断开连接 |
| 适合 | 开发时的临时域名 | 排查解析服务 | 打不开的站点本身 |
三条刷新命令对照
Windows 刷新是 ipconfig /flushdns,必须在管理员命令提示符里执行。只关浏览器不会清系统缓存。若提示找不到命令,确认你开的是命令提示符或 PowerShell,而不是在 hosts 文件里写了这句命令。
macOS 需要两条:sudo dscacheutil -flushcache,以及 sudo killall -HUP mDNSResponder。只做前一条,部分系统仍把旧答案留在 mDNS 响应进程里。Linux 若使用 systemd-resolved,改 hosts 后通常立即能读到文件,但已缓存的回答仍可能留在浏览器。三种系统都要用 ping 主机名来验收,不要用 nslookup 验收 hosts。
和 DNS 泄漏、加密 DNS 的分工
想知道查询到底发给了谁,先看 DNS 泄漏是怎么发生的。加密 DNS 为什么会让 hosts 失效、以及 DoH 与 DoT 的差别,见 DoH 与 DoT 加密 DNS。
hosts 适合开发机上的单点覆盖。它不负责隐藏查询,也不负责把网站的地区判断改掉。两件事不要写在同一行实验里同时改,否则无法知道是文件生效了还是线路生效了。
常见报错速查表
| 现象 | 原因 | 解决办法 |
|---|---|---|
| 无法保存 hosts | 没有管理员权限 | 用管理员记事本或 sudo 编辑 |
| ping 仍是旧 IP | 缓存未清或改错文件 | 按系统执行刷新命令并核对路径 |
| 只有浏览器是旧的 | 开启了安全 DNS | 关闭该浏览器的安全 DNS |
| nslookup 和 ping 不一致 | nslookup 不读 hosts | 以 ping 的回显 IP 为准 |
| 行内写了 https | 语法非法被忽略 | 只留 IP 和主机名 |
| 连上线路后规则消失 | 隧道 DNS 或分流覆盖 | 断开线路对照一次 |
| 证书名称不匹配 | IP 对了但证书主机名不对 | 不要用 hosts 冒充别的站点 |
多系统和浏览器各自还会藏一层缓存
Windows 除了系统 DNS 缓存,还有每个浏览器自己的主机缓存。ipconfig /flushdns 之后,Chrome 仍可能在内部保留解析结果。地址栏输入 chrome://net-internals/#dns 可以清浏览器这一层,Edge 有对应的内部页。没清这一层时,ping 已经是新 IP,只有这个浏览器还进旧站。Firefox 更常受「基于 HTTPS 的 DNS」影响,内部页不是第一排查对象,先关该开关。
一行里如果用了全角空格或中文逗号,系统会把整行当成非法而忽略,文件看起来保存成功,ping 却毫无变化。IP 和主机名之间只用半角空格。需要写注释时,另起一行以 # 开头,不要把说明写在同一行的中文里还指望被执行。IPv6 地址和 IPv4 地址可以各写一行指向同一主机名,只写其中一种时,系统可能仍用另一种去连,表现为偶发进错站点。
虚拟机和容器有自己的 hosts,改宿主机不会影响里面的构建。Maven 或浏览器跑在 WSL 里时,要改的是那个 Linux 环境的 /etc/hosts,不是 C:\Windows\System32\drivers\etc\hosts。两条一起改完,分别在对应环境里 ping。公司下发的安全软件会在你保存后数秒内把文件还原,对照修改时间,若时间被改回去,就不是刷新命令的问题。
测试用的域名尽量用你控制的主机名。把公共网站指到一个随意 IP,证书会报名称不匹配,页面打不开,你还会误判成线路故障。实验结束后注释掉测试行并再次刷新,避免明天自己忘记这台电脑为什么打不开那个站。
家人共用一台电脑时,把测试行写进注释并署名,避免别人把公共网站永久指到内网地址。孩子的浏览器如果开了安全解析,他会觉得只有自己打不开,大人用命令行检查却一切正常。先问清是哪一个浏览器,再决定关安全解析还是改文件。
路由器上的域名劫持和本机文件会叠加。你在电脑上改对了,手机却仍进旧站,因为手机根本不读电脑的文件。手机要测,就在手机自己的网络环境里测,不要用电脑的结果代表全家。需要整段网络一起走线路时,用客户端或路由器方案,而不是把地址抄进每一台设备的文件。改完若仍不放心,断开线路、关掉浏览器安全解析、用命令行再测一次,三步都指向同一个地址,才算这行真正生效。若三步结果不同,先关掉安全解析再测,仍不同就说明文件没有被当前这个程序读到。此时回到文件路径和权限,确认保存的是系统正在读取的那一份,而不是桌面上的副本。家里若有另一台没改过文件的电脑,用它打开同一域名做对照。两台结果不同,问题在文件。结果相同,就改为检查线路和浏览器里的安全解析,不要继续刷新缓存。
高频问答
- 问:hosts 能代替线路吗?答:不能。它只改本机名字到 IP 的对应,不改变你能不能到达那个 IP,也不改变网站看到的出口。
- 问:为什么 nslookup 永远不像 hosts?答:nslookup 直接问 DNS 服务器,设计上就不看 hosts。用 ping 验收。
- 问:Chrome 如何才听 hosts?答:关掉设置里的安全 DNS,并用无痕窗口排除页面缓存。
- 问:每一行可以写多个域名吗?答:可以,IP 在最前,后面用空格分开多个主机名。不要加逗号。
- 问:和智能分流冲突吗?答:分流决定流量走不走隧道。hosts 决定名字变成哪个 IP。两套都改时要分开测试。
- 问:改完必须重启吗?答:通常不必重启整机。刷新 DNS 并用 ping 确认即可。个别安全软件会锁文件,那时才需要退出该软件。
改完要留下能撤销的习惯
hosts 不生效时,按权限、刷新命令、浏览器安全 DNS 这三层查。Windows 记路径和 ipconfig /flushdns,macOS 记两条 sudo 命令,验收用 ping 而不是 nslookup。实验行用注释标上日期,做完就删。
刺猬VPN采用 HTTPS+AES 加密传输,匿名注册不需要邮箱和手机号。免费节点永久免费、不限流量、不限速。时长套餐有效期内不限流量、不限速。客户端支持断线保护,以及按域名或 IP 的智能分流,没有按应用勾选的代理列表。解析结果是否符合预期取决于当前网络环境。
开始使用刺猬VPN:HTTPS+AES 加密、零日志,匿名注册无需邮箱
刺猬VPN提供永久免费节点,不限流量;无需邮箱,自定义用户名即可匿名注册。一个账号支持多设备同时在线,实际可用性取决于当前网络环境。