macOS 虚拟网卡冲突:虚拟机没网

Mac 上装了虚拟化软件之后,偶尔会遇到这种怪事:主机好好的,虚拟机没网;或者反过来,关掉虚拟机后主机的网络也断了,非得重启才行。

根因通常是多块虚拟网卡同时往路由表里写默认路由,谁最后写入谁生效,互相覆盖。

先看有哪些虚拟网卡

ifconfig | grep -A3 '^[a-z]' | grep -E '^[a-z]|inet '

常见的几块:

网卡来源作用
vmnet1/8VMware仅主机 / NAT
bridge100Parallels / 共享网络虚拟机桥接
utun*各类 VPN / TUN隧道
docker0Docker容器网络

看谁在抢默认路由

netstat -rn | grep default
route -n get default

default 那几行会显示每条默认路由对应的网卡和优先级。正常情况下应该只有一条走物理网卡(en0 或 en1)。

如果看到 utun3、vmnet8 这类也在默认路由里,而且优先级更靠前,那就是冲突源。

三种处理方式

一、关掉不用的虚拟网卡

sudo ifconfig vmnet8 down

临时生效,重启回来。适合快速验证是不是它的锅。

二、调整服务顺序

系统设置 → 网络 → 右下角「…」→「设定服务顺序」,把物理网卡拖到最上面。这样默认路由优先生效,虚拟网卡只在需要时用。

三、让虚拟化软件别接管默认路由

VMware 可以在偏好设置里把网络模式改成「仅主机」;Parallels 可以在虚拟机配置里改用「共享网络」而不是「桥接」。这两项改完,虚拟网卡就不会写默认路由了。

关掉虚拟机后主机断网

这是最典型的症状:虚拟机关闭时把它写的那条默认路由删了,但没恢复原来的,主机就只剩一条无效路由。

临时恢复:

sudo route delete default
sudo route add default 192.168.1.1

(把 192.168.1.1 换成你的路由器地址)

根治:按上面第三种方式,让虚拟化软件不接管默认路由。

判断口诀

主机正常、虚拟机异常 → 虚拟机的网络模式问题。
虚拟机关掉、主机异常 → 默认路由被删没恢复。
两者都异常 → 有第三块网卡(常见是 TUN)在抢。

💡 一条命令看全貌:netstat -rn | head -20,默认路由有几条、分别走哪块网卡,一眼就能看出来。

延伸阅读:Parallels 虚拟机没网排查、TUN 模式和系统代理、四层连通性自检。