W mojej konfiguracji ruch TX multiemisji był oznaczony przez iptables, ale routing zasad przy użyciu nowych tabel routingu nigdy nie działał. Chociaż działało to w przypadku pakietów TX emisji pojedynczej (przekierowywanie pakietów pochodzących z eth0 na eth5). Za pomocą tc mogłem uzyskać ruch mcast eth0 do eth5 Adres MAC src mac i src ip zostały zmienione na adres eth5, więc nie spowoduje to problemów z nauką przełączania. Musi być włączona cała obsługa jądra do planowania pakietów jądra CONFIG_NET_SCHED
Poniżej DZIAŁA przekierowywanie ruchu emisji pojedynczej i multiemisji z eth0 na eth5
Netfilter może być używany do bezpośredniej interakcji ze strukturą reprezentującą pakiet w jądrze. Ta struktura, sk_buff, zawiera pole o nazwie „__u32 nfmark”, które będziemy modyfikować. TC następnie odczyta tę wartość, aby wybrać docelową klasę pakietu.
IP_ADDR_ETH0 = ifconfig eth0 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n'
iptables -t mangle -A WYJŚCIE -s $ {IP_ADDR_ETH0} -p udp - dopasuj wiele portów --portuje 329.330 -o eth0 -j ZNAK - set-mark 2
Tworzenie drzewa, które reprezentuje nasze zasady planowania i które korzysta z qdisc PRIO (harmonogram pakietów) (można wypróbować inne dostępne). qdisc dołącza się w katalogu głównym urządzenia
tc qdisc dodaj uchwyt root eth0 15: prio
Teraz z jednej strony obowiązują zasady kształtowania ruchu, az drugiej strony oznaczanie pakietów. Aby połączyć oba, potrzebujemy filtra.
refer man tc-mirred (8): Działanie mirred umożliwia tworzenie kopii lustrzanych pakietów (kopiowanie) lub przekierowywanie (kradzież) otrzymanego pakietu. Dublowanie jest czasem określane jako Switch Port Analyzer (SPAN) i jest powszechnie używane do analizy i / lub debugowania przepływów.
refer man tc-fw (8): fw - filtr kontroli ruchu fwmark filtr fw pozwala klasyfikować pakiety na podstawie wcześniej ustawionego fwmark według iptables. Jeśli jest identyczny z „uchwytem” filtra, filtr pasuje. iptables pozwala na oznaczanie pojedynczych pakietów celem MARK lub całych połączeń za pomocą 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'
filtr tc dodaj dev eth0 rodzic 15: 0 protokół ip prio 1 uchwyt 0x2 fw action pedit ex munge eth src set $ {MAC_ADDR_ETH1} pipe \ action pedit ex munge ip src set $ {IP_ADDR_ETH1} rura \ akcja mirred wyjście przekierowanie dev eth1
pokaż powyżej ustawionych reguł: tc qdisc pokaż dev eth0 tc filtr pokaż dev eth0
usuń / cofnij powyżej ustawionych reguł: tc qdisc del dev eth0 root