Saya memiliki kotak linux dengan 9 NIC di atasnya, dan saya ingin delapan dari mereka memiliki alamat unik pada subnet yang sama, misalnya:
ifconfig eth1 192.168.123.1 netmask 255.255.0.0
ifconfig eth2 192.168.123.2 netmask 255.255.0.0
ifconfig eth3 192.168.123.3 netmask 255.255.0.0
...
ifconfig eth8 192.168.123.8 netmask 255.255.0.0
Perilaku ARP default sangat kontraproduktif dalam kasus ini, karena menghasilkan semua lalu lintas untuk semua IP yang melewati secara eksklusif eth1
, yang merupakan kebalikan dari apa yang saya inginkan.
Jadi saya mencari-cari dan akhirnya membuat beberapa perubahan pada sysctl seperti ini:
net.ipv4.conf.all.arp_filter=1
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
Itu memang mencegah eth1
dari meniru semua yang lain, tapi aku masih tidak bisa melakukan ping selain eth1
alamat. (mis. dari komputer kedua pada sakelar yang sama, hanya 192.168.123.1
merespons ping)
Saya menduga bahwa saya perlu melakukan sesuatu dengan arptables atau iproute atau SESUATU, tetapi saya tersesat di bidang ini.
Poin Bonus: Solusi harus kompatibel dengan Linux 2.6.27.27. (Lebih khusus, Slax 6.1.2)
sumber
Jawaban:
Anda memerlukan model sistem akhir yang kuat . Linux pada dasarnya dibangun di sekitar model sistem pengiriman yang lemah, jadi itu benar-benar bukan pilihan OS yang baik untuk aplikasi ini.
Anda harus memalsukan setiap bagian dari perilaku yang Anda butuhkan, dari ARP ke perutean kebijakan ke pemilihan alamat sumber. Anda juga akan memerlukan filter untuk mencegah paket diterima jika mereka tiba di antarmuka yang salah.
Langkah-langkah yang pasti diperlukan adalah:
Konfigurasikan arp_filter = 1 dan arp_ignore = 2 pada semua antarmuka.
Tambahkan per-antarmuka, perutean berbasis sumber untuk lalu lintas keluar. (Antarmuka tujuan harus dipilih berdasarkan alamat sumber.)
Tambahkan pemfilteran masuk antarmuka per-antarmuka untuk secara diam-diam menjatuhkan paket yang diterima pada antarmuka yang salah. (Paket dengan alamat tujuan yang ditetapkan untuk antarmuka lain.)
Sayangnya, tidak ada konsensus tentang apakah ketiga langkah ini adalah yang diperlukan. Model sistem ujung lemah dibangun ke dalam seluruh Linux TCP / IP stack, dan tidak jelas apa yang salah dengan masalah halus seperti multicast.
Tidak jelas bagaimana Anda akan memilih antarmuka output untuk siaran, misalnya. Haruskah itu keluar dari mereka semua? Mungkin. Apa perilaku yang benar jika stack mendapat siaran keluar dengan alamat sumber yang tidak ditugaskan ke salah satu antarmuka?
Sekali lagi, Anda telah memilih alat yang salah untuk pekerjaan itu.
sumber
Anda lebih mungkin ingin membuat jembatan dengan antarmuka 8/9 dan kemudian menetapkan alamat IP ke jembatan itu (paket bridge-utils, perintah 'brctl add').
Dengan cara ini bridge akan bertindak seperti saklar dan dapat memiliki alamat IP ke dalam subnet Anda.
sumber
Saya akan merekomendasikan ikatan antarmuka fisik kemudian konfigurasikan semua alamat pada antarmuka terikat tunggal.
Anda juga perlu dukungan pada sakelar.
Berikut ini adalah tutorial mini yang dapat Anda gunakan untuk memulai.
sumber
Tampaknya Anda menginginkan lingkungan pengujian yang setara dengan 9 mesin yang terpisah, dan percaya bahwa 9 antarmuka pada satu mesin dapat meniru itu. Di Linux tidak bisa melakukan ini melalui tumpukan tunggal untuk alasan yang dijelaskan David Schwartz. BTDT dan memiliki bekas luka. Itu cukup buruk dengan 2 antarmuka.
Solusi yang lebih baik mungkin dengan menjalankan 8 atau 9 mesin virtual diskrit di satu host Anda, dan menjembatani 8 atau 9 antarmuka ke mesin virtual ini.
sumber
Ya itu mungkin mengikuti saran David Schwartz:
// Untuk fungsionalitas yang tepat yaitu ARP membalas dari eth1 untuk dihasilkan ketika kedua eth0 dan eth1 berada di subnet yang sama
// atur tabel "new_rt_table" untuk merutekan paket melalui eth1
// tandai paket sehingga 'ip route' dapat merutekannya melalui eth1
// aktifkan dukungan untuk beberapa tabel routing dalam konfigurasi kernel.
Konfigurasi Kernel
→ Dukungan jaringan → Pilihan jaringan
[*] IP: router tingkat lanjut
[*] IP: perutean kebijakan
CONFIG_IP_ADVANCED_ROUTER
CONFIG_IP_MULTIPLE_TABLES
// langkah-langkah di atas mengarahkan ulang paket yang dimaksudkan untuk menjadi output dari eth0 untuk keluar dengan benar dari eth1.
Mohon sarankan metode lain jika ada yang berhasil.
sumber