Saya memiliki mesin dengan beberapa antarmuka yang dapat saya konfigurasi seperti yang saya inginkan, misalnya:
- eth1: 192.168.1.1
- eth2: 192.168.2.2
Saya ingin meneruskan semua lalu lintas yang dikirim ke salah satu alamat lokal ini melalui antarmuka lainnya. Misalnya, semua permintaan ke server iperf, ftp, http di 192.168.1.1 seharusnya tidak hanya dirutekan secara internal, tetapi diteruskan melalui eth2 (dan jaringan eksternal akan mengurus perutean ulang paket ke eth1).
Saya mencoba dan melihat beberapa perintah, seperti iptables, ip route, dll ... tetapi tidak ada yang berhasil.
Perilaku terdekat yang bisa saya lakukan adalah dengan:
ip route change to 192.168.1.1/24 dev eth2
yang mengirim semua 192.168.1.x pada eth2, kecuali untuk 192.168.1.1 yang masih dialihkan secara internal. Mungkin saya kemudian dapat melakukan penerusan NAT dari semua lalu lintas yang diarahkan ke 192.168.1.2 palsu pada eth1, dialihkan ke 192.168.1.1 secara internal? Saya sebenarnya berjuang dengan iptables, tetapi itu terlalu sulit bagi saya.
Tujuan dari pengaturan ini adalah untuk melakukan pengujian driver antarmuka tanpa menggunakan dua PC.
Saya menggunakan Linux, tetapi jika Anda tahu cara melakukannya dengan Windows, saya akan membelinya!
Edit:
Jaringan eksternal hanyalah kabel crossover antara eth1 dan eth2. Katakanlah saya memiliki server http di komputer saya. Sekarang saya ingin mengakses server ini dari mesin yang sama, tetapi saya ingin memaksa lalu lintas TCP / IP untuk melewati kabel eth1 / eth2 ini. Bagaimana cara saya mengkonfigurasi antarmuka saya untuk ini?
sumber
Jawaban:
Saya memperluas jawaban caladona karena saya tidak bisa melihat paket respons. Untuk contoh ini:
Rute iptable PC lokal diatur ke lalu lintas keluar SNAT dan DNAT ke IP 'palsu'.
Aturannya lakukan sebagai berikut:
Untuk meringkas, sistem lokal sekarang dapat berbicara dengan mesin 'virtual' dengan alamat 192.168.1.100 dan 192.168.2.100.
Selanjutnya Anda harus memaksa PC lokal Anda untuk menggunakan router eksternal untuk mencapai IP palsu Anda. Anda melakukan ini dengan membuat rute langsung ke IP melalui router. Anda ingin memastikan bahwa Anda memaksa paket ke kebalikan dari subnet tujuan.
Akhirnya untuk membuat semua ini berfungsi, router eksternal perlu tahu cara mencapai IP palsu di PC lokal Anda. Anda dapat melakukannya dengan menyalakan ARP proxy untuk sistem Anda.
Dengan pengaturan ini, Anda sekarang dapat memperlakukan IP palsu sebagai sistem nyata pada PC lokal Anda. Mengirim data ke subnet .1 akan memaksa paket keluar dari antarmuka .2. Mengirim data ke subnet .2 akan memaksa paket keluar dari antarmuka .1.
sumber
Saya berhasil menggunakan yang berikut ini di Linux untuk menguji throughput pada kartu 10Gbps dual-port baru dalam mode "loopback", yaitu, satu port terhubung langsung ke yang lain. Ini semua hanya sedikit voodoo hanya untuk memaksa paket keluar dari kabel, tetapi jika tidak, Linux hanya akan melakukan hubungan arus pendek traffic melalui kernel (maka pertanyaan OP). Dalam jawaban Casey di atas, saya tidak yakin apakah benar-benar perlu memiliki router eksternal atau tidak di atas, tetapi yang berikut ini sepenuhnya mandiri. Dua antarmuka adalah eth2 dan eth3.
Berikan IP ke antarmuka, dan letakkan di jaringan terpisah:
Selanjutnya kita akan membuat skenario NAT ganda: dua jaringan palsu baru yang digunakan untuk mencapai yang lain. Di jalan keluar, sumber NAT ke jaringan palsu Anda. Dalam perjalanan, perbaiki tujuan. Dan sebaliknya untuk jaringan lain:
Sekarang beri tahu sistem cara menuju ke setiap jaringan palsu, dan siapkan entri arp sebelumnya (pastikan untuk mengganti alamat MAC Anda, jangan gunakan milikku):
Ini bodoh Linux cukup untuk benar-benar meletakkan paket ke kabel. Sebagai contoh:
keluar eth2, sumber IP 10.50.0.1 mendapat NATted ke 10.60.0.1, dan ketika datang ke eth3 tujuan 10.60.1.1 mendapat NATted ke 10.50.1.1. Dan jawabannya mengambil perjalanan yang serupa.
Sekarang gunakan iperf untuk menguji throughput. Ikat IP yang benar, dan pastikan IP mana yang Anda hubungi (alamat palsu ujung lainnya):
Pastikan lalu lintas benar-benar keluar ke kawat:
Anda juga dapat menonton / proc / menyela hanya untuk benar-benar yakin kartu sedang digunakan:
Bagaimanapun, saya menemukan posting ini mencari cara melakukan ini, terima kasih untuk teman-teman T&J, dan berharap ini membantu orang lain menemukan posting ini di masa depan.
sumber
Seperti biasa - saya sedikit terlambat - tetapi saat ini orang dapat menggunakan ruang nama jaringan untuk mengisolasi antarmuka dan mencegah penerusan lokal (dan mengutak-atik iptables :)).
Buat ruang nama (semua dilakukan dengan izin yang diperlukan, misalnya sebagai root):
Perhatikan bahwa status antarmuka / konfigurasi sekarang harus diakses dalam konteks namespace yang ditugaskan - sehingga mereka tidak akan muncul jika Anda menjalankan tautan ip telanjang karena ini dijalankan dalam konteks namespace default. Menjalankan perintah di dalam namespace dapat dilakukan menggunakan
sebagai awalan.
Sekarang tetapkan ruang nama untuk antarmuka, terapkan konfigurasi dan atur antarmuka:
Sekarang Anda dapat menjalankan aplikasi di dalam namespace - untuk menjalankan server iperf
dan klien:
Lalu lintas sekarang akan dikirim melalui antarmuka fisik karena seluruh jaringan, antarmuka, perutean ... diisolasi oleh ruang nama sehingga kernel tidak dapat mencocokkan alamat yang digunakan dalam lalu lintas dengan antarmuka lokal (tersedia).
Jika Anda selesai dengan eksperimen, cukup hapus ruang nama:
Antarmuka akan dipindahkan ke namespace default dan semua konfigurasi yang dilakukan dalam namespace menghilang (mis. Tidak perlu menghapus alamat IP yang ditugaskan).
sumber
Ok, akhirnya saya berhasil mengatur konfigurasi saya.
Idenya adalah menggunakan alamat palsu lain, untuk memaksa rute alamat palsu ini ke antarmuka 2, lalu menerjemahkan alamat palsu dengan alamat asli 2 dengan NAT / iptables.
Pengaturan saya sebenarnya terbuat dari satu router yang saya bisa telnet antara IF1 (antarmuka 1) dan IF2
Dalam pengaturan saya, FAKE_ADDR dan IF1_ADDR berada di subnet yang sama.
Dan di router:
Jika saya mengirim sesuatu ke FAKE_ADDR, pkt diteruskan melalui IF1 ke router, diteruskan lagi ke IF2, maka FAKE_IP digantikan oleh IF2_ADDR. Paket diproses oleh server, hasilnya dikirim kembali ke IF1_ADDR, dari IF2_ADDR yang digantikan oleh FAKE_ADDR.
Mungkin dimungkinkan untuk menggunakan konfigurasi yang lebih sederhana dengan hanya satu kabel crossover, tetapi karena saya tidak mencoba, saya lebih suka memberikan solusi kerja saya.
sumber
Jawaban yang diberikan di atas oleh Thomas Tannhäuser sangat tepat!
Saya memiliki situasi yang serupa: mesin tunggal dengan dua antarmuka enet. Rencana saya adalah menggunakan satu antarmuka sebagai server (penerima) dan yang lainnya sebagai klien (pengirim). Setiap antarmuka akan dilampirkan ke router dan iperf akan mengarahkan lalu lintas melalui router untuk mengukur throughput, PPS, delay, dll.
Sayangnya, pendekatan iptables tidak intuitif dan penuh dengan masalah. Setelah beberapa jam yang membuat frustrasi, saya meninggalkan rencana serangan ini. Terinspirasi oleh saran Thomas, saya melakukan sedikit pekerjaan rumah di Linux IP Namespaces dan mulai menghargai kesederhanaan dan keanggunan solusi ini.
Di bawah ini adalah daftar perintah persis yang saya gunakan untuk mengkonfigurasi Fedora FC26 saya untuk melayani dalam kapasitas ini. Kedua antarmuka tersebut adalah enp1s0 dan enp3s0. Router memiliki dua antarmuka dengan alamat 192.168.2.112 dan 172.16.16.2. Setiap konektor EN26 FC26 dihubungkan langsung ke antarmuka router yang sesuai.
sumber
Sepertinya Anda ingin mengubah kotak linux Anda menjadi jenis kotak router / jembatan / gateway / firewall. Sumber daya berikut mungkin apa yang Anda cari:
Proyek Router Linux
Daftar distribusi router atau firewall
Linux LiveCD Router
Linux Journal - The Linux Router
Pembaruan berdasarkan informasi lebih lanjut:
Saya tidak berpikir Anda akan dapat melakukan apa yang Anda inginkan. OS akan selalu melihat tabel routing internal dan 'melihat' kedua alamat IP secara lokal. Kemudian akan merutekan traffic di dalam OS dan tidak pernah memasangnya. Anda memerlukan mesin kedua atau dua mesin virtual (lihat Xen ).
sumber
Banyak hal yang harus dilalui di sini, jadi saya tidak bisa sepenuhnya menjamin keakuratan saya, tetapi pertanyaan awalnya tampaknya mencari apa yang dikenal sebagai teknik "kirim ke diri sendiri" . Pencarian yang terhubung menunjukkan apa yang saya pikir merupakan patch kernel yang paling baik dipertahankan terhubung sebagai link + diskusi teratas dan patch dengan pendekatan lain pada berbagai milis, esp. LKML.
Saya pikir kita juga harus melihat namespace jaringan , dilakukan dengan iproute2 "ip netns" . Ini juga membutuhkan beberapa antarmuka tambahan dan sulap perutean, jadi mungkin bahkan tidak kalah rumit dari kehebohan iptables besar dalam jawaban lainnya.
Komentar pasti disambut jika ada yang menemukan sesuatu yang berguna dengan ini - bagaimana, apa, di mana tentang implementasi Anda.
sumber
Lihat artikel ini. Di sini langkah-langkah rinci disebutkan untuk mengaktifkan akses internet ke virtualbox vm menggunakan penerusan NAT.
http://jackal777.wordpress.com/2012/02/13/virtualbox-host-only-networking-nat-for-internet-access/
sumber
di sini adalah bagaimana saya membuatnya bekerja untuk IPV6
ips statis yang ditetapkan
mengatur rute host saja ke alamat "FAKE"
mengisi tabel Neighbor ... seperti arp
menambahkan entri ip6tables
sumber