Skip to main content
开放网络的先行者与推动者—星融元
加入我们技术支持(Support)  TEL:(+86)4000989811
VPP、SONiC

配置指导:AsterNOS-VPP 部署指南

前言

目标读者:本文档主要面向网络工程师、系统管理员以及想在虚拟化环境中构建高性能网络测试平台的开发人员。

前置要求,建议读者具备以下基础知识:

  • Linux 基础:熟练掌握 Linux 命令行操作,包括文件编辑与系统管理。
  • 网络基础:理解 L2/L3 网络概念,如 IP 地址、子网掩码、网关和 VLAN。
  • 虚拟化概念:了解虚拟机与宿主系统的基本原理,并对 QEMU/KVM 有一定认识。

1. 目标

本文档提供了在Ubuntu主机系统上使用QEMU/KVM和PCI直通技术配置AsterNOS-VPP虚拟机的详细指南。最终目标是构建和验证一个支持VLAN间路由和互联网访问NAT的高性能虚拟网关。

2. 适用型号和版本

硬件要求:

  • 宿主机:ThinkCentre-M8600t-N000(仅为示例型号)。
  • 网卡:Intel Corporation I350 千兆网络连接(4 端口)。
  • CPU:宿主机 CPU 必须支持 sse4 指令集。可通过 lscpu 命令验证,确保输出中包含 sse4
配图

软件要求:

  • 主机操作系统:Ubuntu Linux 24.04
  • 虚拟化:QEMU/KVM 8.2.2,libvirt 10.0.0
  • 虚拟机系统:AsterNOS-VPP

3. 功能概述

  • PCI 直通:一种虚拟化技术,允许虚拟机直接、独占地控制物理主机的硬件设备,提供接近原生的性能。
  • VLAN 间路由:路由器的核心功能,通过为不同 VLAN 创建虚拟接口(网关),实现不同子网之间的流量转发。
  • 网络地址转换(NAT):允许私有网络上的设备通过共享路由器的公共 IP 地址来访问互联网。

4. 典型配置示例:双子网路由和 NAT

4.1 需求

  • 部署一台 AsterNOS-VPP 虚拟路由器,该路由器拥有 1 个专用的 WAN 口和多个专用的物理 LAN 口。
  • 将 LAN 口划分为两个不同的 VLAN,每个 VLAN 连接到一台独立的 PC。
  • 确保两个子网中的 PC 都能通过路由器的 NAT 功能访问互联网。
  • 确保两个子网中的 PC 能够相互通信。

4.2 拓扑结构

物理连接:

  • 主机接口 ens3f0 (PCI 地址 01:00.0) -> 上行路由器 (WAN)
  • 主机接口 ens3f1 (PCI 地址 01:00.1) -> PC1 (LAN1)
  • 主机接口 ens3f2 (PCI 地址 01:00.2) -> PC2 (LAN2)
  • 主机接口 ens3f3 (PCI 地址 01:00.3) -> PC3 (LAN3)
配图

4.3 环境和软件获取

设备类型型号/系统角色/描述
主机ThinkCentre-M8600t-N000Ubuntu 系统,作为 QEMU/KVM 和 libvirt 的宿主机
虚拟机AsterNOS-VPP8GB 内存,4核 CPU,64GB 磁盘
PC1Windows PCLAN1 客户端,连接至 ens3f1
PC2Windows PCLAN2 客户端,连接至 ens3f2
PC3Windows PCLAN3 客户端,连接至 ens3f3
网络规划接口 (AsterNOS)IP 地址 / 网段描述
WANEthernet1192.168.200.178/24连接至上游路由器 192.168.200.1
LAN1Vlan10010.0.1.0/24Subnet for PC1 and PC3, Gateway 10.0.1.1
LAN2Vlan20010.0.2.0/24Subnet for PC2, Gateway 10.0.2.1

软件:

必须从星融元官方渠道获取 sonic-vpp.img 虚拟机镜像文件。请参考:【链接待更新】

4.4 配置步骤:Ubuntu 主机

  1. BIOS/UEFI 设置:
  • 目的:在固件层面启用 IOMMU 功能,使操作系统能够使用此硬件特性。
  • 操作:重启主机并进入 BIOS/UEFI 设置界面。确保同时启用 Intel(R) VT-d 和 Intel(R) Virtualization Technology。
  1. GRUB 参数配置:
  • 目的:指示 Linux 内核启用并使用已在固件中开启的 IOMMU 功能。
# 1. Edit the GRUB configuration file
sudo nano /etc/default/grub
# 2. Find the line starting with GRUB_CMDLINE_LINUX_DEFAULT and add "intel_iommu=on iommu=pt" inside the quotes.
 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on iommu=pt"
# 3.  After saving the file, update the GRUB configuration
sudo update-grub
  1. 配置 VFIO 驱动:
  • 目的:使用专用的 vfio-pci 驱动程序来接管准备用于直通的物理网卡。这将阻止主机操作系统加载其默认驱动,从而使网卡可供虚拟机使用。
  • 操作步骤:

A. 查找网卡的设备 ID:

    # This command lists all network devices and their IDs
    lspci -nn | grep -i ethernet

    注意:[8086:1521] 是设备 ID。如果您的网卡型号不同,请将后续命令中的 8086:1521 替换为您查到的实际 ID。

    B. 配置驱动绑定与黑名单:

      # Tell the system that devices with ID 8086:1521 should be managed by vfio-pci
      echo "options vfio-pci ids=8086:1521" | sudo tee /etc/modprobe.d/vfio.conf
      # Prevent Ubuntu from loading the default 'igb' driver for this NIC to avoid conflicts
      echo "blacklist igb" | sudo tee /etc/modprobe.d/blacklist-igb.conf

      C. 强制预加载 VFIO 模块:编辑 /etc/initramfs-tools/modules 文件,在末尾添加以下行:

      vfio
      vfio_iommu_type1
      vfio_pci
      vfio_virqfd

      D. 更新配置并重启:

      sudo update-initramfs -u
      sudo reboot
      1. 验证主机配置:重启后,在主机终端中运行以下命令:lspci -nnk | grep -iA3 02:00
      • 预期结果:所有四个网卡(从 02:00.002:00.3)的 Kernel driver in use: 字段现在应显示为 vfio-pci
      配图

      4.5 启动虚拟机

      4.5.1 方法 A:使用 QEMU 手动启动(适用于快速测试)

      此方法通过单条命令直接启动虚拟机,操作简单便捷,适合临时测试与验证。

      1. 启动虚拟机:在主机上运行以下 QEMU 命令。
      sudo qemu-system-x86_64 \
        -enable-kvm \
        -m 8192 \
        -smp 4 \
        -cpu host \
        -drive file=/var/lib/libvirt/images/sonic-vpp.img,if=virtio,format=qcow2 \ # Please replace this with the actual path to your image file
        -device vfio-pci,host=02:00.0,id=wan-nic \
        -device vfio-pci,host=02:00.1,id=lan-nic1 \
        -device vfio-pci,host=02:00.2,id=lan-nic2 \
        -device vfio-pci,host=02:00.3,id=lan-nic3 \
        -nographic \
        -serial mon:stdio
      1. 接口映射:-device 参数的顺序决定了 AsterNOS 虚拟机内部的接口名称。在此示例中:
      QEMU -device 参数PCI 地址(主机)接口名称(AsterNOS 虚拟机)规划用途
      host=02:00.002:00.0Ethernet1WAN 端口
      host=02:00.102:00.1Ethernet2LAN 端口 (PC1)
      host=02:00.202:00.2Ethernet3LAN 端口 (PC2)
      host=02:00.302:00.3Ethernet4LAN 端口 (PC3)

      ⚠️ 重要提示:网络端口顺序
      AsterNOS-VPP 系统内部识别的接口名称(如 Ethernet1、Ethernet2 等)取决于 QEMU 启动命令中 -device 参数的顺序(即 PCI 地址的排列顺序)。该顺序可能与服务器机箱后面板上网络端口的物理排列顺序(例如从上至下、从左至右)不一致。

      强烈建议:在进行后续配置前,请仅连接一根网线(例如 WAN 端口),启动虚拟机后使用 show interface status 命令观察哪个以太网接口状态变为 up。通过此方法可准确映射物理端口与逻辑端口,避免因错误接线导致配置失败。

      4.5.2 方法 B:使用 libvirt 实现持久化启动(推荐)

      此方法通过 libvirt 管理虚拟机,可实现持久化运行及开机自动启动。

      1. 创建虚拟机:在主机上执行以下命令。该命令执行后,虚拟机将自动完成定义并启动。您可在当前终端中直接观察启动过程及登录提示。
      sudo virt-install \
      --name AsterNOS \
      --virt-type kvm \
      --memory 8192 \
      --vcpus 4 \
      --cpu host-passthrough \
      --disk path=/var/lib/libvirt/images/sonic-vpp.img,bus=virtio \ # Please replace this with the actual path to your image file
      --import \
      --os-variant debian11 \
      --network none \
      --host-device 02:00.1 \
      --host-device 02:00.2 \
      --host-device 02:00.3 \
      --host-device 02:00.0 \
      --nographics
      1. 设置虚拟机开机自启:成功创建虚拟机后,在主机上打开新终端并运行以下命令,将其设置为开机自动启动:
      sudo virsh autostart AsterNOS

      4.6 访问并配置 AsterNOS-VPP 虚拟机

      无论您采用哪种方式启动虚拟机,后续配置步骤完全一致。

      1. 访问虚拟机控制台
      • 若使用方式 A(QEMU),虚拟机控制台已显示在当前终端中
      • 若使用方式 B(libvirt),您可随时通过主机终端执行以下命令连接至虚拟机控制台:
      sudo virsh console AsterNOS
      1. 登录系统并进入配置模式

      在登录提示符处使用默认凭据访问系统:

      • 用户名:admin
      • 密码:asteros
      1. 分步配置与验证
      • 步骤 A:启动命令行界面并进入配置模式
      sonic-cli
      configure terminal
      • 步骤B:配置WAN接口
      interface ethernet 1
        description WAN_Port
        ip address 192.168.200.178/24
        # Assign this interface to NAT zone 1. By convention, the outside (WAN) interface is a non-zero zone, and inside interfaces are zone 0.
        nat-zone 1
      exit
      • 步骤C:配置VLAN及网关接口
      vlan 100
      exit
      vlan 200
      exit
      
      interface vlan 100
        description LAN1_Gateway_for_PC1_and_PC3
        ip address 10.0.1.1/24
      exit
      
      interface vlan 200
        description LAN2_Gateway_for_PC2
        ip address 10.0.2.1/24
      exit
      • 步骤D:将物理LAN端口划分至VLAN
      interface ethernet 2 # Connects to PC1
        description Port_for_PC1
        switchport access vlan 100
      exit
      
      interface ethernet 3 # Connects to PC2
        description Port_for_PC2
        switchport access vlan 200
      exit
      
      interface ethernet 4 # Connects to PC3
        description Port_for_PC3
        switchport access vlan 100
      exit
      • 步骤E:配置路由与NAT
      # Configure the default route to point to the upstream router
      ip route 0.0.0.0/0 192.168.200.1
      # Enable NAT globally
      nat enable
      # Create a NAT pool named 'lan_pool' using the router's public IP
      nat pool lan_pool 192.168.200.178
      # Bind the pool to a policy named 'lan_binding' to apply NAT to all traffic crossing zones
      nat binding lan_binding lan_pool
      • 步骤F:保存配置
      write
      • 步骤G:验证配置
      show ip interfaces
      show ip route
      show vlan summary
      show nat config

      注意:请确保接口的管理/运行状态显示为 up/up。

      配图
      配图
      配图
      配图

      4.7 客户端PC配置步骤

      • PC1:设置IP地址为10.0.1.10,子网掩码为24位,网关为10.0.1.1,DNS服务器为8.8.8.8
      • PC2:设置IP地址为10.0.2.10,子网掩码为24位,网关为10.0.2.1,DNS服务器为8.8.8.8
      • PC3:设置IP地址为10.0.1.11,子网掩码为24位,网关为10.0.1.1,DNS服务器为8.8.8.8

      5. 功能与性能验证

      本章将通过一系列测试,全面验证虚拟路由器的核心功能和性能指标是否符合预期。

      5.1 整体测试计划

      我们将按照以下测试序列进行:

      1. 二层交换性能(VLAN 内):使用 iperf3 测试 PC1 与 PC3 之间的传输速率,以验证同一 VLAN 内的交换性能。
      2. 三层路由性能(VLAN 间):使用 iperf3 测试 PC1 与 PC2 之间的传输速率,以验证不同 VLAN 之间的路由性能,并使用路由器侧命令进行监控。
      3. 外部连通性(NAT 验证):使用 ping 测试内部 PC 能否访问公共互联网,以验证基本的 NAT 连通性。

      5.2 二层交换性能测试(PC1 <-> PC3)

      • 目的:验证虚拟路由器在同一 VLAN 内的二层数据转发能力。由于 PC1 和 PC3 同属 VLAN 100,它们之间的通信由二层交换处理。
      • 步骤
      1. 在 PC1 (10.0.1.10) 上,打开命令提示符并确保运行 iperf3 服务器:iperf3 -s
      2. 在 PC3 (10.0.1.11) 上,打开命令提示符并执行客户端测试:iperf3 -c 10.0.1.10 -t 30
      • 结果分析:测试速率应稳定在 950 Mbits/秒 左右,达到千兆线速。
      配图

      5.3 三层路由性能测试(PC1 <-> PC2)

      • 目的:验证虚拟路由器在不同 VLAN 之间的三层路由性能。PC1(VLAN 100)与 PC2(VLAN 200)之间的通信需要经过三层路由。
      • 步骤:
      1. 在 PC1 (10.0.1.10) 上,打开命令提示符并确保运行 iperf3 服务器:iperf3 -s
      2. 在 PC2 (10.0.2.10) 上,打开命令提示符并执行客户端测试:iperf3 -c 10.0.1.10 -t 30
      • 结果分析:测试速率同样应达到约 950 Mbits/秒 的线速性能。
      配图
      • 路由器端验证:在进行 iperf3 测试期间,您可以通过在 AsterNOS 设备上执行 show counters interface 命令,实时监控接口统计信息。

      5.4 互联网访问功能测试

      • 目的:验证 NAT 功能对所有内部 VLAN 均生效。
      • Ping 连通性测试:
      1. PC1(VLAN 100)上执行 ping 8.8.8.8。您应当能收到成功的回复。
      配图
      1. PC2(VLAN 200)上执行 ping 8.8.8.8。您同样应当能收到成功的回复。
      配图

      6. 结论

      本文档充分证明,AsterNOS-VPP 成功融合了成熟的 SONiC 生态与高性能 VPP 数据平面。

        通过基于标准 x86 服务器部署虚拟机并采用 PCI 直通技术,用户能够快速构建支持线速二层/三层转发及 NAT 功能的企业级虚拟网关。对于追求高性能、灵活性及成本效益的网络环境而言,AsterNOS-VPP 无疑是理想解决方案。

        A-lab-企业园区网, A-lab-部署验证


        星融元Asterfusion

        开放网络的先行者与推动者 asterfusion.com

        对星融元产品感兴趣?

        立即联系!

        返回顶部

        © 星融元数据技术(苏州)有限公司 苏ICP备17070048号-2