You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 20.04.5虚拟机双网卡配置故障排查及静态IP配置需求

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网卡的网段和真实局域网不重叠,具体操作:

  1. 修改VirtualBox Host-Only网络配置

    • 打开VirtualBox,点击「工具」→「主机网络管理器」
    • 选中你的Host-Only适配器,点击「编辑」
    • 将IPv4地址改成和192.168.200.x不冲突的网段,比如192.168.56.1,子网掩码设为255.255.255.0
    • 可以关闭DHCP服务器(我们手动设置虚拟机IP)
  2. 修改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
    
  3. 验证连通性
    再次执行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主机上设置流量转发:

  1. 以管理员身份打开Windows命令提示符,添加路由规则:
    route add 192.168.56.0 mask 255.255.255.0 192.168.200.44
    
    192.168.200.44是Windows主机的真实局域网IP,让本地设备的流量先到主机,再转发到Host-Only网络)
  2. 开启Windows IP转发功能:
    netsh interface ipv4 set interface "以太网" forwarding=enable
    netsh interface ipv4 set interface "VirtualBox Host-Only Ethernet Adapter" forwarding=enable
    
    (网卡名称需对应你的真实局域网网卡和Host-Only网卡,可用netsh interface ipv4 show interfaces查看)
方案B:改用桥接模式(更简单,适合虚拟机直接接入本地局域网的场景)

把Host-Only网卡换成桥接适配器,让虚拟机直接成为本地局域网的一员:

  1. 在VirtualBox中,将第二个网卡改为「桥接适配器」,选择Windows主机连接192.168.200.x网段的网卡(比如「以太网」或「WLAN」)
  2. 修改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
    
  3. 执行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

火山引擎 最新活动