解决 WSL2 + Windows Hosts + 开启 VPN 后无法访问本地 Web 服务的问题

问题

场景描述:你在 WSL2 中运行了一个 Web 服务(如 Nginx、Go、Php、Node.js 等)。在 Windows 的 hosts 文件中绑定了域名(如 dev.wsl.net -> 172.x.x.x,以便在 Windows 浏览器中访问该服务。不开 VPN 时一切正常,但一旦开启公司或个人的 全流量接管型 VPN,Windows 就无法解析该域名,导致页面打不开。

本文将详细介绍这个问题的原因,并提供一个简单有效的解决方案:使用 .localhost 域名


🔍 问题描述

✅ 正常情况

  • WSL2 中运行的 Web 服务可以通过绑定的域名(如 http://dev.wsl.net)从 Windows 浏览器访问。
  • 例如,在 Windows 的 hosts 文件中有如下配置:
  1. 172.28.123.45 dev.wsl.net

❌ 开启 VPN 后

  • 开启公司或个人的 全流量接管型 VPN 后,尝试访问 http://dev.wsl.net 会失败,提示“无法访问此网站”或 DNS 解析失败。

🛠️ 导致问题的原因

1. VPN 劫持了所有 DNS 请求

许多企业级或安全型 VPN(如 Cisco AnyConnect、Palo Alto GlobalProtect、OpenVPN 全隧道模式)会:

  • 强制所有 DNS 查询走远程服务器
  • 忽略或绕过本地 C:\Windows\System32\drivers\etc\hosts 文件
  • 启用 DNS over HTTPS (DoH),进一步跳过本地解析。

2. 结果

当开启 VPN 后:

  • 访问 dev.wsl.net → 不再查 hosts → 发送 DNS 请求到远程 → 远程返回“不存在” → 访问失败 ❌

✅ 解决方案:使用 .localhost 域名

根据 RFC 6761,.localhost 域名必须解析为回环地址,且不得通过网络 DNS 查询。因此,它不会被任何远程 DNS 或 DoH 影响。

操作步骤:

1. 修改 Windows 的 hosts 文件

以管理员身份打开 C:\Windows\System32\drivers\etc\hosts,将原来的:

172.28.123.45 dev.wsl.net

改为:

172.28.123.45 wsl.localhost
2. 保存文件
3. 在 Windows 浏览器中访问
http://wsl.localhost
4. 现在,无论是否开启 VPN,都能正常访问!✅

🧪 验证方法

在开启 VPN 的状态下,在 Windows 中执行:

ping wsl.localhost

如果返回的是你的 WSL2 IP(如 172.28.123.45),说明解析成功 ✅
如果提示“找不到主机”,说明你还没改 hosts 或拼写错误 ❌


⚠️ 注意事项

  1. 必须用 .localhost,不能是 .local.test 等
  • .local 会被 mDNS(Bonjour/Zeroconf)接管,可能不稳定;
  • .test 虽也是保留域名,但部分企业 VPN 仍可能劫持;
  • 只有 .localhost 是 100% 强制本地解析的
  • 不要用 localhost 本身
    • localhost 默认指向 127.0.0.1(Windows 自己),而不是 WSL2;
    • 所以要用 子域名,如 app.localhostapi.localhost
  • 确保 WSL2 服务监听 0.0.0.0
    例如 Nginx 配置:或 Node.js:
    1. app.listen(3000,'0.0.0.0',()=>{...})
    1. server {
    2.     listen 80;
    3.     server_name app.localhost;# 可选
    4. ...
    5. }
    • 在 WSL2 中运行的 Web 服务,通过 Windows 的 hosts 文件绑定域名(如 dev.wsl.net -> 172.x.x.x)访问。
    • 开启全流量接管型 VPN 后,Windows 无法解析该域名,导致页面打不开。
    • 开启 VPN 后,Windows 的 DNS 请求被强制走远程服务器,忽略本地 hosts 文件,导致域名解析失败。
    • 使用 .localhost 域名代替 .local 或其他自定义域名。
      • 修改 Windows 的 hosts 文件,将 dev.wsl.net 改为 wsl.localhost
      • 在浏览器中访问 http://wsl.localhost

✅ 总结

问题

导致问题的原因

解决方案

总结

问题

解决方法

开启 VPN 后 dev.wsl.net 无法访问

改为 wsl.localhost 或 dev.wsl.localhost

原因

VPN 劫持 DNS,绕过本地 hosts

为什么 .localhost 有效

RFC 强制本地解析,不走 DNS

是否需要重启 WSL?

❌ 不需要

是否需要改代码?

❌ 只需改 hosts 和浏览器地址栏


💡 一句话终极答案
把你的开发域名从 xxx.local 改成 xxx.localhost,并在 Windows hosts 中绑定 WSL2 IP,即可在开 VPN 时正常访问。

这是目前最简单、最可靠、兼容性最好的方案,已被无数开发者验证 ✅试试看吧!如果有任何问题,欢迎继续交流 😊

Read more

计算机Java毕设实战-基于Spring Boot的教育机构师资资源管理系统设计与实现基于Web的师资管理系统设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

计算机Java毕设实战-基于Spring Boot的教育机构师资资源管理系统设计与实现基于Web的师资管理系统设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

java毕业设计-基于springboot的(源码+LW+部署文档+全bao+远程调试+代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围::小程序、SpringBoot、SSM、JSP、Vue、PHP、Java、python、爬虫、数据可视化、大数据、物联网、机器学习等设计与开发。 主要内容:免费开题报告、任务书、全bao定制+中期检查PPT、代码编写、🚢文编写和辅导、🚢文降重、长期答辩答疑辅导、一对一专业代码讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路。 特色服务内容:答辩必过班 (全程一对一技术交流,帮助大家顺利完成答辩,

Linux网络 | 理解Web路径 以及 实现一个简单的helloworld网页

Linux网络 | 理解Web路径 以及 实现一个简单的helloworld网页

前言:本节内容承接上节课的http相关的概念, 主要是实现一个简单的接收http协议请求的服务。这个程序对于我们理解后面的http协议的格式,报头以及网络上的资源的理解, 以及本节web路径等等都有着重要作用。 可以说我们就用代码来理解这些东西。 那么废话不多说, 现在开始我们的学习吧。         ps:本节内容建议先看一下上一篇文章http的相关概念哦:linux网络 | 深度学习http的相关概念-ZEEKLOG博客 目录  准备文件  makefile HttpServer.hpp 类内成员 封装sockfd start  ThreadRun  全部代码 运行结果 响应书写 Web路径  准备文件         首先准备文件: 这里面Httpserver.cc用来运行接收http请求的服务。 HttpServer.hpp用来定义http请求。Log.hpp就是一个打印日志的小组件, Socket.hpp同样是套接字的组件。 到使用直接调用相关接口即可。(Log.hpp和Socket.hpp如何实现不讲解, 如果想要知道

前端八股文面经大全:字节前端一面(2026-2-1)·面经深度解析

前端八股文面经大全:字节前端一面(2026-2-1)·面经深度解析

前言 大家好,我是木斯佳。 在这个春节假期,当大家都在谈论返乡、团圆与休息时,作为一名技术人,我的思考却不由自主地转向了行业的「冬」与「春」。 相信很多人都感受到了,在AI浪潮的席卷之下,前端领域的门槛在变高,纯粹的“增删改查”岗位正在肉眼可见地减少。曾经热闹非凡的面经分享,如今也沉寂了许多。但我们都知道,市场的潮水退去,留下的才是真正在踏实准备、努力沉淀的人。学习的需求,从未消失,只是变得更加务实和深入。 正值春节,也是复盘与规划的好时机。结合ZEEKLOG这次「春节代码贺新年」活动所提倡的“用技术视角记录春节、复盘成长”,我决定在这个假期持续更新专栏,帮助年后参加春招的同学。 这个专栏的初衷很简单:拒绝过时的、流水线式的PDF引流贴,专注于收集和整理当下最新、最真实的前端面试资料。 我会在每一份面经和八股文的基础上,尝试从面试官的角度去拆解问题背后的逻辑,而不仅仅是提供一份静态的背诵答案。无论你是校招还是社招,目标是中大厂还是新兴团队,只要是真实发生、有价值的面试经历,我都会在这个专栏里为你沉淀下来。 温馨提示:市面上的面经鱼龙混杂,

无需编程!Fun-ASR WebUI界面手把手操作教程

无需编程!Fun-ASR WebUI界面手把手操作教程 你是不是也遇到过这些情况:会议录音堆在文件夹里没时间听,客户语音留言转文字总出错,培训音频想整理成笔记却要花半天?别再复制粘贴到网页版工具、别再折腾Python环境、更别担心“CUDA out of memory”报错——今天这篇教程,专为完全不写代码的人准备。 Fun-ASR WebUI 是钉钉联合通义实验室推出的语音识别系统,由开发者“科哥”深度优化并封装成开箱即用的图形界面。它不是命令行里的冰冷指令,也不是需要配置10个参数才能跑起来的实验项目,而是一个像微信一样点点就能用的本地语音转文字工具。全程不需要安装Python包、不用改配置文件、不用查GPU型号——只要你会打开浏览器,就能把一段30分钟的采访音频,5分钟内变成带标点、分段清晰、数字自动规整的可编辑文本。 下面我将带你从零开始,像教朋友一样,一步步操作每一个按钮、解释每一处设置、避开所有新手踩坑点。你不需要懂“VAD”是什么,也不用知道“ITN”怎么拼,只需要跟着做,就能立刻上手。 1. 启动与访问:两步打开你的语音助手