Kopiowanie pakietów z interfejsu do innego


9

Mam system Linux (niech to będzie A) z 2 kartami Ethernet, mianowicie eth0 i eth1, które są podłączone do dwóch całkowicie niezwiązanych sieci LAN.

Zasadniczo eth0 jest używany do normalnego ruchu aplikacji, a eth1 jest używany tylko do celów debugowania. Debugowanie oznacza, że ​​eth1 jest połączony kablem krosowym z innym urządzeniem z linuksem (niech to będzie B), na którym działa Wireshark. Chcę, aby Wireshark mógł przetwarzać pakiety aplikacji podróżujące na eth0 firmy A.

Zasadniczo muszę skopiować pakiety podróżujące z interfejsu eth0 do interfejsu eth1, aby Wireshark na pudełku B mógł je obwąchać (z niektórych powodów nie mam fizycznego dostępu do LAN eth0). Mógłbym także określić, które pakiety należy skopiować z eth0 do eth1 zgodnie z pewną regułą (nawiasem mówiąc, na podstawie tylko pól TCP / IP).

Zauważ też, że eth0 A nie musi być wprowadzane w tryb rozwiązły, ponieważ chcę tylko skopiować podzbiór pakietów, które mają A jako miejsce docelowe

Czy istnieje sposób na osiągnięcie tego za pomocą samego iptables? Czy muszę napisać aplikację, aby to zadziałało? Co powinienem zrobić, aby „skopiować” pakiety?

Odpowiedzi:



4

Możesz użyć tc mirred action. Na przykład: dla ruchu przychodzącego:

tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: \
   protocol all prio 2 u32 \
   match u32 0 0 flowid 1:1 \
   action mirred egress mirror dev eth1

Dla ruchu wychodzącego:

tc qdisc replace dev eth0 parent root handle 10: prio
tc filter add dev eth0 parent 10: \
   protocol all prio 2 u32 \
   match u32 0 0 flowid 10:1 \
   action mirred egress mirror dev eth1

3

Wyszukaj w sieci tcpbridge, czyli dokładnie to, co robi Zadanie. Można go również używać do komunikacji z maszynami wirtualnymi.


1

Może działać coś takiego jak rinetd ( uważam, że jest to przekierowanie / serwer tylko dla TCP , więc nie ma ARP, Layer 2 itp.), Ale szczerze mówiąc, otrzymuję niektóre zarządzane przełączniki, które mają funkcje dublowania portów lub jeśli to pole jest używane wyłącznie do wireshark, możesz dodać do niej kolejną kartę sieciową, połączyć dwa interfejsy, umieścić ją przed et0 komputera A i mieć dedykowaną maszynę do wykrywania.



0

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.