Ich habe einen netten Shaper mit Hash-Filter, der auf einer Linux-Bridge gebaut wurde. Kurz gesagt, br0
Verbindungen external
und internal
physische Schnittstellen, VLAN-gekennzeichnete Pakete werden "transparent" überbrückt (ich meine, es gibt keine VLAN-Schnittstellen).
Jetzt machen es verschiedene Kernel anders. Ich kann mit genauen Kernel-Versionsbereichen falsch liegen, bitte verzeihen Sie mir. Vielen Dank.
2.6.26
Also, in debian 2.6.26 und höher (bis 2.6.32, glaube ich) --- das funktioniert:
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
Hier stimmt "Kernel" mit zwei Bytes im Feld "Protokoll" mit 0x8100 überein, zählt aber den Anfang des IP-Pakets als "Null-Position" (Entschuldigung für mein Englisch, wenn ich etwas unklar bin).
2.6.32
Wieder in Debian (ich habe keinen Vanille-Kernel erstellt), 2.6.32-5 --- das funktioniert:
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
Hier stimmt "Kernel" mit dem Protokoll überein, zählt jedoch ab dem Anfang des Protokoll-Headers versetzt --- Ich muss 4 Bytes zum Versatz addieren (20, nicht 16 für dst-Adresse). Es ist in Ordnung, scheint logischer, was mich betrifft.
3.2.11, der neueste Stall jetzt
Dies funktioniert --- als gäbe es überhaupt kein 802.1q-Tag:
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
Das Problem ist, dass ich bisher keine Möglichkeit gefunden habe, mit dem 802.1q-Tag übereinzustimmen.
Übereinstimmendes 802.1q-Tag in der Vergangenheit
Ich könnte das vorher so machen:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
Jetzt bin ich nicht in der Lage 802.1Q - Tag mit übereinstimmen at 0
, at -2
, at -4
, at -6
oder so. Das Hauptproblem, dass ich null Treffer habe, zählt --- dieser Filter wird überhaupt nicht überprüft, "falsches Protokoll", mit anderen Worten.
Bitte, irgendjemand, hilf mir :-)
Vielen Dank!
quelle
protocol all
gibt mirRTNETLINK answers: Invalid argument
(3.3.4 Kernel hier). Ich werde dies mit neueren Kerneln testen. Vielen Dank.Ich musste genau das tun. Ich fand, dass die von @Thusitha vorgeschlagene Antwort der richtige Weg war, dies für neue Kernel zu tun.
Getestet mit dem Debian Wheezy-Kernel 3.2.0-4 und der iproute-Version (von der der Befehl tc stammt) 20120521-3 + b3
Hier ist das komplette Skript, wobei die
tc filter
Zeilen fast genau den Angaben von @Thusitha entsprechenquelle
protocol all
gab mir einen Fehler im Vanillekern. Ich sollte es mehr überprüfen. Vielen Dank.Ich würde empfehlen, wireshark zu verwenden, um zu erfassen, was über die Benutzeroberfläche als im Benutzerbereich sichtbar angezeigt wird, und dies zum Schreiben des Filters zu verwenden. Ich frage mich, ob die Schnittstelle möglicherweise aus irgendeinem Grund die VLAN-Tags entfernt (obwohl sie so konfiguriert ist, dass sie transparent überbrückt). Vielleicht werden zusätzliche Tags hinzugefügt oder so?
quelle
tcpdump
Zeigt VLAN-IDs an allen Schnittstellenbridge
und an den IT- Ports an.Sie können vlan packtes mit ebtables markieren .
Wenden Sie dann die Formgebung auf der Grundlage von Markierungen an. ebtables und iptables haben die gleiche Kennzeichnung.
Hab ich selbst noch nicht gemacht. Es ist also eher eine Vermutung.
quelle
Versuchen Sie, die
reorder_hdr
Option für die VLAN-Schnittstelle zu deaktivieren. Wenn die Option Header neu anordnen aktiviert ist, werden Tags aus Frames entfernt. Überprüfen Sie es per Befehlip -d link list dev vlan_iface
.quelle
tc
Filter aufgerufen werden? Hast du einen Link zu einer Karte oder so? Vielen Dank!