Paketleri bir arayüzden diğerine kopyalama


9

Ben tamamen ilgisiz iki LAN bağlı 2 ethernet kartı, yani eth0 ve eth1 ile bir Linux sistemi (olsun olsun) var.

Temel olarak eth0 normal uygulama trafiği için kullanılır ve eth1 yalnızca hata ayıklama amacıyla kullanılır. Hata ayıklama, eth1'in çapraz kablo kullanılarak Wireshark çalıştıran başka bir linux kutusuna (B olsun) bağlandığı anlamına gelir. Wireshark'ın A'nın eth0 ile seyahat eden uygulama paketlerini işleyebilmesini istiyorum.

Temelde seyahat paketlerini eth0 arabiriminden eth1 arabirimine kopyalamalıyım , böylece B kutusundaki Wireshark onları koklayabilir (bazı nedenlerden dolayı LAN eth0'a fiziksel erişimim yok). Ayrıca bazı kurallara göre eth0'dan eth1'e hangi paketlerin kopyalanacağını belirtmem gerekebilir (yalnızca TCP / IP alanlarına göre).

Ayrıca A'nın eth0'ının karışık moda alınmasına gerek olmadığını unutmayın, çünkü yalnızca hedef olarak A olan paketlerin bir alt kümesini kopyalamak istiyorum

Bunu sadece iptables kullanarak başarmanın bir yolu var mı? Yoksa bu işi yapmak için bir uygulama yazmam gerekir mi? Paketleri "kopyalamak" için ne yapmalıyım?

Yanıtlar:



4

Tc yansıtılmış eylemi kullanabilirsiniz. Örneğin: Gelen trafik için:

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

Giden trafik için:

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

İnternette tam olarak ne İş olduğunu tcpbridge arayın. Sanal makinelerle konuşmak için de kullanılabilir.


1

Gibi bir şey rinetd kudreti çalışması (TCP için yeniden yönlendirici / sunucu sadece ben inanıyorum hiçbir ARP, Katman 2, vs. böylece), ancak tüm dürüstlük, liman yansıtma özelliklerine sahip veya bu kutu sadece wireshark için kullanılıyorsa, bazı yönetilen anahtarları alma, başka bir NIC ekleyebilir, iki arabirimi köprüleyebilir, A makinesinin eth0 önüne koyabilir ve özel bir koklama makinesine sahip olabilirsiniz.



0

Benim kurulumda çok noktaya yayın TX trafiği iptables tarafından işaretlendi, ancak yeni yönlendirme tablolarını kullanarak politika yönlendirme hiç işe yaramadı. Tek noktaya yayın TX paketleri için çalışmasına rağmen (başlangıç ​​paketlerini eth0'dan eth5'e yönlendirme). Tc kullanarak eth5 için eth0 mcast trafiği alabilirim src mac ve src ip adresi eth5 t değiştirilir, bu yüzden anahtar öğrenmeleri ile ilgili sorunlar oluşturmaz. CONFIG_NET_SCHED çekirdek paketi zamanlaması için tüm çekirdek desteği etkinleştirilmelidir

Eth0'dan eth5'e yönlendiren tek noktaya yayın ve çok noktaya yayın trafiği için ÇALIŞMALAR altında

Netfilter, çekirdekteki bir paketi temsil eden yapı ile doğrudan etkileşime girmek için kullanılabilir. Bu yapı, sk_buff, değiştireceğimiz “__u32 nfmark” adlı bir alan içeriyor. TC daha sonra bir paketin hedef sınıfını seçmek için bu değeri okuyacaktır.

IP_ADDR_ETH0 = ifconfig eth0 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n' iptables -t mangle -A ÇIKIŞ -s $ {IP_ADDR_ETH0} -p udp --match multiport --dports 329.330 -o eth0 -j MARK - set-mark 2

Zamanlama politikamızı temsil eden ve PRIO qdisc (paket zamanlayıcı) kullanan bir ağaç oluşturacak (diğer mevcut olanları deneyebilir). qdiscs bir cihazın köküne takılıyor

tc qdisc dev eth0 kök kolu 15 ekleyin: prio

Şimdi bir tarafta trafik şekillendirme politikası, diğer tarafta paket işaretlemesi var. İkisini bağlamak için bir filtreye ihtiyacımız var.

bkz. man tc-mirred (8): Yansıtılan eylem, paketin aynalanmasına (kopyalanmasına) veya aldığı paketin yeniden yönlendirilmesine (çalınmasına) izin verir. Aynalama, bazen Anahtar Bağlantı Noktası Analizörü (SPAN) olarak adlandırılır ve akışları analiz etmek ve / veya hata ayıklamak için yaygın olarak kullanılır.

bkz. man tc-fw (8): fw - fwmark trafik kontrol filtresi fw filtresi, paketleri önceden ayarlanmış bir fwmark'a göre iptables ile sınıflandırmaya izin verir. Filtrenin 'tutamacı' ile aynıysa, filtre eşleşir. iptables, tek paketleri MARK hedefi veya CONNMARK kullanarak tüm bağlantıları işaretlemenizi sağlar.

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 filtresi dev et0 üst öğe ekle 15: 0 protokol ip prio 1 tanıtıcı 0x2 fw eylem pedit ex munge eth src $ $ {MAC_ADDR_ETH1} boru \ eylem pedit ex munge ip src set $ {IP_ADDR_ETH1} boru \ eylem yansıtılmış çıkış yönlendirmesi dev eth1

yukarıdaki kuralları göster: tc qdisc show dev eth0 tc filtre show dev eth0

ayarlanan kuralların yukarısındaki sil / unset: tc qdisc del dev eth0 root

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.