
配置指导: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-N000 | Ubuntu 系统,作为 QEMU/KVM 和 libvirt 的宿主机 |
虚拟机 | AsterNOS-VPP | 8GB 内存,4核 CPU,64GB 磁盘 |
PC1 | Windows PC | LAN1 客户端,连接至 ens3f1 |
PC2 | Windows PC | LAN2 客户端,连接至 ens3f2 |
PC3 | Windows PC | LAN3 客户端,连接至 ens3f3 |
网络规划 | 接口 (AsterNOS) | IP 地址 / 网段 | 描述 |
WAN | Ethernet1 | 192.168.200.178/24 | 连接至上游路由器 192.168.200.1 |
LAN1 | Vlan100 | 10.0.1.0/24 | Subnet for PC1 and PC3, Gateway 10.0.1.1 |
LAN2 | Vlan200 | 10.0.2.0/24 | Subnet for PC2, Gateway 10.0.2.1 |
软件:
必须从星融元官方渠道获取 sonic-vpp.img 虚拟机镜像文件。请参考:【链接待更新】
4.4 配置步骤:Ubuntu 主机
- BIOS/UEFI 设置:
- 目的:在固件层面启用 IOMMU 功能,使操作系统能够使用此硬件特性。
- 操作:重启主机并进入 BIOS/UEFI 设置界面。确保同时启用 Intel(R) VT-d 和 Intel(R) Virtualization Technology。
- 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
- 配置 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
- 验证主机配置:重启后,在主机终端中运行以下命令:
lspci -nnk | grep -iA3 02:00
- 预期结果:所有四个网卡(从
02:00.0
到02:00.3
)的Kernel driver in use:
字段现在应显示为vfio-pci
。

4.5 启动虚拟机
4.5.1 方法 A:使用 QEMU 手动启动(适用于快速测试)
此方法通过单条命令直接启动虚拟机,操作简单便捷,适合临时测试与验证。
- 启动虚拟机:在主机上运行以下 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
- 接口映射:
-device
参数的顺序决定了 AsterNOS 虚拟机内部的接口名称。在此示例中:
QEMU -device 参数 | PCI 地址(主机) | 接口名称(AsterNOS 虚拟机) | 规划用途 |
---|---|---|---|
host=02:00.0 | 02:00.0 | Ethernet1 | WAN 端口 |
host=02:00.1 | 02:00.1 | Ethernet2 | LAN 端口 (PC1) |
host=02:00.2 | 02:00.2 | Ethernet3 | LAN 端口 (PC2) |
host=02:00.3 | 02:00.3 | Ethernet4 | LAN 端口 (PC3) |
⚠️ 重要提示:网络端口顺序
AsterNOS-VPP 系统内部识别的接口名称(如 Ethernet1、Ethernet2 等)取决于 QEMU 启动命令中 -device
参数的顺序(即 PCI 地址的排列顺序)。该顺序可能与服务器机箱后面板上网络端口的物理排列顺序(例如从上至下、从左至右)不一致。
强烈建议:在进行后续配置前,请仅连接一根网线(例如 WAN 端口),启动虚拟机后使用 show
interface status
命令观察哪个以太网接口状态变为 up。通过此方法可准确映射物理端口与逻辑端口,避免因错误接线导致配置失败。

4.5.2 方法 B:使用 libvirt 实现持久化启动(推荐)
此方法通过 libvirt 管理虚拟机,可实现持久化运行及开机自动启动。
- 创建虚拟机:在主机上执行以下命令。该命令执行后,虚拟机将自动完成定义并启动。您可在当前终端中直接观察启动过程及登录提示。
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
- 设置虚拟机开机自启:成功创建虚拟机后,在主机上打开新终端并运行以下命令,将其设置为开机自动启动:
sudo virsh autostart AsterNOS
4.6 访问并配置 AsterNOS-VPP 虚拟机
无论您采用哪种方式启动虚拟机,后续配置步骤完全一致。
- 访问虚拟机控制台:
- 若使用方式 A(QEMU),虚拟机控制台已显示在当前终端中
- 若使用方式 B(libvirt),您可随时通过主机终端执行以下命令连接至虚拟机控制台:
sudo virsh console AsterNOS
- 登录系统并进入配置模式:
在登录提示符处使用默认凭据访问系统:
- 用户名:admin
- 密码:asteros
- 分步配置与验证:
- 步骤 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 整体测试计划
我们将按照以下测试序列进行:
- 二层交换性能(VLAN 内):使用
iperf3
测试 PC1 与 PC3 之间的传输速率,以验证同一 VLAN 内的交换性能。 - 三层路由性能(VLAN 间):使用
iperf3
测试 PC1 与 PC2 之间的传输速率,以验证不同 VLAN 之间的路由性能,并使用路由器侧命令进行监控。 - 外部连通性(NAT 验证):使用
ping
测试内部 PC 能否访问公共互联网,以验证基本的 NAT 连通性。
5.2 二层交换性能测试(PC1 <-> PC3)
- 目的:验证虚拟路由器在同一 VLAN 内的二层数据转发能力。由于 PC1 和 PC3 同属 VLAN 100,它们之间的通信由二层交换处理。
- 步骤:
- 在 PC1 (
10.0.1.10
) 上,打开命令提示符并确保运行 iperf3 服务器:iperf3 -s
。 - 在 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)之间的通信需要经过三层路由。
- 步骤:
- 在 PC1 (
10.0.1.10
) 上,打开命令提示符并确保运行 iperf3 服务器:iperf3 -s
。 - 在 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 连通性测试:
- 在 PC1(VLAN 100)上执行
ping 8.8.8.8
。您应当能收到成功的回复。

- 在 PC2(VLAN 200)上执行
ping 8.8.8.8
。您同样应当能收到成功的回复。

6. 结论
本文档充分证明,AsterNOS-VPP 成功融合了成熟的 SONiC 生态与高性能 VPP 数据平面。
通过基于标准 x86 服务器部署虚拟机并采用 PCI 直通技术,用户能够快速构建支持线速二层/三层转发及 NAT 功能的企业级虚拟网关。对于追求高性能、灵活性及成本效益的网络环境而言,AsterNOS-VPP 无疑是理想解决方案。