Tôi có một máy ép đẹp, với bộ lọc băm, được xây dựng tại một cây cầu linux. Nói tóm lại, các br0
kết nối external
và internal
giao diện vật lý, các gói được gắn thẻ Vlan được bắc cầu "trong suốt" (ý tôi là, không có giao diện Vlan nào ở đó).
Bây giờ, các hạt nhân khác nhau làm điều đó khác nhau. Tôi có thể sai với phạm vi hạt nhân chính xác, xin vui lòng tha thứ cho tôi. Cảm ơn.
2.6,26
Vì vậy, trong debian, 2.6,26 trở lên (lên tới 2,6,32, tôi tin) --- điều này hoạt động:
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
Ở đây, "kernel" khớp hai byte trong trường "giao thức" với 0x8100, nhưng tính phần đầu của gói ip là "vị trí 0" (xin lỗi cho tiếng Anh của tôi, nếu tôi không rõ ràng một chút).
2.6.32
Một lần nữa, trong debian (Tôi chưa xây dựng nhân vanilla), 2.6.32-5 --- điều này hoạt động:
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
Ở đây, "kernel" khớp với cùng một giao thức, nhưng tính bù từ đầu tiêu đề của giao thức này --- Tôi phải thêm 4 byte để bù (20, không phải 16 cho địa chỉ dst). Nó ổn, có vẻ hợp lý hơn, đối với tôi.
3.2.11, ổn định mới nhất hiện nay
Điều này hoạt động --- như thể không có thẻ 802.1q nào cả:
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
Vấn đề là cho đến nay tôi không thể tìm ra cách nào khớp với thẻ 802.1q.
Phù hợp với thẻ 802.1q trước đây
Tôi có thể làm điều này trước đây như sau:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
Bây giờ tôi không thể để phù hợp với 802.1q tag với at 0
, at -2
, at -4
, at -6
hoặc như thế. Vấn đề chính mà tôi có zero hit đếm --- bộ lọc này không được kiểm tra ở tất cả, "sai giao thức", nói cách khác.
Xin mọi người, hãy giúp tôi :-)
Cảm ơn!
protocol all
cho tôiRTNETLINK answers: Invalid argument
(kernel 3.3.4 ở đây). Tôi sẽ kiểm tra điều này với các hạt nhân mới hơn. Cảm ơn bạn.