Saya memiliki sistem Linux (biarlah A) dengan 2 kartu ethernet, yaitu eth0 dan eth1 yang terpasang pada dua LAN yang sama sekali tidak terkait.
Pada dasarnya eth0 digunakan untuk lalu lintas aplikasi normal dan eth1 hanya digunakan untuk keperluan debugging. Debugging berarti bahwa eth1 dihubungkan menggunakan kabel silang ke kotak linux lain (biarlah B) yang menjalankan Wireshark. Saya ingin Wireshark dapat memproses paket aplikasi yang bepergian menggunakan A's eth0.
Pada dasarnya saya perlu menyalin paket perjalanan dari antarmuka eth0 ke antarmuka eth1 sehingga Wireshark pada kotak B dapat mengendus mereka (untuk beberapa alasan saya tidak memiliki akses fisik ke LAN eth0). Saya juga perlu menentukan paket mana yang akan disalin dari eth0 ke eth1 menurut beberapa aturan (hanya berdasarkan pada bidang TCP / IP).
Perhatikan juga bahwa eth0 A tidak perlu dimasukkan ke mode promiscuous karena saya hanya ingin menyalin subset paket yang memiliki A sebagai tujuan
Apakah ada cara untuk mencapai ini menggunakan iptables sendiri? Atau apakah saya perlu menulis aplikasi untuk membuat ini berfungsi? Apa yang harus saya lakukan untuk "menyalin" paket?
sumber
Anda dapat menggunakan tindakan ajaib tc. Misalnya: Untuk lalu lintas masuk:
Untuk lalu lintas keluar:
sumber
Cari di internet untuk tcpbridge, yang persis seperti yang dilakukan Ayub. Ini dapat digunakan untuk berbicara dengan mesin virtual juga.
sumber
Sesuatu seperti rinetd mungkin bekerja (redirector / server untuk TCP saja saya percaya, jadi tidak ada ARP, Layer 2, dll), tetapi dalam semua kejujuran, mendapatkan beberapa switch yang dikelola yang memiliki kemampuan port mirroring atau jika kotak itu hanya digunakan untuk wireshark, Anda dapat menambahkan NIC lain untuk itu, menjembatani dua antarmuka, meletakkannya di depan et0 mesin A, dan memiliki mesin sniffing khusus.
sumber
Perangkat yang menyalin frame ethernet dari satu antarmuka ke antarmuka lainnya adalah jembatan. Anda dapat mengkonfigurasi sistem Linux Anda untuk bertindak sebagai jembatan. Beberapa dokumentasi dapat ditemukan di sini:
Anda bisa menerapkan aturan pemfilteran untuk traffic yang dijembatani menggunakan ebtables , yang merupakan analog dari
iptables
untuk layer 2 traffic.sumber
Dalam pengaturan saya, lalu lintas TX multicast ditandai oleh iptables tetapi kebijakan routing menggunakan tabel routing baru tidak pernah berfungsi. Meskipun itu bekerja untuk paket TX unicast (mengarahkan paket yang berasal dari eth0 ke eth5). Menggunakan tc saya bisa mendapatkan trafik mcast eth0 ke eth5 Alamat src mac dan src ip diubah dari eth5 jadi tidak akan ada masalah dengan sakelar pembelajaran. Semua dukungan kernel untuk penjadwalan paket kernel CONFIG_NET_SCHED harus diaktifkan
Di bawah ini BEKERJA untuk pengalihan lalu lintas unicast dan multicast dari eth0 ke eth5
Netfilter dapat digunakan untuk berinteraksi secara langsung dengan struktur yang mewakili sebuah paket di kernel. Struktur ini, sk_buff, berisi bidang yang disebut "__u32 nfmark" yang akan kita modifikasi. TC kemudian akan membaca nilai itu untuk memilih kelas tujuan suatu paket.
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 2Pergi untuk membuat pohon yang mewakili kebijakan penjadwalan kami, dan yang menggunakan PRIO qdisc (penjadwal paket) (dapat mencoba yang lain tersedia). qdiscs melampirkan di root perangkat
tc qdisc menambahkan dev eth0 root handle 15: prio
Sekarang memiliki kebijakan pembentukan lalu lintas di satu sisi, dan di sisi lain menandai paket. Untuk menghubungkan keduanya, kita perlu filter.
refer man tc-mirred (8): Tindakan mirred memungkinkan mirroring paket (menyalin) atau mengalihkan (mencuri) paket yang diterimanya. Mirroring adalah apa yang kadang-kadang disebut sebagai Switch Port Analyzer (SPAN) dan biasanya digunakan untuk menganalisis dan / atau men-debug aliran.
refer man tc-fw (8): fw - fwmark filter kontrol lalu lintas memungkinkan filter fw untuk mengklasifikasikan paket berdasarkan pada fwmark yang sebelumnya diatur oleh iptables. Jika identik dengan 'pegangan' filter, filter cocok. iptables memungkinkan untuk menandai paket tunggal dengan target MARK, atau seluruh koneksi menggunakan 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 tambahkan dev eth0 parent 15: 0 protokol ip prio 1 handle 0x2 fw aksi pedit ex munge eth src set $ {MAC_ADDR_ETH1} pipe \ action pedit ex munge ip src set $ {IP_ADDR_ETH1} pipe \ action mirred egress redirect egress dev eth1tampilkan aturan yang ditetapkan di atas: tc qdisc tunjukkan dev eth0 tc filter tunjukkan dev eth0
hapus / hapus set aturan di atas: tc qdisc del dev eth0 root
sumber