
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
}
}
나는 qdisc
via를 생성했습니다 :
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 필터를 처음 접했습니다. 그러므로 제가 뭔가 분명한 것을 놓치고 있다면 사과드립니다.
도움을 주시면 감사하겠습니다. 시간을 내주셔서 감사합니다!