|
虚拟机里装的虚拟Linux,浏览器打不开网页。机网这问题我撞见过不下十次,页打每次原因还不一样。不开 今天这台,虚拟控制台里敲ping 8.8.8.8,机网通了。页打再ping www.baidu.com,不开也通。虚拟可Firefox就是机网转圈圈,最后报“连接被重置”。页打你猜怎么着?不开是DNS缓存坏了。清理一下systemd-resolve --flush-caches,虚拟立马好。机网 但另一台虚拟机就没这么温柔。页打网络图标亮着,IP也拿到了,可连网关都ping不通。查了半天,原来是VMware的NAT服务不知什么时候挂了。Windows服务列表里,VMware NAT Service显示“已停止”,右键启动,再等十秒,一切正常。这情况多半是物理机睡眠唤醒后,虚拟网络服务没跟着恢复。 还有一次更邪门——宿主机能上网,虚拟机里所有网页都打不开,但curl命令行却正常。浏览器换Chrome、Edge全试过,一样。最后发现是系统时间差了半年。HTTPS证书验证失败,浏览器直接拒绝连接。命令行curl加-k参数能绕过,但浏览器没这选项。同步时间,立刻解决。 说到这,想起个常见误区:很多人一看到虚拟机里打不开网页,就急着改防火墙规则。其实大部分情况跟防火墙半毛钱关系没有。先看网络连通性,再看DNS解析,最后才考虑应用层问题。顺序反了,白折腾半天。 另外,桥接模式和NAT模式的区别也容易坑人。桥接模式下,虚拟机要跟宿主机在同一网段,还得路由器认这个新设备。公司网络有MAC过滤的话,虚拟机直接上不了网。NAT模式倒是省心,但偶尔会和宿主机上的VPN客户端冲突。我见过一哥们儿,开着公司VPN,虚拟机里死活打不开外网,关了VPN秒开。这属于虚拟网络路由和VPN隧道打架,没辙,只能二选一。 写代码的兄弟注意了,如果你在虚拟机里跑Docker,那又是另一层麻烦。Docker默认的bridge网络和VMware的NAT网段可能重叠,导致容器里访问外网时,数据包路由混乱。查一下ip route,如果看到两个默认网关,基本就是这问题。改Docker的bip参数,或者调整VMware的子网段,都能解决。 最后说个玄学——有时候重启虚拟机,问题就没了。别觉得不可思议,虚拟化层的网络状态有时候就是会卡在某个半死不活的中间态。快照回滚也好,重启也罢,只要能让虚拟网卡重新初始化,很多莫名其妙的网络故障都会消失。 碰到虚拟机网页打不开,我的排查顺序永远是:先ping网关,再ping外网IP,然后解析域名,最后试浏览器。每一步都能缩小问题范围。别一上来就重装系统,那是最笨的办法。多数时候,问题出在虚拟网络服务、DNS缓存或系统时间上,都是几分钟能修好的事。 |