Na minha configuração, o tráfego TX multicast foi marcado por iptables, mas o roteamento de políticas usando novas tabelas de roteamento nunca funcionou. Embora funcionasse para pacotes TX unicast (redirecionando pacotes de origem de eth0 para eth5). Usando tc, eu poderia obter o tráfego eth0 mcast para eth5 O endereço src mac e src ip são alterados para o eth5, portanto, não haverá problemas com os aprendizados dos comutadores. Todo o suporte do kernel para agendamento de pacotes do kernel CONFIG_NET_SCHED deve estar ativado
Abaixo do WORKS para redirecionamento de tráfego unicast e multicast de eth0 para eth5
O Netfilter pode ser usado para interagir diretamente com a estrutura que representa um pacote no kernel. Essa estrutura, o sk_buff, contém um campo chamado “__u32 nfmark” que vamos modificar. O TC lerá esse valor para selecionar a classe de destino de um pacote.
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 MARCA --set-mark 2
Vamos criar uma árvore que represente nossa política de agendamento e que use o PRIO qdisc (agendador de pacotes) (pode tentar outros disponíveis). qdiscs anexando na raiz de um dispositivo
tc qdisc add identificador raiz root eth0 15: prio
Agora, de um lado, uma política de modelagem de tráfego e, do outro lado, a marcação de pacotes. Para conectar os dois, precisamos de um filtro.
referir man tc-mirred (8): A ação mirred permite espelhar pacotes (copiar) ou redirecionar (roubar) o pacote que recebe. O espelhamento é às vezes chamado de Switch Port Analyzer (SPAN) e é comumente usado para analisar e / ou depurar fluxos.
consulte man tc-fw (8): fw - filtro de controle de tráfego fwmark o filtro fw permite classificar pacotes com base em um fwmark definido anteriormente pelo iptables. Se for idêntico ao 'identificador' do filtro, o filtro corresponderá. O iptables permite marcar pacotes únicos com o alvo MARK ou conexões inteiras usando o 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 pai 15: 0 protocolo ip prio 1 identificador 0x2 pedit de ação fw ex munge eth src set $ {MAC_ADDR_ETH1} pipe \ action pedit ex munge ip src set $ {IP_ADDR_ETH1} pipe \ action redirecionamento de saída mirado dev eth1
mostre acima as réguas ajustadas: qdisc do tc mostre o eth0 dev do filtro tc mostre o eth0 dev
excluir / desabilitar as regras definidas acima: tc qdisc del dev eth0 root