해시 필터링을 사용하여 Linux 브리지에 구축 된 멋진 셰이퍼가 있습니다. 즉, br0
연결 external
및 internal
물리적 인터페이스, VLAN 태그가 지정된 패킷은 "투명하게"브리지됩니다 (즉, VLAN 인터페이스가 없음).
이제 다른 커널이 다르게 작동합니다. 정확한 커널 버전 범위에 문제가있을 수 있습니다. 용서해주십시오. 감사.
2.6.26
따라서 데비안에서 2.6.26 이상 (최대 2.6.32까지) --- 이것은 작동합니다.
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200
여기서 "kernel"은 "protocol"필드에서 2 바이트를 0x8100과 일치하지만 ip 패킷의 시작 부분을 "zero position"으로 계산합니다.
2.6.32
다시, 데비안에서는 (바닐라 커널을 만들지 않았습니다) 2.6.32-5 ---이 작동합니다 :
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 at 20 flowid 1:200
여기서 "커널"은 프로토콜과 동일하지만이 프로토콜 헤더의 시작 부분부터 오프셋을 계산합니다. --- 오프셋에 4 바이트를 추가해야합니다 (dst 주소의 경우 16이 아니라 20). 괜찮아요, 더 논리적으로 보입니다.
3.2.11, 최신 안정
이것은 802.1q 태그가 전혀없는 것처럼 작동합니다.
tc filter add dev internal protocol ip parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200
문제는 지금까지 802.1q 태그와 일치하는 방법을 찾을 수 없다는 것입니다.
과거에 일치하는 802.1q 태그
다음과 같이 전에이 작업을 수행 할 수 있습니다.
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
지금은와 802.1Q 태그와 일치 할 수없는거야 at 0
, at -2
, at -4
, at -6
또는 같은 것을. 적중 횟수 가 0 인 주된 문제는 ---이 필터는 전혀 "잘못된 프로토콜"입니다.
제발, 누구든지 도와주세요 :-)
감사!
protocol all
나에게 준다RTNETLINK answers: Invalid argument
(여기에 3.3.4 커널). 최신 커널로 이것을 테스트 할 것입니다. 감사합니다.