Saya memiliki pembentuk yang bagus, dengan filter hash, dibangun di jembatan linux. Singkatnya, br0
koneksi external
dan internal
antarmuka fisik, paket yang ditandai VLAN dijembatani "secara transparan" (maksud saya, tidak ada antarmuka VLAN di sana).
Sekarang, kernel yang berbeda melakukannya secara berbeda. Saya bisa salah dengan rentang kernel yang tepat, maafkan saya. Terima kasih.
2.6.26
Jadi, dalam debian, 2.6.26 dan lebih tinggi (hingga 2.6.32, saya percaya) --- ini berfungsi:
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
Di sini, "kernel" cocok dengan dua byte dalam bidang "protokol" dengan 0x8100, tetapi menghitung awal paket ip sebagai "posisi nol" (maaf untuk bahasa Inggris saya, jika saya agak tidak jelas).
2.6.32
Sekali lagi, di debian (saya tidak membangun kernel vanilla), 2.6.32-5 --- ini berfungsi:
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
Di sini, "kernel" cocok dengan protokol yang sama, tetapi menghitung offset dari awal header protokol ini --- saya harus menambahkan 4 byte ke offset (20, bukan 16 untuk alamat dst). Tidak apa-apa, sepertinya lebih logis, bagi saya.
3.2.11, stabil terbaru sekarang
Ini berfungsi --- seolah-olah tidak ada tag 802.1q sama sekali:
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
Masalahnya adalah bahwa saya tidak dapat menemukan cara untuk mencocokkan tag 802.1q sejauh ini.
Mencocokkan tag 802.1q di masa lalu
Saya bisa melakukan ini sebelumnya sebagai berikut:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
Sekarang aku tidak dapat mencocokkan 802.1q tag dengan at 0
, at -2
, at -4
, at -6
atau seperti itu. Masalah utama yang saya miliki nol hit count --- filter ini tidak sedang diperiksa sama sekali, "protokol yang salah", dengan kata lain.
Tolong, siapa saja, bantu saya :-)
Terima kasih!
protocol all
memberi sayaRTNETLINK answers: Invalid argument
(kernel 3.3.4 di sini). Saya akan menguji ini dengan kernel yang lebih baru. Terima kasih.Saya harus melakukan ini. Saya menemukan bahwa jawaban yang disarankan oleh @Thusitha adalah cara yang benar untuk melakukannya untuk kernel baru.
Diuji dengan kernel Wheezy Debian 3.2.0-4 dan iproute (dari mana perintah tc berasal) versi 20120521-3 + b3
Inilah skrip lengkapnya,
tc filter
garis - garisnya hampir persis seperti yang ditentukan oleh @Thusithasumber
protocol all
memberi saya kesalahan dalam vanilla kernel. Saya harus memeriksanya lebih lanjut. Terima kasih.Saya akan merekomendasikan menggunakan wireshark untuk menangkap apa yang melalui antarmuka seperti yang terlihat di userspace, dan menggunakannya untuk menulis filter. Saya bertanya-tanya apakah mungkin antarmuka mencabut tag VLAN untuk beberapa alasan (meskipun dikonfigurasi untuk menjembatani secara transparan). Mungkin itu menambahkan tag tambahan atau sesuatu?
sumber
tcpdump
menunjukkan ID vlan di semua antarmukabridge
dan port.Anda dapat menandai paket vlan dengan ebtables .
Kemudian menerapkan pembentukan berdasarkan tanda. Etables dan iptables memiliki penandaan yang sama.
Belum melakukan ini sendiri. Jadi itu agak firasat.
sumber
Cobalah untuk mematikan
reorder_hdr
opsi pada antarmuka vlan. Jika opsi susun ulang tajuk diaktifkan, maka tag dari bingkai dihapus. Periksa dengan perintahip -d link list dev vlan_iface
.sumber
tc
filter dipanggil? Apakah Anda memiliki tautan ke peta atau seperti itu? Terima kasih!