Nella mia configurazione il traffico TX multicast è stato contrassegnato da iptables ma il routing dei criteri utilizzando nuove tabelle di routing non ha mai funzionato. Ha funzionato per i pacchetti TX unicast (reindirizzando i pacchetti di origine da eth0 a eth5). Usando tc potrei ottenere il traffico di eth0 mcast su eth5 L'indirizzo IP di src mac e src vengono cambiati in quello di eth5, quindi non creeranno problemi con gli apprendimenti degli switch. Tutto il supporto del kernel per la pianificazione dei pacchetti del kernel CONFIG_NET_SCHED deve essere abilitato
Di seguito WORKS per il traffico unicast e multicast che reindirizza da eth0 a eth5
Netfilter può essere usato per interagire direttamente con la struttura che rappresenta un pacchetto nel kernel. Questa struttura, sk_buff, contiene un campo chiamato "__u32 nfmark" che stiamo per modificare. TC leggerà quindi quel valore per selezionare la classe di destinazione di un pacchetto.
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
Andando a creare un albero che rappresenta la nostra politica di pianificazione e che utilizza il qdisc PRIO (scheduler di pacchetti) (puoi provare altri disponibili). qdisc si collega alla radice di un dispositivo
tc qdisc aggiungi dev eth0 root handle 15: prio
Ora hanno da una parte una politica di modellamento del traffico e dall'altra la marcatura dei pacchetti. Per collegare i due, abbiamo bisogno di un filtro.
refer man tc-mirred (8): L'azione mirred consente il mirroring dei pacchetti (copia) o il reindirizzamento (furto) del pacchetto che riceve. Il mirroring è ciò che viene talvolta chiamato Switch Port Analyzer (SPAN) e viene comunemente utilizzato per analizzare e / o eseguire il debug dei flussi.
refer man tc-fw (8): fw - filtro di controllo del traffico fwmark il filtro fw consente di classificare i pacchetti in base a un fwmark precedentemente impostato da iptables. Se è identico alla "maniglia" del filtro, il filtro corrisponde. iptables consente di contrassegnare singoli pacchetti con il target MARK o intere connessioni usando 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'
filtro tc aggiungi dev eth0 parent 15: 0 protocollo 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 egress red dev eth1
mostra le regole sopra impostate: tc qdisc mostra dev eth0 filtro tc mostra dev eth0
elimina / disattiva le regole sopra impostate: tc qdisc del dev eth0 root