教程 · 预计阅读 16 分钟

Hyper-V 虚拟机走宿主机 Clash:
NAT 默认网关与系统代理两种配法

宿主机上的 Edge 已经跟着 Clash 分流跑得很顺,一进 Hyper-V 里的 Windows 或 Linux,浏览器又像「没开代理」;有人急着把默认网关改成宿主机 IP,有人只敢动系统代理,结果还是连不上。本文先把NAT 默认交换机外部桥接里「网关到底是谁」讲清楚,再对比两条常见路径:在虚拟机里写死 HTTP/SOCKS 代理,以及在什么情况下才需要动路由与网关,并统一交代 Allow LAN、端口与防火墙验收顺序。

Hyper-V · Clash · NAT · 系统代理 · Allow LAN

1 先纠正一个误区:默认网关不等于「已经过 Clash」

在 Hyper-V 最常见的默认交换机(Default Switch)场景里,虚拟机拿到的默认网关通常就是宿主机在那一小段 NAT 网络上的接口地址。它的职责是:把虚拟机发出的 IP 包做地址转换,再送到物理网卡出去。换句话说,你「本来就有网关」,而且往往已经指向宿主机侧负责 NAT 的那一侧。

但 Clash 或 Mihomo 在宿主机上监听的是应用层代理端口(混合端口、HTTP 端口或 SOCKS),并不会因为你「ping 得通网关」就自动把虚拟机的 HTTP/TLS 流量改写成分流策略。宿主机的 TUN 模式主要接管宿主机本机的转发路径;虚拟机作为另一台独立客户机,其流量默认仍按虚拟机自己的路由表走 NAT 出口,除非你在虚拟机内显式配置代理,或在宿主机上做更复杂的转发与策略路由(这已经超出普通「装个客户端就想全家桶走节点」的范畴)。

因此,搜索「Hyper-V 改网关 走 Clash」时,要先问自己:你要的是浏览器和认系统代理的应用稳定出国,还是虚拟机里每一个 IP 包都强制经过某台上游?前者用代理/PAC 通常足够;后者在 Windows 宿主机上成本高,一般不如在虚拟机内再跑一份 Clash 或使用路由器式透明代理。

2 NAT 默认交换机与外部桥接:宿主机 IP 怎么理解

默认交换机 + NAT:虚拟机与宿主机不在你家路由器的同一网段,虚拟机拿到的是 Hyper-V 内部分配的私有地址。此时「能代表宿主机、且虚拟机可达」的 IP,通常是该 NAT 网段上的宿主机端地址,在 Windows 上常显示为名为 vEthernet (Default Switch) 或类似描述的适配器。你在虚拟机里看到的默认网关往往与它一致或同网段相邻——这是正常设计,不是故障。

外部网络桥接(External vSwitch):虚拟机与宿主机都桥到同一块物理网卡,虚拟机可能直接拿到与路由器同网段的地址(例如 192.168.1.0/24)。这时「宿主机」在虚拟机眼里就是局域网里的另一台机器,应使用宿主机在该网段上的 IPv4 地址作为代理目标,而不是去猜 NAT 内网段。若你的 Clash 只监听 127.0.0.1,虚拟机永远连不上,必须配合下文所述的 Allow LAN 或等价「监听所有接口」设置。

若你同时使用多块网卡、Wi‑Fi 与以太网切换、或公司网络有客户端隔离,虚拟机到宿主机的直连可能被策略挡住——这时即使 IP 填对,也要在交换机与安全软件两侧一起排查。

3 在虚拟机里找到「该填进代理地址栏」的宿主机 IP

Windows 客户机为例,可在 PowerShell 中查看默认网关,它往往就是 NAT 场景下宿主机的候选地址之一(请以你机器输出为准):

PowerShell
Get-NetRoute -DestinationPrefix "0.0.0.0/0" | Sort-Object RouteMetric | Select-Object -First 1 NextHop

Linux 客户机上,可类比使用 ip route 查看默认路由下一跳。桥接模式下,更直接的做法是在宿主机上执行 ipconfig(或「设置 → 网络」),读出当前正在上网的那块网卡的 IPv4,再在虚拟机里 ping 或 curl 探测该地址的代理端口是否开放。

务必区分:127.0.0.1 在虚拟机内部永远指向虚拟机自己,不是宿主机。除非你做端口转发或特殊网络拓扑,否则不要把代理写成 127.0.0.1:7890 还抱怨「宿主 Clash 已经开了」。这一点与 WSL2 里常见踩坑是同一逻辑,本站《WSL2 下 Ubuntu 走 Windows Clash》一文也可以对照阅读。

IP 会变吗? NAT 网段或 DHCP 租约更新后,宿主机在虚拟交换机上的地址可能变化。长期固定需求可考虑在可管理的范围内为宿主机保留地址,或在虚拟机内用脚本探测默认网关再写入代理配置。

4 宿主机 Clash / Mihomo:端口、Allow LAN 与防火墙

在动虚拟机之前,请先在宿主机客户端确认三件事,否则后面怎么改网关都徒劳。

  • 混合端口或 HTTP 入站端口:记下实际数字(例如界面中的 7890,以你客户端为准),虚拟机里填写的协议要与该入站类型一致(HTTP 代理填 http://IP:端口;若单独启用 SOCKS,再使用 socks5://)。
  • Allow LAN / 允许局域网连接:开启后,进程通常监听 0.0.0.0:端口,虚拟机网段才能连入。若仅监听环回地址,局域网与 Hyper-V NAT 另一侧都会被拒绝。
  • Windows Defender 防火墙:对「专用网络」放行你的 Clash 主程序与内核进程;若入站仍被拒绝,可参考《Windows 11 防火墙放行 Clash》中的思路做最小放行(仅在可信网络环境下操作)。

若宿主机主要依赖系统代理开关让本机浏览器跟随,请记住:虚拟机的「系统」是另一套注册表与 WinHTTP 配置,不会继承宿主机的 PAC 或手动代理设置,必须到虚拟机内重复配置或使用组策略/脚本下发。

5 配法一(推荐优先尝试):虚拟机内系统代理与浏览器

适用场景:你需要 Edge、Chrome、依赖 WinINET 的客户端、以及部分遵循环境变量的开发工具稳定走节点;不要求虚拟机里每一个后台进程都强制翻墙。

在 Windows 虚拟机中,打开「设置 → 网络和 Internet → 代理」,选择手动设置,地址填上一节得到的宿主机 IP,端口填 Clash 的 HTTP/混合入站端口。若使用 PAC 文件,可把代理规则指向同一宿主机上的 HTTP 端口(具体 PAC 语法略,核心是别把主机名写成 localhost)。

对仅认 WinHTTP 的工具(某些旧版 CLI、系统组件),可能还需要在提升权限的 CMD 中执行 netsh winhttp set proxy 与 Clash 文档建议的复位命令;这与《Windows UWP 与系统代理》里讨论的本机侧问题同源,只是现在「代理服务器地址」变成了宿主机 IP。

Linux 虚拟机则通常在 /etc/environment、shell 配置或桌面环境的网络代理页中填写 http_proxy / https_proxy;与 WSL 教程相同,apt 往往要单独写 Acquire::http::Proxy,不要假设环境变量能覆盖所有包管理器。

为什么先走这条路径 它只改应用层出口,不动虚拟机默认路由,排错面小;Clash 日志里也能直接看到来自虚拟机网段的连接,便于对照规则是否命中。

6 配法二:什么时候才需要动「默认网关」

在默认交换机 NAT 下,随意把网关改成别的地址很容易直接把虚拟机断网:要么不再指向正确的 NAT 出口,要么指向一台并不会为你做转发的机器。除非你明确知道下一跳设备会替你转发(例如旁路网关、路由器透明代理),否则不要把「改网关」当成首选按钮。

若你的目标是「虚拟机所有 TCP 连接都经过宿主机上某服务」,常见工程化做法反而是:在宿主机启用路由与远程访问、配置 NAT/ICS,或在虚拟机里单独安装 Clash 系客户端,让它本机接管 TUN。这与消费级「宿主机开一个 Clash 就想 Hyper-V 全自动分流」的想象有距离,却是网络分层上更干净的做法。

桥接模式下,若你把虚拟机网关改成局域网内一台真正的路由器地址,那是正常的上网方式,但依然不保证流量经过 Clash——除非那台路由器本身做了透明代理,或你在虚拟机内使用代理。简言之:网关解决「包往哪送」Clash 端口解决「HTTP/SOCKS 由谁做策略」,两件事可以相关,但绝不是同一个开关。

不要盲目「指网关到宿主机」 除非你已经验证宿主机对该网段做合法转发且 Clash 以你期望的方式参与转发,否则优先保持 DHCP 自动获取,改用系统代理或虚拟机内第二份客户端。

7 验证步骤与常见失败原因清单

建议按顺序做,避免同时修改多处后无法归因。

  1. 在虚拟机内 ping 宿主机候选 IP(若环境禁 ICMP,可跳过)。
  2. 在虚拟机 PowerShell 或 Linux 终端执行 curl -v,显式指定 --proxy http://HOST:PORT 访问一个测试 URL,确认 TCP 与 TLS 是否成功。
  3. 打开宿主机 Clash 日志,观察是否有来自虚拟机网段的入站记录;若无,仍是监听地址、防火墙或 Allow LAN 问题。
  4. 对照规则集,确认测试域名没有被错误直连或 REJECT;DNS 异常时可结合《DNS 防泄漏》思路检查虚拟机侧解析是否绕开预期。

高频原因包括:未开 Allow LAN;端口号抄成 SOCKS 却用 HTTP 协议连接;宿主机 IP 变更后虚拟机仍写死旧值;公司 Wi‑Fi 客户端隔离导致虚拟机无法访问宿主机;以及仅设置了浏览器插件代理、系统其他组件仍直连。

8 和 WSL2 并列看:虚拟化场景下的共同口诀

WSL2 与 Hyper-V 客户机都是「宿主机里还有一套网络栈」的典型场景:127.0.0.1 永远指错对象Allow LAN 是跨网段访问 Clash 的前置条件系统代理与包管理器/WinHTTP 要分开配置。你已经搞定 WSL 的话,把「宿主机 IP + 端口」这条线原样映射到 Hyper-V 虚拟机即可;尚未安装 Windows 客户端的用户可先完成《Clash Verge Rev Windows 安装》再继续。

9 总结

Hyper-V 虚拟机要走宿主机上的 Clash,核心不是「有没有网关」,而是虚拟机能否访问宿主机上对外监听的代理端口,以及你选择在应用层(系统代理、环境变量、浏览器)解决,还是愿意承担路由层改造的成本。默认交换机 NAT 下,默认网关往往已经指向宿主机侧的 NAT 角色;此时再乱改网关,不如先开 Allow LAN、放行防火墙,在虚拟机里把代理地址写成可达的宿主机 IP。

桥接模式下,把宿主机当作局域网内的一台普通机器看待,使用其在物理网段上的地址即可;协议与端口仍要与客户端配置一致。把这两类拓扑分清楚之后,排查会快很多。

相比在虚拟机里反复试错路由表,一款在 Windows 上日志清晰、端口与局域网开关一目了然的 Clash 系客户端,能显著降低「到底连没连上宿主机」的不确定性;在规则与 DNS 已经理顺的前提下,桌面与虚拟机之间的协同也会更省心。

相比其他同类工具,Clash 系在规则可读性、社区文档与 Mihomo 内核演进上的综合体验仍然更均衡;把宿主机监听与 Hyper-V 客户机的代理地址对齐之后,日常在虚拟机里浏览与开发会顺畅很多。

→ 立即免费下载 Clash,开启流畅上网新体验

标签: Hyper-V 虚拟机 Windows Clash NAT 系统代理 Allow LAN
Clash Verge Rev 与 Hyper-V 虚拟机代理协同

Clash Verge Rev

新一代 Clash 客户端 · 免费开源

在 Windows 宿主机上统一管理混合端口、Allow LAN 与日志;虚拟机侧只需指向可达的代理地址,即可与桌面分流策略保持一致。安装包请从本站下载页获取。

TUN 全流量接管 Mihomo 高性能内核 精准规则分流 DNS 防泄漏 多订阅管理

相关阅读