之前有人在这个网站 [1] 上问过类似的问题,但似乎没有回答我的问题。因此,我决定针对我的环境问同样的问题。
我使用的是单网卡的 Linode Ubuntu 服务器,昨天尝试初始化 DPDK,它确实安装了内核驱动程序并绑定了网卡,然后切断了我的 SSH。从那时起我就无法重新连接,我继续重新启动服务器,然后我又能进入服务器了。
我的网络设备如 DPDK 状态输出所示,
dpdk-devbind -s
Network devices using kernel driver
===================================
0000:00:04.0 'Virtio network device 1000' if=eth0 drv=virtio-pci unused=vfio-pci *Active*
答案1
由于eth0
是默认且唯一的接口,当前 ssh 通过内核在其上运行。因此,从内核中删除接口并绑定到 DPDk 将导致连接丢失。
正如指出的答案,https://superuser.com/questions/1204835/binding-dpdk-to-a-nic-without-loosing-connection/1546752#1546752
有一个可用的选项
- 在虚拟机内创建虚拟TAP接口
- 创建 eBPF-XDP 代码,通过 XDP-REDIRECT 将所需数据包重定向到 TAP 接口,而数据包内核的其余部分则使用 XDP-PASS
- 使用 PCAP-PMD 和 eal-arg
--vdev=net_pcap0,iface=[virtual tap interface]
另一个选择是
- 启动 DPDK 应用程序
--vdev=net_tap0,iface=[DPDK tap interface name]
- 然后加载 eBPF-XDP,将所需的数据包重定向到 DPDK-TAP 接口。
因此,无需丢失任何连接,就可以利用来自 virtio 的流量。
注意:内核应该构建并支持 virtio 的 eBPF-XDP。
[编辑-1]
- 参考代码:
https://github.com/vipinpv85/DPDK-DDoS/blob/master/test/ebpf/l2_port_fwd.c
根据需要进行修改。 - 如何构建:`https://github.com/vipinpv85/DPDK-DDoS/blob/master/README.md``