私のセットアップでは、マルチキャストTXトラフィックはiptablesによってマークされましたが、新しいルーティングテーブルを使用したポリシールーティングは機能しませんでした。ユニキャストTXパケットでは機能しましたが(元のパケットをeth0からeth5にリダイレクトします)。tcを使用すると、eth0 mcastトラフィックをeth5に取得できます。srcmacおよびsrc ipアドレスはeth5のアドレスに変更されるため、スイッチの学習で問題が発生しません。カーネルパケットスケジューリングのすべてのカーネルサポートCONFIG_NET_SCHEDを有効にする必要があります
eth0からeth5にリダイレクトするユニキャストおよびマルチキャストトラフィックのWORKSの下
Netfilterは、カーネル内のパケットを表す構造と直接対話するために使用できます。この構造であるsk_buffには、変更する「__u32 nfmark」と呼ばれるフィールドが含まれています。次に、TCはその値を読み取って、パケットの宛先クラスを選択します。
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
スケジューリングポリシーを表すツリーを作成し、PRIO qdisc(パケットスケジューラ)を使用します(他の利用可能なものを試すことができます)。デバイスのルートに接続するqdiscs
tc qdisc add dev eth0ルートハンドル15:prio
これで、片側にトラフィックシェーピングポリシーがあり、反対側にパケットマーキングがあります。2つを接続するには、フィルターが必要です。
refer man tc-mirred(8):mirredアクションは、受信したパケットのミラーリング(コピー)またはリダイレクト(盗用)を可能にします。ミラーリングは、スイッチポートアナライザー(SPAN)と呼ばれることもあり、フローの分析やデバッグによく使用されます。
man tc-fw(8)を参照してください:fw-fwmarkトラフィック制御フィルターfwフィルターは、iptablesによって以前に設定されたfwmarkに基づいてパケットを分類することを許可します。フィルターの「ハンドル」と同一の場合、フィルターは一致します。iptablesは、単一のパケットをMARKターゲットでマークしたり、CONNMARKを使用して接続全体をマークしたりできます。
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 protocol ip prio 1 handle 0x2 fw action pedit ex munge eth src set $ {MAC_ADDR_ETH1} pipe \ action pedit ex munge ip src set $ {IP_ADDR_ETH1} pipe \ action mirred e開発者eth1
上記の設定ルールを表示:tc qdisc show dev eth0 tc filter show dev eth0
上記の設定ルールの削除/設定解除:tc qdisc del dev eth0 root