
비슷한 질문이 이전에 이 사이트 [1]에서 요청된 적이 있지만 내 문제에 대해 실용적인 답변은 없는 것 같습니다. 그래서 나는 내 환경에도 같은 질문을 하기로 결정했다.
단일 NIC가 있는 Linode Ubuntu 서버를 사용하고 있으며 어제 DPDK를 초기화하려고 시도했지만 커널 드라이버를 설치하고 NIC를 비닝한 다음 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
사용 가능한 옵션이 있습니다
- VM 내부에 가상 TAP 인터페이스 생성
- 원하는 패킷을 XDP-REDIRECT를 통해 TAP 인터페이스로 리디렉션하고 나머지 패킷 커널은 XDP-PASS로 리디렉션하는 eBPF-XDP 코드를 생성합니다.
- PCAP-PMD 및 eal-arg 사용
--vdev=net_pcap0,iface=[virtual tap interface]
다른 옵션은
- 다음으로 DPDK 애플리케이션을 시작하세요.
--vdev=net_tap0,iface=[DPDK tap interface name]
- 그런 다음 원하는 패킷을 DPDK-TAP 인터페이스로 리디렉션하는 eBPF-XDP를 로드합니다.
따라서 연결을 잃지 않고 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``