一、先对齐现象:为什么「宿主通了,虚拟机却像没代理」
这类问题在社区里常被描述成「Clash 开着,但虚拟机还是直连」。实际上,宿主机上的 Clash 默认只处理进入本机监听地址与端口号的连接;而虚拟机是另一台(逻辑上的)主机,有自己的 IP、自己的默认网关与路由表。除非客户机主动把 HTTP/HTTPS/SOCKS 流量送到宿主在某一张网卡上可连到的 IP 与 mixed-port,或您在部署上采用更高阶的网关/TUN 拓扑,否则客户机的浏览器与命令行工具会照 DHCP 给的网关往外走,与宿主 Clash 无关。
另一个常见误解是:开了「系统代理」就以为全机含虚拟机都会跟着走。系统代理通常只影响宿主 Windows 上遵守该设置的应用程序;Hyper-V 客户机、VMware 客户机内的操作系统不会自动继承宿主会话的代理设置。因此要在客户机内另行设置代理环境变量、操作系统代理,或改网络拓扑,才能让流量进宿主 Clash。
若尚未理清订阅与监听端口,可先对照《Clash 常见报错解决方案》确认核心有加载、端口未被占用;本文假设宿主本机浏览器已可透过 Clash 正常上网,专注在虚拟网络与跨主机连接。
二、NAT 与桥接:封包实际从哪张卡出去
NAT(地址转换)模式下,客户机拿到的是虚拟网段内的私有地址,对外由 hypervisor 模拟的「小路由器」做转换;默认网关通常是该网段的 .1 或 .254 之类的内部地址,而不是您的宿主在实体局域网上的 IP。此时客户机要连宿主上的 Clash,应使用宿主在该虚拟网段上可连接的那个 IP——在 VMware Workstation 常见情境里,可在宿主执行 ipconfig,找到对应 VMware Network Adapter VMnet8(NAT)或您自订 vmnet 的 IPv4,例如 192.168.x.1;客户机内把代理指到 http://192.168.x.1:7890(实际端口以配置文件为准)。
桥接(Bridged)模式则让客户机像直接插在与宿主同一台实体交换机上:由局域网 DHCP 配发与宿主同网段的地址,默认网关通常是家里或公司路由器。此时客户机对外默认不会经过宿主,除非您把代理明确设成宿主在局域网上的 IP(例如 192.168.1.50)加 mixed-port。桥接的好处是客户机与手机、NAS 等同层设备互连较直观;坏处是您必须在路由器/防火墙政策允许的前提下,让局域网内其他设备能连到宿主上的代理端口——这正是 allow-lan 与防火墙入站规则要处理的部分。
Hyper-V 的「默认交换机」与「外部/内部/专用」虚拟交换机组合,概念上可类比:外部交换机接近桥接到实体网卡;NAT 则有独立地址空间。客户机内用 ip route 或 Windows 的 route print 看默认网关,通常一眼就能判断您现在是「与宿主同局域网」还是「躲在虚拟 NAT 后面」。
三、宿主该填哪一个 IP?实测检查清单
无论 VMware 或 Hyper-V,请在宿主先确认下列三点,再在客户机填代理地址。
- 在宿主 PowerShell 或命令提示符执行
ipconfig /all,列出所有接口。找出「客户机理论上连得到」的那一个 IPv4:桥接时多半是实体 Wi‑Fi 或以太网卡上的局域网地址;NAT 时则是对应该 vmnet 的宿主接口地址。 - 在客户机内对该 IP 做探测:Linux 可用
ping(若 ICMP 未被挡)、Windows 客户机可用Test-NetConnection 宿主IP -Port 7890或curl -v试连 HTTP 代理。若连端口都无法建立 TCP,先不要怪规则,而是防火墙或监听地址尚未对外开放。 - 确认 Clash/Mihomo 的 mixed-port(或分开的
port/socks-port)与您在客户机填的端口一致;客户机curl若走 HTTPS,常需加-x http://IP:PORT或搭配HTTPS_PROXY,视核心与工具而定。
站内《Clash 开启局域网代理》一文对「局域网内其他机器连宿主代理」有共通观念,可与本文对照阅读;差别在于虚拟机的「局域网」可能是 vmnet 虚拟段,而不是实体路由器下的 DHCP。
四、mixed-port、allow-lan 与 bind-address
Clash 混合端口指同一端口同时接受 HTTP 与 SOCKS 类连接(依核心版本与设置略有差异),客户机浏览器设 HTTP 代理、终端设 ALL_PROXY=socks5://... 时可共用同一数字端口,减少记多个端口的负担。若您只开了单一协议端口,请在客户机环境变量与应用程序内对应到正确协议。
allow-lan 设为 true 后,核心才会接受来自非本机回环的来源 IP 连接(仍须监听在 0.0.0.0 或具体局域网接口,视设置而定)。若只监听 127.0.0.1,局域网与虚拟网段一律连不进来,客户机会得到连接拒绝或超时。部分图形客户端把这两项包在「允许局域网连接」开关内,但实际写入 YAML 时仍建议核对 allow-lan 与 bind-address。
Windows Defender 防火墙可能阻挡入站 TCP 到混合端口。实测时可暂时为 Clash 或所用核心程序新增「允许连入」规则(限制在专用/局域网设置档较安全),或在确认连接后再收敛为仅允许特定子网。若您不愿开放入站,可改采客户机内仅出站连宿主——实际上仍是客户机主动连向宿主 IP:端口,防火墙需允许该入站会话在宿主侧成立,这与「从互联网任意位置连进来」风险等级不同,可依环境调整范围。
五、客户机内怎么设:浏览器、apt 与 curl
在 Linux 客户机,可将下列环境变量写入 ~/.bashrc 或 systemd 用户单元(范例端口请改成您的 mixed-port):
# Example — replace HOST_IP and port with your values
export http_proxy="http://HOST_IP:7890"
export https_proxy="http://HOST_IP:7890"
export ALL_PROXY="socks5://HOST_IP:7890"
export no_proxy="localhost,127.0.0.1"
接着执行 curl -I https://www.example.com 或您常用的探测 URL;若仍失败,用 curl -v 看是 TCP 连不上还是 TLS/HTTP 层被拒。部分发行版 apt 需另行设置 Acquire::http::Proxy,与 shell 环境变量分离,请一并检查。
在 Windows 客户机,可到「设置 → 网络和 Internet → Proxy」填入本机 HTTP 代理为 宿主IP:端口,或用支援 SOCKS 的第三方工具;PowerShell 亦可设 $env:HTTP_PROXY 再测 Invoke-WebRequest。
若您希望客户机内几乎所有 TCP都进宿主 Clash,而不逐一套代理,可研究在宿主启用 TUN 模式并搭配合适路由,或把宿主做成网关;复杂度与风险较高,入门仍建议先跑通「明确 HTTP/SOCKS 代理」路径。TUN 观念可参考《Clash TUN 模式开启方法》。
六、和 WSL2、Docker 有什么不同
WSL2 使用虚拟化网络栈,与本机回环、局域网 NAT 的关系又与 VMware 客户机不同;站内《WSL2 使用宿主 Clash:apt、Docker》专注在该网络栈下的 IP 取得与 resolv.conf 等细节。若您同时使用 WSL2 与传统虚拟机,请避免把两边的「宿主 IP」抄错:WSL2 常见是动态的内部地址,VMware NAT 则常落在固定的 vmnet 段。
Docker Desktop 在 Windows 上亦可能再挂一层虚拟网卡;容器内要连宿主代理时,有时用 host.docker.internal(依版本与后端而异)。与本文 VMware/Hyper-V 客户机相比,关键仍是「客户机路由表+能连到监听地址」。
七、实测验证:从连接日志反查
当客户机 curl 已能通,请回到宿主 Clash 的连接日志或实时连接列表,确认来源是否为客户机 IP、策略是否命中预期群组。若完全没有新连接,代表流量仍没进核心;若连接出现但网站打不开,再回头查规则、DNS 与 fake-ip。这种「先证明封包有进 Clash,再谈规则」的顺序,比在客户机盲目换 DNS 或换节点更有效率。
下列简表可打印出来在实验桌旁勾选(实际 IP 与端口请替换成您的环境)。
| 检查项 | 预期 | 若失败 |
|---|---|---|
| 宿主 mixed-port | 本机浏览器可走代理 | 先修宿主,勿进客户机 |
| allow-lan/bind | 监听对局域网或 vmnet 开放 | 改 YAML 或客户端开关 |
| 防火墙 | 宿主可接受客户机 TCP 连接 | 新增入站规则或限缩子网 |
| 客户机代理地址 | 指向正确宿主接口 IP | 重跑 ipconfig/对 ping/对端口测试 |
| 日志 | 看得到客户机 IP 的连接 | 流量仍绕过 Clash |
八、安全与维运提醒
对局域网或 vmnet 开放代理端口,等同在该范围内提供一个可转送流量的服务;请勿在不受信任的公共 Wi‑Fi 上长期开放 0.0.0.0 监听,并定期更新核心与订阅来源。若环境为公司安全政策严格之企业网络,请先与管理单位确认是否允许二层代理或网关行为,避免误触规范。
九、小结
Windows 虚拟机不走宿主 Clash,多半不是魔法失效,而是网络拓扑与监听范围没对齐:先分清 NAT 与桥接网卡,在宿主找到客户机该连的那个 IP,打开 mixed-port 与 allow-lan,必要时放行防火墙,再在客户机设好代理或环境变量。与 WSL2、局域网共享稿搭配,您几乎能涵盖 Windows 上所有「第二套操作系统」场景。若希望用图形界面减少手写 YAML 的疏失,可优先选择与 Mihomo 整合良好的客户端,并从本站取得安装包后再依上文逐步验证。→ 立即免费下载 Clash,开启流畅上网新体验