Ubuntu服务器上通过Cockpit创建的Win11虚拟机可访问局域网及互联网但无法访问宿主机
Ubuntu服务器上通过Cockpit创建的Win11虚拟机可访问局域网及互联网但无法访问宿主机
我碰到过好几个用户遇到和你一模一样的问题,其实根源是Cockpit里的「Direct attachment」网络模式的特性导致的,我来给你拆解下原因和具体的解决办法:
先明确问题根源
Cockpit里的「Direct attachment」底层用的是macvtap驱动,这个模式的设计初衷是让虚拟机直接和物理网卡通信,性能很好,但有个天生的限制:虚拟机可以和局域网内的任何设备(包括路由器、其他电脑)通信,但默认情况下和宿主机之间无法直接互通。因为macvtap会绕过宿主机的网络栈,虚拟机发的数据包不会经过宿主机的网络接收路径,自然就到不了宿主机内核,反过来也一样。
你的环境信息梳理(方便对照)
- 宿主机(Ubuntu Server)IP:192.168.178.2
- Win11虚拟机IP:192.168.178.219
- 网关/局域网DNS:192.168.178.1 / 192.168.178.2
- 虚拟机路由表正常,默认网关指向路由器,所以能正常上外网和访问其他LAN设备
解决办法(两种任选)
方法一:给宿主机的macvtap接口加同网段IP(不用改VM配置)
这个方法不用动虚拟机的设置,只需要在宿主机上操作:
- 找到对应的macvtap接口:
在Ubuntu宿主机的终端里执行:
找名字格式类似ip link showmacvtap@enpXsX的接口(比如你的物理网卡是enp0s3,对应的macvtap可能是macvtap0@enp0s3) - 给macvtap接口加同网段IP:
选一个局域网里没被占用的IP(比如192.168.178.3),执行:
(把sudo ip addr add 192.168.178.3/24 dev macvtap0macvtap0换成你找到的实际接口名,IP换成你可用的) - 测试:回到Win11虚拟机里,ping 192.168.178.3,应该能通了。如果要让这个IP永久生效,可以把配置加到你的网络管理工具里——比如用Netplan的话,编辑
/etc/netplan/xxx.yaml,添加这个接口的IP配置;用ifupdown的话,编辑/etc/network/interfaces。
方法二:改用桥接模式(彻底解决互通问题)
如果觉得方法一有点绕,直接把虚拟机的网络改成桥接模式更直观,桥接模式下宿主机和虚拟机完全在同一个广播域,默认就能互通:
- 先把Win11虚拟机关机
- 登录Cockpit的虚拟机管理界面,找到这个Win11 VM,点击「编辑」
- 找到网络配置部分,把「Direct attachment」改成「Bridge」,然后选择你的物理网卡(比如enp0s3)
- 启动虚拟机,现在测试访问宿主机的192.168.178.2,应该就能正常ping通、访问服务了
额外排查点(概率较低,但可以确认)
虽然你说其他局域网设备能访问宿主机,大概率不是防火墙的问题,但也可以快速排查下:
在Ubuntu宿主机执行:
sudo ufw status
看看有没有规则拒绝来自192.168.178.219的流量;如果用的是iptables,执行sudo iptables -L -n检查INPUT链的规则,确保没有阻止VM的IP段。
备注:内容来源于stack exchange,提问作者Ignazio
相关产品推荐
相关产品推荐

