ARP yanıtları yanlış MAC adresi içeriyor


14

Kablolu ve kablosuz adaptörlerle linux çalıştıran bir robotum var. Ben önyükleme yaptığımda, kablosuz para cezasına bağlanır. Kabloluya bir IP atadığımda (statik veya DHCP ile), çalışıyor gibi görünüyor. Olduğu gibi, ifconfiguygun bir IP routegösterir ve uygun yolları gösterir. Ancak, kablolu IP'den bir ARP isteği yaptığımda, ARP yanıtı kablosuz MAC'i içerir.

??? Robot üzerinde çalışan bir köprü yok, neden kablolu MAC'i alamıyorum ???

Kablo bağlantısı kesildiğinde, kablolu IP ping'e yanıt verir ...

Robot neden kablosuz arabirim üzerinden kablolu IP isteklerine yanıt veriyor ???

EDIT: aynı IP alt ağındaki hem kablolu hem de kablosuz bağdaştırıcılar. Aynı IP alt ağındaki bir bilgisayardan (farklı bilgisayarlarla denenmiş) bir ARP isteği yapıyorum.

ilgili ifconfig çıktısı:

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)

ilgili güzergah çıktısı:

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

Bu çok kesin bir linux, bu yüzden artptables, iptables, sysctl, brctl vb.Gibi araçlara sahip değilim.

EDIT: istendiği gibi diyagram

ağ diyagramı

EDIT: Ben trafik damping ve ARP tabloya bakıyorum. 192.168.0.110 ARP isteği 24: 3C: 20: 06: 3E: 6D içeren bir ARP cevabı döndürür. ARP yanıt paketinin kaynak MAC'si de 24: 3C: 20: 06: 3E: 6D'dir. Burada belirtildiği gibi _filter, _ignore ve _announc ile uğraşmayı denedim , ancak boşuna.

EDIT: (her iki arabirimde) bir ağ geçidi ayarlamak fark etmez (olması gerektiği gibi).

EDIT: Bu işletim sisteminin önceki bir sürümü üzerinde iyi çalıştı (openembedded dayalı). bir şeyleri değiştirmek mümkün mü?


5
belki bir diyagram serin olurdu ve içine bir robot koyabilirsiniz ... ekstra serin puan
Unix Kapıcı

Kablolu ve kablosuz bağdaştırıcılar aynı IP alt ağında mı? Nereden "ARP talebi yapıyorsunuz?" 'İfconfig' sonuçlarını dahil etmek ve yönlendirme tablonuzu göstermek yardımcı olabilir.
Dave

Bu hiç çözüldü mü? Benzer bir sorun görüyorum ve çözümü tam olarak bulamadım.
Kirk

1
kablosuz kart için çekirdek modülünün bozuk olduğuna inanıyorum.
Jayen

1
Soru neden bunu yapıyorsunuz ... Robotun mobil olduğu zaman konuşabilmesi için istediğinizi tahmin ediyorum, ancak bir Ethernet kablosu taktığınızda yüksek aktarım hızları elde edebilirsiniz? Eğer öyleyse, kablolu ve kablosuz arayüzleri bağlamayı, her ikisini de aynı IP'ye koymayı ve sonra kablolu çalışmışsa öncelik kazanacak, ancak trafik kablosuz değilse trafik geçecek şekilde yapılandırmayı düşündünüz mü? Dizüstü bilgisayarımı bu şekilde ayarladım ve harika çalıştı, ama şimdi 2Mbps yerine 300Mbps kablosuz var, bu yüzden artık yapmıyorum.
Sean Reifschneider

Yanıtlar:


12

Gördüğünüz, aynı ağda iki arabiriminiz olduğunda normal davranıştır. Bu LWN makalesinde açıklanmaktadır .


arp_filter ayarının bir etkisi yoktur. neden olmasın?
Jayen

1
Her iki arabiriminizin de yerel ağa yolları olduğundan, linux IP'lerinizden herhangi birinden arabirimlerinizden paketler gönderir. Böylece her iki arabirimden IP'lerinizden biri için ARP isteklerini yanıtlayacaktır. Bunu değiştirmek için sadece arp_filter öğesini 1 olarak ayarlamamanız, ayrıca kaynak tabanlı yönlendirmeyi etkinleştirmeniz ve her IP için trafiğin istediğiniz arabirimden çıkmasını sağlayan yönlendirme tablolarını ayarlamanız gerekir. Sahip olduğunuzdan biraz farklı bir senaryo, ancak wlug.org.nz/SourceBasedRouting size yardımcı olabilir.
sciurus

4

Yanlış arayüz için bir ARP yanıtı aldığınızı söylediğinizde, aslında trafiği mi döküyorsunuz yoksa sadece ortaya çıkan ARP tablosuna mı bakıyorsunuz? Her iki arayüz için de ARP cevapları almanız mümkün ...

Her neyse, sorunun cevabının doğru bir şekilde manipüle edilmesinde rp_filterve olduğuna inanıyorum arp_filter. Her biri için dokümantasyon aşağıda yer almaktadır.

Önce şunu denemenizi öneririm:

echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter

Sen olabilir kuyu olarak bu değişikliği yapmak gerekir:

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
rp_filter - BOOLEAN
    1 - RFC1812'de belirtildiği gibi ters yolla kaynak doğrulaması yapın
        Tek bir ana bilgisayar ve saplama ağı için önerilen seçenek
        yönlendiriciler. Karmaşık (sorunsuz) için sorunlara neden olabilir
        yavaş ve güvenilir olmayan bir protokol çalıştıran ağlar (bir çeşit RIP),
        veya statik yollar kullanarak.

    0 - Kaynak doğrulaması yok.

    Kaynak doğrulaması yapmak için conf / all / rp_filter da TRUE olarak ayarlanmalıdır
    arayüzde

    Varsayılan değer 0'dır. Bazı dağıtımların bunu etkinleştirdiğini unutmayın
    başlangıç ​​komut dosyalarında.

arp_filter - BOOLEAN
    1 - Aynı anda birden fazla ağ arayüzüne sahip olmanızı sağlar
    ve her arabirim için ARP'lerin yanıtlanmasını sağlayın
    çekirdeğin bir paketi yönlendirip yönlendirmeyeceğine bağlı olarak
    ARP'd IP'yi bu arayüzden çıkardı (bu nedenle kaynak kullanmalısınız
    bunun işe yaraması için yönlendirilmiş yönlendirme). Başka bir deyişle kontrole izin verir
    hangi kartların (genellikle 1) bir arp talebine cevap vereceğini belirtir.

    0 - (varsayılan) Çekirdek, adresli arp isteklerine yanıt verebilir
    diğer arayüzlerden. Bu yanlış görünebilir, ancak genellikle
    anlamda başarılı iletişim şansını arttırır.
    IP adresleri, Linux'taki tüm ana bilgisayara aittir;
    belirli arayüzler. Yalnızca yük gibi daha karmaşık kurulumlar için
    dengeleme, bu davranış sorunlara neden olur.

    Arabirim için arp_filter,
    conf / {all, interface} / arp_filter TRUE olarak ayarlanmış,
    aksi takdirde devre dışı bırakılacak

Daha kapsamlı bir tedavi için bu makaleye bakın:

http://www.embedded-bits.co.uk/tag/rp_filter/


1
Trafiği boşaltıyorum ve ARP masasına bakıyorum. 192.168.0.110 ARP isteği 24: 3C: 20: 06: 3E: 6D içeren bir ARP cevabı döndürür. Paketin kaynak MAC'si de 24: 3C: 20: 06: 3E: 6D'dir. Önerilen filtre ayarlarınızın her ikisini de denedim, ancak boşuna. Ayrıca burada belirtildiği gibi _ignore ve _announc ile oynamayı denedim .
Jayen

4

Bunun eski bir sorun olduğunu biliyorum, ancak yakın zamanda gömülü bir cihazla aynı durumla karşılaştım. Cihaz hem ethernet hem de wifi arayüzüne sahiptir ve gereklilikler her iki arayüzün de her zaman aktif ve aynı ağda olabilmesi, ancak ağ trafiğinin "tercih edilen" arayüz üzerinden yönlendirilmesi gerektiğidir.

Çoğu kullanıcı orada cihazları bu şekilde yapılandırmaz, ancak teorik olarak mümkün olmalıdır.

İlk olarak Netgear yönlendiricileriyle ilgili sorunları aldık çünkü bir IP Adresi çakışması bildireceklerdi - 2 MAC adresi tek bir IP paylaşıyordu. Görünüşe göre yönlendirici bu senaryoda kötü davranmaya başlayacak ve kullanıcı ağını bozacaktır.

Yalnızca yönlendirici (ethernet + wifi), windows dizüstü bilgisayar (yalnızca Ethernet) ve katıştırılmış cihazı (ethernet + wifi) içeren özel bir ağ oluşturdum. Wireshark, cihazda tcpdump ve pencerelerde arp kullanarak aşağıdaki davranışı görebiliyorum:

  1. Cihazdaki ifconfig, farklı wln ve Ethernet IP'leri ve farklı MAC adresleri gösterir
  2. Bazen (çok nadiren) ve arp –a pencerelerden doğru IP-MAC kombinasyonunu gösterir.
  3. Çoğu zaman pencerelerden arp –a hem wln hem de eth0'ın aynı MAC adresine sahip olduğunu gösterir
  4. Pencerelerden wln veya eth0'a ping işlemi uygularken, ping yanıtı wln'den ve çok nadiren eth0'dan gelir. tcpdump, wln'in 4 ping'in sadece 1'ine yanıt verdiğini gösterir (örneğin)
  5. Windows eth0 IP'si için bir arp "sahip" iletisi gönderdiğinde - hem eth0 hem de wln arabirimleri bu IP'ye sahip olduklarını söyleyerek yanıt verir

Ben madde 3 madde 5 neden olduğuna inanıyorum. Wln sadece eth0 cevap vermesi gereken arp mesajlarına yanıt veriyor çünkü arp tabloları berbat ediliyor. Ben madde 4 de madde 5 neden olduğuna inanıyorum. Ping MAC adresine göre gönderilir ve alınan son arp mesajı ethn IP olduğunu söyleyerek wln olduğu için, pingler yanlış wln arayüzüne yönlendirilir.

Çok kazma ve testten sonra çözüm gerçekten çok basitti. Bu makaleye bakın - http://blog.cj2s.de/archives/29- Önleme - ARP - flux-on - Linux.html

Linux çekirdek ağ sürücüleri, bilinen bir arabirim için bir arp isteği alındığında (başka bir arabirimde alınsa bile) arp'ye yanıt verecek şekilde yapılandırılır.

Bu ayar sorunu çözer:

echo 1 > /proc/sys/net/ipv4/conf/wln/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

Açıklama:

arp_ignore - INTEGER
Define different modes for sending replies in response to
received ARP requests that resolve local target IP addresses:
0 - (default): reply for any local target IP address, configured
on any interface
1 - reply only if the target IP address is local address
configured on the incoming interface
2 - reply only if the target IP address is local address
configured on the incoming interface and both with the
sender's IP address are part from same subnet on this interface
3 - do not reply for local addresses configured with scope host,
only resolutions for global and link addresses are replied

Çok bilgilendirici bir cevap, ancak OP'nin dediği gibi, bunu denedi ve benzer cevapla bağlantılı serverfault.com/a/30648/57200
Jayen

1

Bu, işletim sisteminin önceki bir sürümünde (openembedded tabanlı) iyi çalıştığından, çözümüm işletim sisteminin bir sonraki sürümünü beklemekti. En iyi tahminim kablosuz çekirdek modülünün buggy olmasıydı.


Muhtemelen, karşılaştığınız davranışın @sciurus tarafından belirtildiği gibi olması bekleniyor. "Güzel çalıştı" önceki sürüm buggy biri olabilir ve onlar düzeltilmiş olabilir :-). Aslında, en son cevap veren hangisi uzak uçtaki ARP tablosuna yapışır. Kablosuz büyük olasılıkla kabloludan daha yavaş olduğu için kablosuz bağlantı elde edersiniz.
Sean Reifschneider

0

Insyte'nin yorumunu takip etmek.

Bazı isimler yapalım:

  • PC1 - Sağ Üst
  • PC2 - Sol Üst
  • PC3 - Sol Alt

Robotunuza hem kablolu hem de kablosuz medya aracılığıyla 3 PC'den erişebilirsiniz. Ve aynı alt ağda oldukları için, kablolu medyanız için arp isteğinin hangi yoldan geçtiğini kesin olarak söyleyemezsiniz. Bir arp isteği için anahtar yayınları, Robotun iki arayüzde üzerine aldığında ne demek olduğunu By o kablolu medyada IP için arp isteği alır için çok [çizgenize atıfta] kablosuz medya da şansı kutunun içinde kablosuz IP'nin fiziksel adresi ile cevaplanan IP'de yapılandırılmış

Geçmişte bu sorunu yaşadım, sizinkiyle tam olarak aynı değildi ama benzerdi. Varsayılan olarak linux, IP'nin hangi arabirime yapılandırıldığına bakılmaksızın, arp isteğini alan arabirimin fiziksel adresiyle yanıt verir. Bu durumda PC3'ü doğrudan robotun eth0 arayüzüne bağlayın ve 192.168.0.101 için bir arp isteği yapın, size ra0 yerine eth0 arayüzünün fiziksel adresi ile cevap verecektir.

Dağıtım senaryom:

[RTR] | ------------ eth0 --- [sunucu]
| -------- | switch1 | ----- eth1 ----- [sunucu]

Her iki arabirimin de bağlandığı aynı anahtar. Size yardımcı olacağını umuyoruz.

Yönelticinin, sunucudaki iki farklı arabirimdeki iki farklı ağ için arabiriminde yapılandırılmış birincil ve ikincil IP adresi vardı. Ancak eth0'ın IP adresi için eth1 hakkında bir arp talebi almak, eth1'in fiziksel adresiyle cevap verdi

Bunu önlemek için şu ana kadar benim için çalıştı

# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/ra0/arp_announce
# echo 1 > /proc/sys/net/ipv4/conf/ra0/arp_ignore

robotunuzda bir yere koyun, böylece önyüklemede uygulanmasını sağlayabilirsiniz.

Öneriler: İki farklı alt ağın yapılandırılmasını öneririm (örneğin ra0 üzerinde 192.168.1.x / 24 ve eth0 üzerinde 192.168.2.x / 24) PC'nizde IP takma adları kullanabilirsiniz ve robotunuza herhangi bir yerden erişebilirsiniz iki IP'nin. Aynı ana bilgisayarda aynı alt ağ için iki giden yolunuz olamaz. Robotunuzu birbirini tercih eden bir şey olmadığı sürece olmaz. Robotunuz, paketleri göndermek için yalnızca bir yol alabilir.

Bazı okumalar: arp_announc , arp_ignore


arp_announc & arp_ignore benim için çalışmadı. insyte'nin çözümü hakkındaki yorumuma bakın. İki farklı alt ağ maalesef bir seçenek değil. Ayrıca, sorumun son düzenlemesine göre, bu işletim sisteminin önceki bir sürümünde iyi çalıştı, bu yüzden aynı ana bilgisayarda aynı alt ağ için iki giden yola sahip olabilirim.
Jayen

-2

kablosuz AP'niz ve anahtarınız arasında bir yanlış yapılandırma olduğunu düşünüyorum. switch ve AP paketlerin nereye gönderileceği konusunda kafası karışıyor. bu konuda emin değilim. Ayrıca, programların nereye paket göndereceğini bildikleri bir ağ geçidi tanımlamaya çalışmanız gerektiğini düşünüyorum. gibi bir şey

route add default gw 192.168.0.1


hem kablolu hem de kablosuz dizüstü bilgisayarlar iyi çalışıyor, bu yüzden AP veya anahtar değil. Ayrıca, bir ağ geçidi sadece alt ağın dışına almaya çalışırken gerekli. (Yine de denedim ve hiçbir şey değişmez. ağ geçidi eth0 veya ra0'a eklersem önemli değil.)
Jayen

eth0'ınızda RX / TX yoktur, bazı yapılandırmaları gösterir. hata?
fmysky

hrm, sanırım bu doğru. eth0 bir yayın olduğu için en azından ARP talebini almalı, değil mi?
Jayen

Evet, düşündüğüm bu
fmysky

Bu makaledeki arp problemi sadece 2.4.x çekirdeklerini etkiliyor gibi görünüyor
fmysky
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.