VPP+DPDK配置问题:同VM及跨VM接口Ping不通求助
VPP+DPDK网络连通性故障排查及解决
场景1:同一VirtualBox虚拟机内VPP-DPDK接口与内核接口互Ping不通
已完成配置
- 兼容DPDK驱动的网络设备:
0000:00:08.0 '82540EM Gigabit Ethernet Controller 100e' drv=vfio-pci unused=e1000,uio_pci_generic 0000:00:09.0 '82540EM Gigabit Ethernet Controller 100e' drv=vfio-pci unused=e1000,uio_pci_generic
- 使用内核驱动的网络设备:
0000:00:03.0 '82540EM Gigabit Ethernet Controller 100e' if=enp0s3 drv=e1000 unused=vfio-pci,uio_pci_generic *Active*
- VPP启动配置文件startup1.conf:
osboxes@osboxes:~$ cat startup1.conf unix { nodaemon log /var/log/vpp/vpp.log cli-listen /run/vpp/cli-vpp1.sock } api-segment { prefix vpp1 } dpdk { dev 0000:00:08.0 dev 0000:00:09.0 socket-mem 1024 }
- 系统IP配置:
osboxes@osboxes:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:47:b5:56 brd ff:ff:ff:ff:ff:ff inet 192.168.1.129/24 brd 192.168.1.255 scope global dynamic enp0s3 valid_lft 86040sec preferred_lft 86040sec inet6 fd02:707a:a9b:c000:a00:27ff:fe47:b556/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 6958sec preferred_lft 3358sec inet6 fe80::a00:27ff:fe47:b556/64 scope link valid_lft forever preferred_lft forever
- VPP接口配置:
vpp# set interface state GigabitEthernet0/8/0 up vpp# set interface ip address GigabitEthernet0/8/0 172.28.128.5/24 root@osboxes:/home/osboxes# vppctl sh int address GigabitEthernet0/8/0 GigabitEthernet0/8/0 (up): L3 172.28.128.5/24 root@osboxes:/home/osboxes# vppctl sh hardware GigabitEthernet0/8/0 Name Idx Link Hardware GigabitEthernet0/8/0 1 up GigabitEthernet0/8/0 Link speed: 1 Gbps RX Queues: queue thread mode 0 main (0) polling TX Queues: TX Hash: [name: hash-eth-l34 priority: 50 description: Hash ethernet L34 headers] queue shared thread(s) 0 no 0 Ethernet address 08:00:27:68:9f:1e Intel 82540EM (e1000) carrier up full duplex max-frame-size 9022 flags: admin-up maybe-multiseg tx-offload intel-phdr-cksum rx-ip4-cksum int-supported rx: queues 1 (max 2), desc 1024 (min 32 max 4096 align 8) tx: queues 1 (max 2), desc 1024 (min 32 max 4096 align 8) pci: device 8086:100e subsystem 8086:001e address 0000:00:08.00 numa 0 max rx packet len: 16128 promiscuous: unicast off all-multicast on vlan offload: strip off filter off qinq off rx offload avail: vlan-strip ipv4-cksum udp-cksum tcp-cksum vlan-filter scatter keep-crc rx offload active: ipv4-cksum scatter tx offload avail: vlan-insert ipv4-cksum udp-cksum tcp-cksum multi-segs tx offload active: ipv4-cksum udp-cksum tcp-cksum multi-segs rss avail: none rss active: none tx burst function: (not available) rx burst function: (not available)
- Ping测试结果:
root@osboxes:/home/osboxes# ping 172.28.128.5 PING 172.28.128.5 (172.28.128.5) 56(84) bytes of data. ^C --- 172.28.128.5 ping statistics --- 4 packets transmitted, 0 received, 100% packet loss, time 3501ms root@osboxes:/home/osboxes# ping 172.28.128.5 -I enp0s3 PING 172.28.128.5 (172.28.128.5) from 192.168.1.129 enp0s3: 56(84) bytes of data. ^C --- 172.28.128.5 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2439ms root@osboxes:/home/osboxes# vppctl sh error Count Node Reason Severity
- VPP Ping内核接口结果:
root@osboxes:/home/osboxes# vppctl ping 192.168.1.129 Failed: no egress interface Failed: no egress interface Failed: no egress interface Failed: no egress interface ^C
故障原因
- VPP接管的网卡(00:08.0)与内核网卡(00:03.0)是独立PCI设备,VirtualBox中未配置为同一网络域,二层链路不连通。
- 内核路由表无172.28.128.0/24网段路由,VPP路由表无192.168.1.0/24网段路由。
- VPP与内核网络栈未建立直接连通通道。
解决方法
方法一:统一网卡网络域(VirtualBox配置)
- 关闭虚拟机,在VirtualBox设置中,将00:08.0和00:03.0对应的网卡均设置为内部网络,指定同一网络名称(如
intnet1)。 - 启动虚拟机后,调整IP为同一网段(如内核enp0s3改为172.28.128.6/24),无需额外路由即可互ping。
方法二:创建VPP TAP接口连接内核网络
- 在VPP中创建TAP接口并配置:
vppctl create tap host-ip 192.168.1.130/24 host-if-name vpp-tap0 vppctl set interface state tap0 up vppctl set interface ip address tap0 192.168.1.130/24
- 内核侧添加到VPP网段的路由:
ip route add 172.28.128.0/24 via 192.168.1.130
- VPP侧添加到内核网段的路由:
vppctl ip route add 192.168.1.0/24 via 192.168.1.129
- 测试互ping,此时内核可ping通172.28.128.5,VPP可ping通192.168.1.129。
场景2:两台不同VirtualBox虚拟机的VPP-DPDK接口互Ping不通
关键配置
- 第二台VM兼容DPDK驱动的网络设备:
0000:00:08.0 '82540EM Gigabit Ethernet Controller 100e' drv=vfio-pci unused=e1000,uio_pci_generic 0000:00:09.0 '82540EM Gigabit Ethernet Controller 100e' drv=vfio-pci unused=e1000,uio_pci_generic
- 第二台VM使用内核驱动的网络设备:
0000:00:03.0 '82540EM Gigabit Ethernet Controller 100e' if=enp0s3 drv=e1000 unused=vfio-pci,uio_pci_generic *Active*
- 第二台VM VPP接口配置:
root@osboxes:/home/osboxes# vppctl set interface state GigabitEthernet0/8/0 up root@osboxes:/home/osboxes# vppctl set interface ip address GigabitEthernet0/8/0 172.28.128.10/24 root@osboxes:/home/osboxes# vppctl sh int GigabitEthernet0/8/0 Name Idx State MTU (L3/IP4/IP6/MPLS) Counter Count GigabitEthernet0/8/0 1 up 9000/0/0/0
- Ping测试结果:
root@osboxes:/home/osboxes# ping 172.28.128.10 PING 172.28.128.10 (172.28.128.10) 56(84) bytes of data. ^C --- 172.28.128.5 ping statistics --- 4 packets transmitted, 0 received, 100% packet loss, time 3501ms root@osboxes:/home/osboxes# ping 172.28.128.5 -I enp0s3 PING 172.28.128.10 (172.28.128.10) from 192.168.1.127 enp0s3: 56(84) bytes of data. ^C --- 172.28.128.10 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2439ms
故障原因
- 两台VM的VPP接管网卡(00:08.0)在VirtualBox中未配置为同一网络域,二层无法互通。
- 可能存在ARP未学习或路由缺失(同一网段下路由默认存在,主要为二层问题)。
解决方法
- 配置VirtualBox网卡网络模式:
- 关闭两台虚拟机,将各自的00:08.0对应的网卡设置为内部网络,指定同一网络名称(如
intnet2);或设置为桥接模式,连接到同一物理网络。
- 关闭两台虚拟机,将各自的00:08.0对应的网卡设置为内部网络,指定同一网络名称(如
- 确认VPP接口状态:
- 在两台VM的VPP中执行
vppctl sh int,确保接口状态为up,链路状态正常。
- 在两台VM的VPP中执行
- 检查ARP表:
- 在第一台VM的VPP中执行
vppctl sh ip arp,查看是否存在172.28.128.10的ARP条目。若缺失,执行vppctl ping 172.28.128.10 repeat 1触发ARP学习。
- 在第一台VM的VPP中执行
- 验证连通性:
- 再次执行互ping测试,若仍不通,检查两台VM的VPP接口MTU是否一致(当前均为9000,符合要求),或在VirtualBox中禁用网卡的硬件加速选项。
内容的提问来源于stack exchange,提问作者Esaëe Njongssi
相关产品推荐
相关产品推荐

