iptables und Traffic Shaping

Ok, ich habe mir jetzt überlegt hier einfach laufend diverse Dinge zu notieren, die mir während meiner Arbeit so auffallen, hauptsächlich für mich selber, aber vielleicht interessiert es ja sonst noch jemanden.

Aktuell gerade arbeite ich an einem Netzwerk-Setup, wo die verfügbare Bandbreite sinnvoll auf die Benutzer und verschiedenen Netzwerkdienste verteilt werden soll. Dabei werden via iptables und der mangle-Tabelle Datenpakete verschiedenen Traffic-Shaping (tc) Klassen zugeordnet, näheres dazu gibt's u.a. auf der Linux Advanced Routing & Traffic Control Website.

Dabei gibt es 2 Varianten: entweder werden die Pakete mit MARK markiert und dann über einen tc-Filter der entsprechenden Klasse zugeordnet; oder es wird direkt per CLASSIFY (nur bei neueren Kernel-Versionen) die Klasse angegeben. Oft liest man nun (z.B. hier), dass man CLASSIFY verwenden soll, was auch wunderbar ist.

Variante 1 hat aber einen Vorteil: manchmal will man Pakete auf mehr als einer Netzwerkkarte gleichzeitig behandeln, z.B. durch ein Weglassen eines -o <Device> in der POSTROUTING-Chain der mangle-Tabelle. Hier ist dann MARK praktischer, weil man die selben Markierungen über einen tc-filter pro Device in eine andere Klasse stecken kann, d.h. die Klassen müssen nicht auf beiden Devices gleich heissen, was manchmal (z.B. hier aktuell) notwendig ist.

Von tc-filtern auf andere Attribute als die Markierung (z.B. u32 etc.) würde ich allerdings abraten, da man sonst noch eine Syntax zusätzlich zu iptables lernen muss und ich bisher noch keinen Vorteil von u32 und Konsorten erkennen konnte.