一、前言 & 场景痛点

在网络仿真学习场景中,很多用户会使用 Linux KVM 运行Windows虚拟机,并在Windows内部安装 VirtualBox + HCL华三模拟器 做网络实验。

默认KVM为NAT模式(virbr0,192.168.122.0/24),会出现典型网络隔离问题:

  • ✅ Linux宿主机可以正常访问Windows虚拟机
  • ✅ Windows虚拟机可以正常访问内部HCL模拟设备(192.168.56.0/24)
  • Linux宿主机无法直接访问HCL模拟器设备,必须远程桌面进入Windows操作,极其繁琐

核心问题:KVM NAT网络二层隔离,且Windows内部VirtualBox Host-Only网段(192.168.56.0/24)无法被宿主机路由穿透。

本文提供一套全Linux发行版通用的终极解决方案:KVM桥接组网 + Windows三层转发 + 双向静态路由,实现宿主机直接Telnet/SSH/Web访问HCL所有虚拟设备。

二、整体网络拓扑

物理局域网网段:192.168.31.0/24 HCL模拟设备网段:192.168.56.0/24

1Linux宿主机(br0:192.168.31.13)
2        ↓ KVM二层桥接
3Windows虚拟机(桥接网卡:192.168.31.159)
4        ↓ Windows内核IP转发
5Windows VirtualBox Host-Only网卡(192.168.56.1)
67HCL交换机/路由器(192.168.56.99 等设备)

三、核心实现原理

  1. KVM改桥接模式:让Windows虚拟机成为局域网独立设备,与宿主机二层互通
  2. 开启Windows内核IP转发:让Windows充当三层软路由,打通两张网卡跨网段流量
  3. Linux宿主机配置静态路由:将56网段流量全部转发至Windows虚拟机
  4. HCL设备配置回程路由:解决流量出去回不来的核心坑点

四、Linux宿主机配置(全发行版通用)

适配 Fedora、Ubuntu、Debian、Arch 等所有Linux系统,区分主流网络管理器方案。

4.1 关键前置知识点(避坑核心)

Linux网桥创建时必须开启STP

  • 单网卡网桥看似无环路,但家用/企业交换机普遍开启RSTP、环路检测机制
  • 未开启STP的Linux网桥不会发送BPDU报文,会被上游交换机误判为环路设备,直接拦截DHCP/ARP流量
  • 开启STP后会默认触发30s端口侦听学习延迟,通过配置边缘端口可彻底消除延迟

4.2 NetworkManager 方案(桌面版通用)

适用于 Fedora、Ubuntu Desktop、Arch 桌面版。

1. 创建网桥并开启STP

1# 创建网桥br0,启用STP防兼容拦截
2sudo nmcli connection add type bridge con-name br0 ifname br0 bridge.stp yes ipv4.method auto
3
4# 将物理网卡enp3s0绑定为网桥从端口
5sudo nmcli connection add type bridge-slave con-name br0-port-enp3s0 ifname enp3s0 master br0
6
7# 关键优化:物理上联口设为边缘端口,跳过STP 30秒等待,秒通网络
8sudo nmcli connection modify br0-port-enp3s0 bridge.port-type edge

2. 切换网络至网桥

1# 关闭原有有线连接(替换为你的有线连接名称)
2sudo nmcli connection down "有线连接 1"
3
4# 激活网桥网络
5sudo nmcli connection up br0
6sudo nmcli connection up br0-port-enp3s0

3. 网桥回滚方案(网络异常备用)

1sudo nmcli connection down br0
2sudo nmcli connection down br0-port-enp3s0
3sudo nmcli connection up "有线连接 1"

4.3 其他发行版适配方案

Netplan(Ubuntu/Debian Server)

编辑 /etc/netplan/00-installer-config.yaml

1network:
2  bridges:
3    br0:
4      dhcp4: true
5      interfaces: [enp3s0]
6      parameters:
7        stp: true
8  ethernets:
9    enp3s0: {}

生效命令:sudo netplan apply

systemd-networkd(Arch/极简服务端)

网桥设备配置:/etc/systemd/network/20-br0.netdev

1[NetDev]
2Name=br0
3Kind=bridge
4STP=true

网卡绑定配置:/etc/systemd/network/21-br0-slave.network

1[Match]
2Name=enp3s0
3[Network]
4Bridge=br0

五、KVM虚拟机网络改造(全Linux通用)

libvirt/virt-manager 跨发行版完全一致,二选一操作。

5.1 图形方案(virt-manager)

  1. 完全关闭Windows虚拟机(禁止休眠)
  2. 打开虚拟机硬件详情,找到网卡设备
  3. 网络源改为:桥接设备,设备名填写 br0
  4. 网卡模型选择 virtio(性能最优)
  5. 保存配置,启动虚拟机

5.2 命令行方案(virsh)

1# 关闭虚拟机(替换为你的虚拟机名称)
2virsh shutdown WinVM
3# 编辑虚拟机配置
4virsh edit WinVM

删除原有NAT网卡配置,替换为桥接配置:

1<interface type='bridge'><source bridge='br0'/>
2 <model type='virtio</interface>

保存后启动虚拟机:virsh start WinVM

5.3 连通性自检

Windows开机后获取局域网IP(例:192.168.31.159),确保:

  • Linux宿主机 ping 通 Windows虚拟机
  • Windows虚拟机 ping 通 Linux宿主机

六、Windows虚拟机核心路由配置

关键误区:关闭Windows防火墙 ≠ 开启IP转发。防火墙只过滤流量,内核转发开关才是跨网卡通信的核心。

6.1 开启系统内核IP转发(必做)

以管理员身份打开CMD,执行命令:

1reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v IPEnableRouter /t REG_DWORD /d 1 /f

执行后必须重启Windows虚拟机,内核路由转发功能方可生效。

6.2 调试临时关闭防火墙(可选)

1netsh advfirewall set allprofiles state off

建议调试通后恢复防火墙,不建议长期裸奔。

七、Linux宿主机路由配置(穿透56网段)

7.1 临时路由(测试用,重启失效)

1sudo ip route add 192.168.56.0/24 via 192.168.31.159

测试连通性:ping 192.168.56.1,通即路由链路正常。

7.2 永久路由(桌面版 NetworkManager)

1sudo nmcli connection modify br0 +ipv4.routes "192.168.56.0/24 192.168.31.159"
2sudo nmcli connection up br0

7.3 永久路由(Netplan 服务端)

在原有br0配置中追加路由:

 1network:
 2  bridges:
 3    br0:
 4      dhcp4: true
 5      interfaces: [enp3s0]
 6      parameters:
 7        stp: true
 8      routes:
 9        - to: 192.168.56.0/24
10          via: 192.168.31.159
11  ethernets:
12    enp3s0: {}

7.4 永久路由(systemd-networkd)

在br0网卡配置末尾追加:

1[Route]
2Destination=192.168.56.0/24
3Gateway=192.168.31.159

八、HCL模拟器回程路由(终极关键步骤)

8.1 故障现象

  • ✅ Linux ping 192.168.56.1 正常
  • ✅ Windows ping HCL设备 192.168.56.99 正常
  • ❌ Linux ping HCL设备 100%丢包

8.2 根因

HCL设备无回程路由,不知道如何返回 192.168.31.0/24 网段流量。

8.3 H3C设备配置命令

1system-view
2ip route-static 192.168.31.0 255.255.255.0 192.168.56.1
3save

配置完成后,Linux宿主机可直接 ping / telnet / SSH 所有HCL模拟设备。

九、全局避坑总结

  1. STP必须开启:Linux网桥不开STP会被上游交换机拦截流量,直接断网
  2. 边缘端口必配:解决STP 30秒侦听延迟,网桥激活秒联网
  3. Windows必须开IP转发:关防火墙没用,内核转发注册表+重启缺一不可
  4. 必须配置双向路由:Linux下行路由 + HCL上行回程路由,单配不通
  5. 优先桥接模式:相比KVM默认NAT,桥接可支持局域网所有设备访问模拟器

十、环境说明

  • 适配系统:Fedora / Ubuntu / Debian / Arch 全Linux发行版
  • 适用场景:KVM Windows + VirtualBox HCL 网络仿真实验
  • 最终效果:宿主机直接无缝管理所有192.168.56.0/24网段模拟设备