卸载虚拟化软件后网络异常是因残留虚拟网卡导致DNS污染与配置漂移;需依次清理配置文件、重置服务顺序、卸载kext驱动、删除/etc/resolver/污染规则,并验证接口与DNS流向。

如果您在 macOS 系统中卸载了虚拟化软件(如 VMware Fusion、VirtualBox 或 Parallels Desktop)后,发现网络连接异常、DNS 解析错误或系统偏好设置中仍显示已删除的网络接口,则很可能是残留虚拟网卡导致的 DNS 污染与配置漂移。以下是清理此类残留项的具体操作步骤:
一、手动删除系统级虚拟网卡配置文件
macOS 将网络接口配置持久化存储在 /Library/Preferences/SystemConfiguration/ 目录下,卸载虚拟化工具后部分 plist 文件可能未被清除,继续影响网络服务加载顺序与 DNS 分发逻辑。
1、打开“访达”,按 Shift + Command + G 调出前往文件夹窗口。
2、输入路径:/Library/Preferences/SystemConfiguration/,回车进入。
3、查找并移至废纸篓以下类型文件(若存在):com.vmware.fusion.networking.plist、com.parallels.vm.prl_nwconfig.plist、org.virtualbox.app.VirtualBoxVM.plist。
4、在终端中执行:sudo touch /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist,强制触发系统配置缓存重建。
二、重置网络服务顺序与 DNS 缓存
残留虚拟网卡可能注册为高优先级服务,干扰真实物理接口的 DNS 请求路由;同时系统 DNS 缓存可能保留过期或冲突的解析记录。
1、打开“系统设置”→“网络”,点击右下角三个点图标,选择“详细信息”。
2、切换至“服务顺序”标签页,确认 Wi-Fi 或 以太网 位于列表顶部,拖动调整使其高于所有含 vmnet、vboxnet、prl 字样的服务。
3、在终端中依次执行以下命令:
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
sudo discoveryutil mdnsflushcache(仅适用于 macOS Monterey 及更早版本)。
三、清理内核扩展与虚拟网卡驱动模块
部分虚拟化工具安装时会注册 kext(内核扩展),即使主程序卸载,其驱动仍驻留内核空间,持续创建虚拟接口并劫持网络栈行为。
1、在终端中运行:kextstat | grep -i "vm\|vbox\|prl",检查是否存在活跃的虚拟化相关内核扩展。
2、若输出非空,记录其 Bundle ID(如 com.vmware.kext.vmx86),然后执行:sudo kextunload -b com.vmware.kext.vmx86(将 ID 替换为实际值)。
3、进入 /Library/Extensions/ 目录,查找并删除以下任一存在的文件夹:VMwareKexts.kext、VirtualBox.kext、ParallelsGA.kext。
4、执行:sudo touch /System/Library/Extensions/ && sudo kextcache -i /,重建内核扩展缓存。
四、检查并修正 /etc/resolver/ 下的污染解析规则
某些虚拟化环境会在 /etc/resolver/ 目录下创建特定域名解析配置(如 resolver/vm.internal),这些文件会覆盖系统 DNS 行为,造成局部域名解析失败或跳转至错误地址。
1、在终端中运行:ls /etc/resolver/,查看是否存在非系统默认文件(如 vmware、vbox、prl、internal 等命名的文件)。
2、对每个可疑文件,使用 cat /etc/resolver/xxx 查看内容,若包含 nameserver 192.168.x.x 或非可信 IP,立即删除:sudo rm /etc/resolver/xxx。
3、确认仅保留系统默认的 /etc/resolver/.(即空文件名)或由企业 MDM 推送的受信配置。
五、验证当前活动网络接口与 DNS 实际流向
清理完成后需确认虚拟接口是否彻底消失,并验证 DNS 查询是否真正经由预期接口发出,排除残留配置的隐性生效可能。
1、在终端中运行:ifconfig | grep "vmnet\|vboxnet\|prl\|bridge",输出应为空。
2、运行:networksetup -listallhardwareports,确认列表中不含任何含 VMware、VirtualBox、Parallels 关键词的硬件端口。
3、执行:scutil --dns | grep 'nameserver\|resolver',检查各 resolver 条目对应的 interface 名称,确保无 vmnet1、vboxnet0 等残留接口绑定。

















