Ubuntu 20.04.5虚拟机双网卡配置故障排查及静态IP配置需求
问题原因通俗解释
咱们先搞明白为啥开启Host-Only网卡后,虚拟机就ping不通本地的192.168.200.10了——核心问题出在路由表的“快递路线”发错了。
当你只开NAT网卡时,虚拟机的所有流量(不管是外网8.8.8.8还是本地192.168.200.x)都会走NAT网卡,而NAT是通过Windows主机的真实网络转发的,所以能正常连通。
但开启Host-Only网卡后,如果你给它配置了和真实局域网同网段的IP(192.168.200.x),虚拟机的路由表会自动生成一条规则:「所有192.168.200.x的请求,都走Host-Only网卡」。可Host-Only是VirtualBox在Windows主机内部创建的虚拟小网络,根本连不上真实局域网里的192.168.200.10,相当于你把本该寄去真实小区的快递,送到了主机内部的虚拟仓库,自然找不到收件人。
故障排查步骤
先确认虚拟机的路由情况,打开Ubuntu终端执行:
ip route show
如果开启双网卡后看到类似这样的输出,就验证了我们的判断:
default via 10.0.2.1 dev enp0s3 proto dhcp src 10.0.2.15 metric 100 192.168.200.0/24 dev enp0s8 proto kernel scope link src 192.168.200.101 metric 100
第二条规则就是“发错快递”的元凶——它让所有192.168.200.x的流量都走Host-Only网卡(enp0s8)。
解决方案:实现三项目标
目标1:同时ping通外网和本地设备
核心是让Host-Only网卡的网段和真实局域网不重叠,具体操作:
修改VirtualBox Host-Only网络配置
- 打开VirtualBox,点击「工具」→「主机网络管理器」
- 选中你的Host-Only适配器,点击「编辑」
- 将IPv4地址改成和192.168.200.x不冲突的网段,比如
192.168.56.1,子网掩码设为255.255.255.0 - 可以关闭DHCP服务器(我们手动设置虚拟机IP)
修改Ubuntu虚拟机Host-Only网卡配置
Ubuntu 20.04用netplan管理网络,编辑配置文件(文件名可能不同,以实际为准):sudo nano /etc/netplan/00-installer-config.yaml修改为以下内容(enp0s3是NAT网卡,enp0s8是Host-Only网卡):
network: ethernets: enp0s3: dhcp4: true # NAT网卡保持DHCP,自动获取外网访问能力 enp0s8: dhcp4: false addresses: [192.168.56.100/24] # 手动设置Host-Only网段的静态IP # 不需要设置网关,Host-Only仅用于和主机通信 version: 2保存后执行生效命令:
sudo netplan apply验证连通性
再次执行ip route show,会看到Host-Only的路由规则变成了192.168.56.0/24 dev enp0s8 ...,此时ping 8.8.8.8和192.168.200.10都能正常连通。
目标2:让本地局域网设备能ping通虚拟机
分两种场景选择方案:
方案A:保留NAT+Host-Only架构(适合需要隔离虚拟机网络的场景)
仅Windows主机能直接ping虚拟机的192.168.56.100,若要让其他本地设备(比如192.168.200.10)也能ping通,需要在Windows主机上设置流量转发:
- 以管理员身份打开Windows命令提示符,添加路由规则:
(route add 192.168.56.0 mask 255.255.255.0 192.168.200.44192.168.200.44是Windows主机的真实局域网IP,让本地设备的流量先到主机,再转发到Host-Only网络) - 开启Windows IP转发功能:
(网卡名称需对应你的真实局域网网卡和Host-Only网卡,可用netsh interface ipv4 set interface "以太网" forwarding=enable netsh interface ipv4 set interface "VirtualBox Host-Only Ethernet Adapter" forwarding=enablenetsh interface ipv4 show interfaces查看)
方案B:改用桥接模式(更简单,适合虚拟机直接接入本地局域网的场景)
把Host-Only网卡换成桥接适配器,让虚拟机直接成为本地局域网的一员:
- 在VirtualBox中,将第二个网卡改为「桥接适配器」,选择Windows主机连接192.168.200.x网段的网卡(比如「以太网」或「WLAN」)
- 修改Ubuntu的netplan配置,给桥接网卡设置静态IP:
network: ethernets: enp0s3: dhcp4: true # 保留NAT网卡(可选,桥接本身也能访问外网) enp0s8: dhcp4: false addresses: [192.168.200.101/24] # 和本地局域网同网段的静态IP gateway4: 192.168.200.1 # 本地局域网网关 nameservers: addresses: [8.8.8.8, 192.168.200.1] version: 2 - 执行
sudo netplan apply生效后,本地设备就能直接ping虚拟机的192.168.200.101了,同时虚拟机也能正常访问外网和本地设备。
目标3:给虚拟机分配固定IP
上面的操作已经包含了静态IP配置:
- Host-Only场景:固定IP是
192.168.56.100 - 桥接场景:固定IP是
192.168.200.101
如果用桥接模式,建议在本地路由器上把这个IP绑定到虚拟机的MAC地址,避免被DHCP服务器分配给其他设备。
备注:内容来源于stack exchange,提问作者Alex




