BPF 및 NTFables 패킷 마킹을 사용하는 TC 필터

BPF 및 NTFables 패킷 마킹을 사용하는 TC 필터

TC BPF 수신 프로그램을 만들었고 NTFables로 표시된 특정 패킷만 처리하도록 하고 싶습니다. 특정 패킷을 표시하는 NTFables 테이블은 다음과 같습니다.

table ip compressor_tc {
        chain prerouting {
                type nat hook prerouting priority -99; policy accept;
                ip daddr 10.50.0.3 tcp dport != ssh mark set 0x00000007
                ip saddr 10.50.0.4 udp dport 1337 mark set 0x00000008
        }
}

나는 qdiscvia를 생성했습니다 :

tc qdisc add dev ens18 root handle 1: prio 

7이제 표시된 패킷(이 경우 로 표시됨 ) 에만 적용하면서 TC BPF 프로그램을 첨부하려고 합니다 .

tc filter add dev ens18 parent 1:0 prio 1 handle 7 fw flowid 1:1 bpf obj testBPF_Prog.o section test

그러나 나는 다음을 받습니다:

root@test02:/home/dev/CompressorV2_TC/src# tc filter add dev ens18 parent 1:0 prio 1 handle 7 fw flowid 1:1 bpf obj testBPF_Prog.o section test
What is "bpf"?
Usage: ... fw [ classid CLASSID ] [ indev DEV ] [ action ACTION_SPEC ]
       CLASSID := Push matching packets to the class identified by CLASSID with format X:Y
                  CLASSID is parsed as hexadecimal input.
       DEV := specify device for incoming device classification.
       ACTION_SPEC := Apply an action on matching packets.
       NOTE: handle is represented as HANDLE[/FWMASK].
             FWMASK is 0xffffffff by default.

만약 내가한다면:

tc filter add dev ens18 parent 1:0 bpf obj testBPF_Prog.o section test

TC BPF 프로그램은 잘 연결되지만 모든 패킷을 검사합니다. 만약 내가한다면:

tc filter add dev ens18 parent 1:0 prio 1 handle 7 fw flowid 1:1

오류는 출력되지 않지만 BPF 프로그램은 연결되지 않습니다.

제 생각에는 TC 프로그램이 매개변수가 언제 끝나는지 모르는 것 같습니다 fw. 따라서 bpf매개변수가 매개변수의 일부라고 생각합니다 fw.

이러한 진술을 분리하는 것이 가능한지 궁금합니다. 그렇다면 이것이 제가 하려는 일을 달성할 수 있을까요? 온라인에서 문서를 살펴봤지만 이를 수행할 수 있는 방법을 찾지 못했습니다.

kernel 을 사용하는 Ubuntu 18.04 LTS VM에서 이 작업을 수행하고 있습니다 5.6.1-050601-generic.

저는 TC 필터를 처음 접했습니다. 그러므로 제가 뭔가 분명한 것을 놓치고 있다면 사과드립니다.

도움을 주시면 감사하겠습니다. 시간을 내주셔서 감사합니다!

관련 정보