Ubuntu Linux - beberapa NIC, LAN yang sama ... Respons ARP selalu menghasilkan NIC tunggal

16

Kami memiliki layanan internet AT&T U-Verse, yang memiliki gateway DSL yang sangat terbatas.

Kami memiliki 5 IP (netmask 248), tetapi gateway tidak mampu melakukan apa pun selain IP tunggal -> pemetaan alamat MAC tunggal.

Kami memiliki mesin firewall tunggal, dan kami mengarahkan IP / port combo yang berbeda ke berbagai tempat di dalam DMZ.

Solusi kami sejauh ini adalah memiliki mesin virtual VMWare di firewall dengan 4 NIC tambahan di dalamnya, untuk mendapatkan 4 alamat IP lainnya ... namun kami memiliki masalah.

Gateway pada dasarnya melakukan ping ARP untuk melihat apakah IP merespons pada MAC yang diharapkan. Dengan 4 NIC semua pada LAN yang sama, linux merespons permintaan ARP untuk SEMUA IP menggunakan antarmuka tunggal. Bukan itu yang diharapkan gateway, dan ini mengacaukan 3 NIC lainnya. Gateway menolak untuk merutekan lalu lintas masuk untuk IP di mana hasil ping ARP bukan MAC yang diharapkan.

Bagaimana kita bisa mendapatkan balasan ARP untuk IP eth0 untuk keluar eth0, IP eth1 untuk keluar eth1, dll?

EDIT

Tanggapan Christopher Cashell tidak berfungsi dalam situasi ini. Saya memiliki harapan besar membacanya, tapi ... tidak.

EDIT 2

Terpecahkan! Lihat jawaban saya di bawah ini.

darron
sumber
PS - tidak ada komentar 'drop uverse' ... U-Verse adalah 18mbps, vs yang lainnya 3mbps atau 10mbps yang sangat tidak dapat diandalkan melalui kabel
darron
@dblack: Anda lupa menambahkan jawaban Anda :)
Mihai Limbăşan
Situs api.recaptcha.net turun sebentar. Jawabannya sudah habis sekarang.
darron

Jawaban:

13

Solusi pilihan Anda berfungsi, tetapi ada alternatif yang tidak melibatkan arptables. (Christopher Cashell berada di jalur yang benar, pada awalnya, tetapi ia pergi dengan smidge.)

Singkatnya, Anda ingin mengatur parameter ini:

net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

Ini harus tersedia ketika menjalankan kernel Linux 2.6 seri modern. Periksa dan pastikan Anda bahwa '/ proc / sys / net / ipv4 / conf / / arp_announce' dan / proc / sys / net / ipv4 / conf / / arp_ignore 'ada di sistem Anda.

Parameter 'arp_filter' hanya berfungsi ketika berbagai alamat IP Anda berbagi segmen LAN tetapi menggunakan subnet IP yang berbeda. Jika mereka juga berbagi subnet IP, Anda perlu menggunakan 'arp_ignore' dan 'arp_announce', seperti di atas.

(Saya yakin Anda juga perlu mengatur 'arp_filter' kembali ke '0' juga.)

Ryan B. Lynch
sumber
Apa yang terjadi dengan arp_filter? Itu adalah solusi awal (2003?) Untuk masalah ARP, tetapi tampaknya tidak berfungsi seperti yang dijelaskan, setidaknya pada Centos 5. arp_ignore dan arp_announce tampaknya baik.
pcapademic
Solusi ini, sebagaimana adanya, tampaknya hanya berfungsi pada level ARP. Tanpa pengaturan rute tambahan, firewall mungkin masih memilih kartu keluar yang salah (dan MAC) untuk lalu lintas IP keluarnya sendiri, tetapi akan (masih) selalu menerima lalu lintas IP yang masuk pada kartu yang tepat, yang mengarah ke jalur asimetris dan pertimbangan rp_filter.
AB
8

Oke, ini solusinya. Pertama, rekap:

Inilah rencana dasar jaringan saya:

 eth0 10.10.10.2 netmask 255.255.255.248
 eth1 10.10.10.3 netmask 255.255.255.248
 eth2 10.10.10.4 netmask 255.255.255.248
 eth3 10.10.10.5 netmask 255.255.255.248

Semua antarmuka tumpang tindih. Ini secara teknis salah, dan sumber dari semua kesengsaraan saya ... tapi saya harus melakukannya karena gateway perumahan bodoh ini.

Pertama, permintaan siaran ARP pergi ke semua ini. Karena semua 4 IP adalah alamat lokal yang valid, semua 4 antarmuka akan mencoba merespons.

1) instal arptables . Tambahkan tempat ini saat boot ( /etc/rc.local di sini):

arptables -F INPUT
arptables -A INPUT -i eth0 --destination-ip ! 10.10.10.2 -j DROP
arptables -A INPUT -i eth1 --destination-ip ! 10.10.10.3 -j DROP
arptables -A INPUT -i eth2 --destination-ip ! 10.10.10.4 -j DROP
arptables -A INPUT -i eth3 --destination-ip ! 10.10.10.5 -j DROP

Ini akan mencegah siaran masuk ke antarmuka yang salah. Jadi, antarmuka yang benar sekarang akan menjadi satu-satunya responden.

Itu saja tidak cukup. Bit berikutnya adalah masalah tabel ARP. PC yang meminta mungkin sudah memiliki entri tabel ARP, dan Linux akan menggunakan antarmuka yang terkait dengannya. Sampai entri tabel ARP berakhir, ia akan mencoba mengirim respons ARP menggunakan antarmuka entri itu, bukan yang terkait dengan permintaan ARP.

Opsi sysctl rp_filter tampaknya menolak paket respons ARP keluar jika mereka berada di antarmuka yang salah. Begitu...

2) Nonaktifkan rp_filter .

Pada Debian / Ubuntu, ini berarti mengomentari dua baris rp_filter di /etc/sysctl.d/10-network-security.conf .

Opsi ini diaktifkan karena suatu alasan ... yaitu untuk membantu mencegah serangan spoofing lintas-antarmuka. Saya membacanya memverifikasi bahwa paket itu legal untuk antarmuka yang masuk atau keluar (dengan menukar MAC dan IP dan melihat apakah masih merutekan melalui antarmuka yang sama). Jadi, biasanya itu ide yang buruk untuk mematikannya. Dalam kasus saya, semua antarmuka berada di jaringan yang sama ... sehingga pemeriksaan tidak menjadi masalah sama sekali.

Jika saya menambahkan antarmuka lain dan memerlukan perlindungan spoofing, mungkin dapat membuat beberapa entri arptables / iptables untuk melakukan hal yang sama.

darron
sumber
5

Ini ada hubungannya dengan cara Linux menangani IP dan NIC. Pada dasarnya, itu memperlakukan alamat IP seolah-olah itu milik kotak, dan bukan hanya NIC tertentu. Hasilnya adalah Anda bisa mendapatkan respons ARP dari alamat IP pada antarmuka yang tidak Anda harapkan.

Solusinya adalah opsi sysctl. Seingat saya, yang Anda cari adalah:

net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1

Itu akan memperbaiki masalah Anda. Cukup tambahkan mereka ke /etc/sysctl.conf dan jalankan ' sysctl -p' (atau jalankan setiap baris sebagai argumen untuk 'sysctl -w '.

Ini akan menyebabkan Linux hanya menanggapi permintaan ARP pada antarmuka yang ditugaskan untuk alamat IP.

Christopher Cashell
sumber
hmm ... sayangnya itu tidak berfungsi. Saya telah menempelkannya ke sysctl.conf, menjalankan sysctl, bahkan reboot, tidak ada perubahan. Saya bisa menambahkan opsi di / proc dan melihatnya sudah diatur, tetapi jika saya memilih dari kotak lain, semua respons datang dari MAC yang sama. Antarmuka semua berada di jaringan yang sama (siaran yang sama, dll) ...
darron
1
Ini adalah solusi yang tepat jika antarmuka berada di jaringan yang sama, tetapi memiliki alamat di subnet yang berbeda. Dikonfirmasi bekerja.
Alastair Irvine
0

Bisakah Anda menjembatani gateway dan meminta firewall menangani IP?


sumber
Sejauh yang saya mengerti, tidak ... tapi tolong tolong seseorang kalau saya salah.
darron