Saya punya robot yang menjalankan linux dengan adaptor berkabel dan nirkabel. Ketika saya boot, itu terhubung ke denda nirkabel. Ketika saya menetapkan IP ke kabel (baik secara statis atau dengan DHCP), sepertinya berfungsi. Seperti dalam, ifconfig
menunjukkan IP yang tepat dan route
menunjukkan rute yang tepat. Namun, ketika saya melakukan permintaan ARP dari IP kabel, jawaban ARP berisi MAC nirkabel.
??? Tidak ada jembatan yang berjalan di robot, jadi mengapa saya tidak mendapatkan MAC kabel ???
Ketika kabel terputus, IP kabel membalas ke ...
Mengapa robot membalas melalui antarmuka nirkabel untuk permintaan IP pada kabel ???
EDIT: baik adaptor berkabel dan nirkabel pada subnet IP yang sama. Saya melakukan permintaan ARP dari komputer (mencoba dengan komputer yang berbeda) pada subnet IP yang sama.
output ifconfig yang relevan:
eth0 Link encap:Ethernet HWaddr 00:01:C0:04:BD:F7
inet addr:192.168.0.110 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
ra0 Link encap:Ethernet HWaddr 24:3C:20:06:3E:6D
inet addr:192.168.0.101 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:59 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:31023598 (29.5 MiB) TX bytes:85640627 (81.6 MiB)
output rute yang relevan:
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ra0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Ini adalah linux yang sangat ketat, jadi saya tidak memiliki alat seperti artptables, iptables, sysctl, brctl, dll.
EDIT: diagram seperti yang diminta
EDIT: Saya membuang lalu lintas dan melihat tabel ARP. Permintaan ARP 192.168.0.110 mengembalikan balasan ARP yang berisi 24: 3C: 20: 06: 3E: 6D. Sumber MAC dari paket balasan ARP juga 24: 3C: 20: 06: 3E: 6D. Saya sudah mencoba mengutak-atik _filter, _ignore, dan _announce, seperti yang disebutkan di sini , tetapi tidak berhasil.
EDIT: mengatur gateway (di kedua antarmuka) tidak ada bedanya (sebagaimana seharusnya).
EDIT: ini bekerja dengan baik pada versi OS sebelumnya (berdasarkan openembedded). apakah mungkin mereka mengubah sesuatu?
Jawaban:
Apa yang Anda lihat adalah perilaku normal ketika Anda memiliki dua antarmuka di jaringan yang sama. Ini dijelaskan dalam artikel LWN ini .
sumber
Ketika Anda mengatakan Anda mendapatkan respons ARP untuk antarmuka yang salah, apakah Anda benar-benar membuang lalu lintas atau hanya melihat tabel ARP yang dihasilkan? Mungkin Anda mendapatkan balasan ARP untuk kedua antarmuka ...
Bagaimanapun, saya percaya jawaban untuk masalah Anda terletak pada memanipulasi
rp_filter
danarp_filter
. Dokumentasi untuk masing-masing termasuk di bawah ini.Saya sarankan terlebih dahulu mencoba ini:
Anda mungkin perlu melakukan perubahan ini juga:
Untuk perawatan yang lebih menyeluruh, lihat artikel ini:
http://www.embedded-bits.co.uk/tag/rp_filter/
sumber
Saya tahu ini adalah masalah lama tapi baru-baru ini saya menghadapi situasi yang sama persis dengan perangkat yang disematkan. Perangkat ini memiliki antarmuka ethernet dan wifi dan persyaratannya adalah bahwa kedua antarmuka dapat aktif dan pada jaringan yang sama setiap saat, tetapi lalu lintas jaringan harus dialihkan melalui antarmuka "pilihan".
Sebagian besar pengguna tidak akan mengonfigurasi perangkat di sana dengan cara ini, tetapi secara teori itu harus dimungkinkan.
Kami pertama kali mengangkat masalah dengan router Netgear karena mereka akan melaporkan konflik Alamat IP - 2 alamat MAC berbagi satu IP. Tampaknya router akan mulai berperilaku buruk dalam skenario ini dan mengacaukan jaringan pengguna.
Saya membuat jaringan pribadi yang hanya berisi router (ethernet + wifi), windows laptop (hanya Ethernet), dan perangkat tertanam (ethernet + wifi). Menggunakan wireshark, tcpdump di perangkat, dan arp di windows saya bisa melihat perilaku berikut:
Saya percaya bahwa item 3 disebabkan oleh item 5. Tabel arp sedang kacau karena wln menanggapi pesan arp yang hanya harus merespon eth0. Saya percaya item 4 juga disebabkan oleh item 5. Ping dikirim berdasarkan alamat MAC dan karena pesan arp terakhir yang diterima dari wln mengatakan ia memiliki IP eth0, ping diarahkan secara tidak benar ke antarmuka wln.
Setelah banyak menggali dan menguji solusinya sebenarnya sangat sederhana. Lihat artikel ini - http://blog.cj2s.de/archives/29-Preventing-ARP-flux-on-Linux.html
Driver jaringan kernel Linux dikonfigurasi sedemikian rupa sehingga ketika permintaan arp diterima untuk antarmuka yang dikenal (bahkan jika diterima pada antarmuka lain) itu akan merespons ke arp.
Pengaturan ini menyelesaikan masalah:
echo 1 > /proc/sys/net/ipv4/conf/wln/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
Penjelasan:
sumber
Karena ini bekerja dengan baik pada versi OS sebelumnya (berdasarkan openembedded), solusi saya adalah menunggu versi OS berikutnya. Tebakan terbaik saya adalah bahwa modul kernel nirkabel bermasalah.
sumber
Menindaklanjuti komentar Insyte.
Mari kita beri nama:
Untuk robot Anda dapat dijangkau dari 3 PC melalui media kabel dan nirkabel. Dan karena mereka berada di subnet yang sama, Anda tidak bisa memastikan bahwa ke arah mana permintaan arp untuk media kabel Anda telah melewati. Maksud saya adalah ketika saklar menyiarkan permintaan arp, robot Anda menerimanya di kedua antarmuka [mengacu pada diagram Anda] sehingga untuk itu menerima permintaan arp untuk IP pada media kabel pada media nirkabel juga kemungkinannya adalah itu menjawab dengan alamat fisik media nirkabel untuk kotak memang memiliki IP yang dikonfigurasi di dalamnya
Saya memiliki masalah ini di masa lalu, itu tidak tepat untuk Anda tetapi serupa. Secara default, linux membalas dengan alamat fisik antarmuka yang menerima permintaan arp terlepas dari antarmuka mana IP dikonfigurasi. Jadi, dalam kasus Anda, sambungkan PC3 ke antarmuka eth0 robot secara langsung dan lakukan permintaan arp untuk 192.168.0.101 itu akan menjawab Anda dengan alamat fisik antarmuka eth0 alih-alih ra0.
Skenario penerapan saya adalah:
[RTR] | ------------ eth0 --- [server]
| -------- | switch1 | ----- eth1 ----- [server]
Saklar yang sama, yang terhubung dengan kedua antarmuka. Semoga itu akan membantu Anda.
Router memiliki alamat IP primer dan sekunder yang dikonfigurasi pada antarmuka untuk dua jaringan yang berbeda pada dua antarmuka yang berbeda di server. Tetapi menerima permintaan arp pada eth1 untuk alamat IP eth0 itu menjawab dengan alamat fisik eth1
Untuk mencegahnya, berikut ini sejauh ini berhasil bagi saya
letakkan di suatu tempat di robot Anda sehingga Anda bisa menerapkannya saat boot.
Rekomendasi: Saya akan merekomendasikan Anda memiliki dua subnet yang berbeda dikonfigurasikan (katakanlah 192.168.1.x / 24 pada ra0 dan 192.168.2.x / 24 pada eth0) Anda dapat menggunakan alias IP pada PC Anda dan robot Anda akan dapat diakses melalui semua dari dua IP. Anda tidak dapat memiliki dua jalur keluar untuk subnet yang sama pada host yang sama. Tidak, kecuali ada sesuatu yang membuat robot Anda lebih suka satu daripada yang lain. Robot Anda hanya dapat mengambil satu jalur untuk mengirim paket.
Beberapa bacaan: arp_announce , arp_ignore
sumber
saya pikir ada kesalahan konfigurasi antara AP nirkabel Anda dan sakelar Anda. beralih dan AP semakin bingung ke mana harus mengirim paket. tidak yakin tentang ini. juga, saya pikir Anda harus mencoba mendefinisikan gateway di mana program bisa tahu ke mana harus mengirim paket. sesuatu seperti
route add default gw 192.168.0.1
sumber