In meinem Setup wurde Multicast-TX-Verkehr durch iptables markiert, aber das Richtlinienrouting unter Verwendung neuer Routingtabellen funktionierte nie. Obwohl es für Unicast-TX-Pakete funktioniert hat (Umleiten von Ursprungspaketen von eth0 nach eth5). Mit tc könnte ich eth0 mcast-Verkehr zu eth5 bringen. Die src mac- und src ip-Adresse werden gegenüber eth5 geändert, sodass keine Probleme mit dem Switch-Lernen entstehen. Die gesamte Kernelunterstützung für die Kernelpaketplanung CONFIG_NET_SCHED muss aktiviert sein
Unten FUNKTIONIERT für Unicast- und Multicast-Verkehr, der von eth0 nach eth5 umgeleitet wird
Netfilter kann verwendet werden, um direkt mit der Struktur zu interagieren, die ein Paket im Kernel darstellt. Diese Struktur, der sk_buff, enthält ein Feld namens "__u32 nfmark", das wir ändern werden. TC liest dann diesen Wert, um die Zielklasse eines Pakets auszuwählen.
IP_ADDR_ETH0 = ifconfig eth0 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n'
iptables -t mangle -A OUTPUT -s $ {IP_ADDR_ETH0} -p udp --match multiport --dports 329,330 -o eth0 -j MARK --set-mark 2
Erstellen Sie einen Baum, der unsere Planungsrichtlinie darstellt und der PRIO qdisc (Paketplaner) verwendet (kann andere verfügbare ausprobieren). qdiscs, die im Stammverzeichnis eines Geräts angehängt werden
tc qdisc add dev eth0 root handle 15: prio
Haben Sie jetzt auf der einen Seite eine Traffic-Shaping-Richtlinie und auf der anderen Seite die Paketmarkierung. Um die beiden zu verbinden, benötigen wir einen Filter.
refer man tc-mirred (8): Die Mirred-Aktion ermöglicht das Spiegeln (Kopieren) oder Umleiten (Stehlen) des empfangenen Pakets. Das Spiegeln wird manchmal als Switch Port Analyzer (SPAN) bezeichnet und wird häufig zum Analysieren und / oder Debuggen von Flows verwendet.
refer man tc-fw (8): fw - fwmark-Verkehrssteuerungsfilter Der fw-Filter ermöglicht die Klassifizierung von Paketen basierend auf einer zuvor von iptables festgelegten fwmark. Wenn es mit dem 'Handle' des Filters identisch ist, stimmt der Filter überein. Mit iptables können einzelne Pakete mit dem MARK-Ziel oder ganze Verbindungen mit CONNMARK markiert werden.
MAC_ADDR_ETH1 = cat /sys/class/net/eth1/address
IP_ADDR_ETH1 = ifconfig eth1 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n'
tc filter add dev eth0 parent 15: 0 Protokoll ip prio 1 handle 0x2 fw Aktion pedit ex munge eth src set $ {MAC_ADDR_ETH1} Pipe \ Aktion pedit ex munge ip src set $ {IP_ADDR_ETH1} Pipe \ action mirred egress dev eth1
oben festgelegte Regeln anzeigen: tc qdisc show dev eth0 tc filter show dev eth0
Löschen / Deaktivieren der oben festgelegten Regeln: tc qdisc del dev eth0 root