问题
- VM(Win10 LTSC)内浏览器打不开
www.google.com;ZeroOmega 选「直接连接」与「系统代理」都失败。 ping www.google.com失败、ping www.baidu.com成功。
结论
VM 里没有正确使用宿主机的 mihomo 代理:登录用户的代理开关是关的,且地址填成了 127.0.0.1:7890 —— 在虚拟机内部 127.0.0.1 指虚拟机自己,宿主机必须用 libvirt NAT 网关 192.168.122.1。改成 192.168.122.1:7890 并打开开关即可。
ping(ICMP)不通属预期:HTTP 代理载不动 ICMP,宿主机自己 ping www.google.com 同样是 100% 丢包(宿主 mihomo 未开 TUN)。浏览器能开 google 才是判据。
网络拓扑(为什么必须写 192.168.122.1)
guest (192.168.122.x)
│ 默认网关 = 192.168.122.1(= 宿主机)
▼
宿主 virbr0 192.168.122.1/24 ← libvirt default 网络,forward mode='nat'
│ NAT(ip_forward=1)
▼
宿主真实网卡 → 路由器 → 外网
VM 的每一个包都先到宿主机,由宿主 NAT 转发出去 —— 不是独立跟路由器通信。宿主的 mihomo 监听 0.0.0.0:7890(含 virbr0),所以从 VM 内部看它的地址就是网关 192.168.122.1。
回环地址陷阱:每台网络节点各有各的 127.0.0.1。VM 内的 127.0.0.1:7890 = 虚拟机自己(无人监听)⇒ 连不上。VM 内连宿主机的任何服务都用 192.168.122.1:…。
排查过程与三个坑
- 坑一:guest agent 以 SYSTEM 身份运行。用
Set-ItemProperty HKCU:\…改的是 SYSTEM 的 hive,登录用户完全没改到;而以 SYSTEM 跑 WinINET / WinHTTP 测试都返回 200 ⇒ 造成「OS 层已通、只是浏览器的问题」这一假阳性。
判据:agent 里$env:LOCALAPPDATA若为C:\windows\system32\config\systemprofile\…即证明身份是 SYSTEM。
正确做法:写到HKU\<用户SID>\Software\Microsoft\Windows\CurrentVersion\Internet Settings(登录用户的 hive 在 HKU 下是加载态,可直接写)。 - 坑二:用户侧代理地址被设成
127.0.0.1:7890且开关是关的 ⇒ 无论选「直接连接」还是「系统代理」都不通。 - 坑三:
ping不通被误当故障。ICMP 不走 HTTP 代理,宿主自身同样不通 ⇒ 不是 VM 的问题。
解决(本次采用:在 VM 内部设置代理)
写入登录用户的 hive(用户 cat,SID S-1-5-21-3053967498-3421766977-2690570858-1001):
HKU\<SID>\Software\Microsoft\Windows\CurrentVersion\Internet Settings
ProxyEnable = 1
ProxyServer = 192.168.122.1:7890
ProxyOverride = localhost;127.0.0.1;<local>
同时清理先前误写进 HKU\S-1-5-18(SYSTEM)的那几项。
验证:完全退出 Chrome(含后台进程 —— WinINET 设置只在启动时读一次)后重开,看 chrome://net-internals/#proxy 里生效的代理,或直接打开 google。若要让「新用户也自动」,可改用机器策略 HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings。
为什么不在宿主机做(本次未采用,供日后参考)
- 宿主的「系统级代理」只对宿主自己的程序生效:它是应用层设置,由程序(WinINET / gsettings…)主动读取;VM 的包到宿主只是被 NAT 转发,内核按路由表处理,不读代理设置。
- 要让 VM 零配置,只能:① 宿主机做透明重定向(防火墙把 virbr0 上的 TCP REDIRECT 到 mihomo 的
redir-port,需改 mihomo 配置)② 宿主 mihomo 开tun.enable+auto-route(整条流量进隧道)。两条都要动宿主配置,本次选择保持「VM 内部设代理」。
边界
ping/ ICMP 在 VM 内仍不通(除非改走 TUN),这不是故障。- 本方案覆盖读系统代理的程序(浏览器、多数桌面程序);完全无视系统代理的程序需在其自身设置里填
192.168.122.1:7890。 - 新建用户账号需重新设置(或改用上面的机器策略)。