ARP उत्तरों में गलत MAC पता होता है


14

मुझे वायर्ड और वायरलेस एडेप्टर के साथ एक रोबोट चलने वाला लिनक्स मिला है। जब मैं बूट करता हूं, तो यह वायरलेस फाइन से कनेक्ट होता है। जब मैं वायर्ड को एक आईपी असाइन करता हूं (या तो सांख्यिकीय रूप से या डीएचसीपी के साथ), तो ऐसा लगता है कि यह काम करता है। जैसा कि, ifconfigएक उचित आईपी routeदिखाता है और उचित मार्ग दिखाता है। हालाँकि, जब मैं वायर्ड IP का ARP अनुरोध करता हूं, तो ARP उत्तर में वायरलेस मैक शामिल होता है।

??? रोबोट पर कोई पुल नहीं चल रहा है, तो मुझे वायर्ड मैक क्यों नहीं मिल रहा है ???

जब तार काट दिया जाता है, तो वायर्ड आईपी पिंग का जवाब देता है ...

वायर्ड पर आईपी अनुरोधों को वायरलेस इंटरफ़ेस पर रोबोट क्यों जवाब दे रहा है ???

संपादित करें: एक ही आईपी सबनेट पर वायर्ड और वायरलेस एडेप्टर दोनों। मैं एक ही IP सबनेट पर एक कंप्यूटर (विभिन्न कंप्यूटरों के साथ आजमाया हुआ) से ARP अनुरोध करता हूं।

प्रासंगिक ifconfig आउटपुट:

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)

प्रासंगिक मार्ग आउटपुट:

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

यह बहुत ही कटिंग लाइनक्स है, इसलिए मेरे पास आर्टप्टेबल्स, आईपीटेबल्स, एससीएक्टल, ब्रेटल आदि जैसे उपकरण नहीं हैं।

संपादित करें: अनुरोध के अनुसार आरेख

नेटवर्क आरेख

EDIT: मैं ट्रैफ़िक डंप कर रहा हूं और ARP टेबल देख रहा हूं। 192.168.0.110 का ARP अनुरोध ARP उत्तर देता है जिसमें 24: 3C: 20: 06: 3E: 6D होता है। ARP उत्तर पैकेट का स्रोत MAC भी 24: 3C: 20: 06: 3E: 6D है। मैंने _filter, _ignore और _announce के साथ फ़िडलिंग की कोशिश की है, जैसा कि यहां बताया गया है , लेकिन कोई फायदा नहीं हुआ।

संपादित करें: (या तो इंटरफ़ेस पर) एक प्रवेश द्वार की स्थापना कोई फर्क नहीं पड़ता (जैसा कि यह नहीं होना चाहिए)।

EDIT: इसने OS के पिछले संस्करण (ओपनमेडबेड पर आधारित) पर ठीक काम किया। क्या यह संभव है कि उन्होंने कुछ बदला है?


5
शायद एक आरेख शांत होगा, और आप इसमें एक रोबोट डाल सकते हैं ... अतिरिक्त शांत अंक
यूनिक्स जेनिफर

क्या दोनों एक ही आईपी सबनेट पर वायर्ड और वायरलेस एडेप्टर हैं? आप "एआरपी अनुरोध" कहां से करते हैं? यह 'ifconfig' के परिणामों को शामिल करने और अपनी रूटिंग तालिका दिखाने में मदद कर सकता है।
डेव

क्या यह कभी हल हुआ? मैं एक समान मुद्दा देख रहा हूं, और संकल्प को खोजने में पूरी तरह असमर्थ हूं।
कर्क

1
मेरा मानना ​​है कि वायरलेस कार्ड के लिए कर्नेल मॉड्यूल टूट गया था।
जायें

1
सवाल यह है कि आप ऐसा क्यों कर रहे हैं ... मैं अनुमान लगा रहा हूं कि आप इसे चाहते हैं ताकि जब रोबोट मोबाइल हो तो वह बात कर सके, लेकिन जब आप ईथरनेट केबल में प्लग करते हैं तो आप उच्च अंतरण गति प्राप्त कर सकते हैं? यदि हां, तो क्या आपने वायर्ड और वायरलेस इंटरफेस को जोड़कर, उन दोनों को एक ही आईपी पर रखा है, और फिर इसे कॉन्फ़िगर किया जा रहा है ताकि अगर वायर्ड हो, तो इसे प्राथमिकता मिल जाए, लेकिन अगर ट्रैफिक वायरलेस पर नहीं जाता है? मैं अपना लैपटॉप इस तरह सेट करता था और यह बहुत अच्छा काम करता था, लेकिन अब मेरे पास 2Mbps की बजाय 300Mbps वायरलेस है, इसलिए मैं ऐसा नहीं करता।
सीन रिफ़्स्चाइडर

जवाबों:


12

जब आप देख रहे हैं सामान्य व्यवहार है जब आपके पास एक ही नेटवर्क पर दो इंटरफेस हैं। यह इस LWN लेख में वर्णित है ।


arp_filter सेट करने का कोई प्रभाव नहीं है। क्यों नहीं?
Jayen

1
चूँकि आपके दोनों इंटरफेस में लोकल नेटवर्क के रूट हैं, लिनेक्स आपके दोनों में से किसी एक आईपीएस से पैकेट भेजेगा। इस प्रकार यह दोनों इंटरफेस से आपके आईपी में से किसी के लिए एआरपी अनुरोधों का जवाब देगा। इसे बदलने के लिए, आपको केवल arp_filter को 1 पर सेट नहीं करना चाहिए, आपको स्रोत-आधारित रूटिंग को भी सक्षम करना होगा और राउटिंग टेबल सेट करना होगा जो सुनिश्चित करें कि प्रत्येक आईपी के लिए ट्रैफ़िक आपके इच्छित इंटरफ़ेस से बाहर हो जाए। आपके पास जो है, उससे थोड़ा अलग परिदृश्य है, लेकिन wlug.org.nz/SourceBasedRout आपकी मदद कर सकता है।

4

जब आप कहते हैं कि आपको गलत इंटरफ़ेस के लिए एआरपी प्रतिक्रिया मिल रही है, तो क्या आप वास्तव में ट्रैफ़िक डंप कर रहे हैं या केवल परिणामी एआरपी टेबल देख रहे हैं? यह संभव है कि आप दोनों इंटरफेस के लिए एआरपी उत्तर प्राप्त कर रहे हैं ...

वैसे भी, मेरा मानना ​​है कि आपकी समस्या का जवाब ठीक से हेरफेर करने में है rp_filterऔर arp_filter। उनमें से प्रत्येक के लिए प्रलेखन नीचे शामिल है।

मेरा सुझाव है कि यह पहली कोशिश:

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

आपको यह परिवर्तन करने की आवश्यकता हो सकती है:

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
rp_filter - BOOLEAN
    1 - RFC1812 में निर्दिष्ट उल्टे रास्ते से स्रोत सत्यापन करें
        सिंगल होम्ड होस्ट और स्टब नेटवर्क के लिए अनुशंसित विकल्प
        रूटर। जटिल के लिए परेशानी पैदा कर सकता है (लूप मुक्त नहीं)
        धीमे अविश्वसनीय प्रोटोकॉल (आरआईपी की तरह) चलाने वाले नेटवर्क,
        या स्थिर मार्गों का उपयोग करना।

    0 - कोई स्रोत सत्यापन नहीं।

    conf / all / rp_filter को स्रोत सत्यापन करने के लिए TRUE पर सेट किया जाना चाहिए
    इंटरफ़ेस पर

    डिफ़ॉल्ट मान 0. नोट है कि कुछ वितरण इसे सक्षम करते हैं
    स्टार्टअप स्क्रिप्ट में।

arp_filter - BOOLEAN
    1 - आप एक ही पर कई नेटवर्क इंटरफेस की अनुमति देता है
    सबनेट, और प्रत्येक इंटरफ़ेस के लिए एआरपी का जवाब दिया जाना चाहिए
    कर्नेल एक पैकेट को रूट करेगा या नहीं, इसके आधार पर
    ARP'd ने उस इंटरफ़ेस को IP किया है (इसलिए आपको स्रोत का उपयोग करना चाहिए
    इस काम के लिए आधारित मार्ग)। दूसरे शब्दों में यह नियंत्रण की अनुमति देता है
    जिनमें से कार्ड (आमतौर पर 1) एक arp अनुरोध का जवाब देंगे।

    0 - (डिफ़ॉल्ट) कर्नेल पते के साथ अनुरोधों का जवाब दे सकता है
    अन्य इंटरफेस से। यह गलत लग सकता है लेकिन यह आमतौर पर बनाता है
    भावना, क्योंकि यह सफल संचार की संभावना को बढ़ाता है।
    IP पते लिनक्स पर पूर्ण होस्ट द्वारा स्वामित्व में हैं, द्वारा नहीं
    विशेष रूप से इंटरफेस। केवल अधिक जटिल सेटअप जैसे लोड के लिए-
    संतुलन, क्या यह व्यवहार समस्याओं का कारण बनता है।

    इंटरफ़ेस के लिए arp_filter कम से कम एक होने पर सक्षम हो जाएगा
    conf / {सभी, इंटरफ़ेस} / arp_filter TRUE पर सेट है,
    यह अन्यथा अक्षम हो जाएगा

अधिक गहन उपचार के लिए, यह लेख देखें:

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


1
मैं ट्रैफ़िक डंप कर रहा हूं और ARP टेबल को देख रहा हूं। 192.168.0.110 का ARP अनुरोध ARP उत्तर देता है जिसमें 24: 3C: 20: 06: 3E: 6D होता है। पैकेट का स्रोत मैक भी 24: 3C: 20: 06: 3E: 6D है। मैंने आपकी सुझाई गई दोनों फ़िल्टर सेटिंग की कोशिश की है, लेकिन कोई फायदा नहीं हुआ। मैंने भी _ignore और _announce के साथ खेलने की कोशिश की है, जैसा कि यहाँ बताया गया है
जयन

4

मुझे पता है कि यह एक पुराना मुद्दा है लेकिन मैंने हाल ही में एक एम्बेडेड डिवाइस के साथ सटीक स्थिति का सामना किया। डिवाइस में एक ईथरनेट और वाईफाई इंटरफ़ेस होता है और आवश्यकताएं होती हैं कि दोनों इंटरफेस किसी भी समय सक्रिय और एक ही नेटवर्क पर हो सकते हैं, लेकिन नेटवर्क ट्रैफ़िक को "पसंदीदा" इंटरफ़ेस के माध्यम से रूट किया जाना चाहिए।

अधिकांश उपयोगकर्ता इस तरह से उपकरणों को कॉन्फ़िगर नहीं करेंगे, लेकिन सिद्धांत रूप में यह संभव होना चाहिए।

हमने पहले नेटगियर रूटर्स के साथ मुद्दों को उठाया क्योंकि वे एक आईपी एड्रेस संघर्ष की रिपोर्ट करेंगे - 2 मैक पते एक आईपी साझा कर रहे थे। जाहिर है कि राउटर इस परिदृश्य में बुरा व्यवहार करना शुरू कर देगा और उपयोगकर्ताओं के नेटवर्क को गड़बड़ कर देगा।

मैंने एक निजी नेटवर्क बनाया जिसमें केवल राउटर (ईथरनेट + वाईफाई), विंडोज़ लैपटॉप (ईथरनेट केवल), और एम्बेडेड डिवाइस (ईथरनेट + वाईफाई) शामिल थे। वायरशार्क का उपयोग करना, डिवाइस पर tcpdump, और विंडोज़ पर arp मैं निम्नलिखित व्यवहार देख सकते हैं:

  1. डिवाइस पर ifconfig अलग wln और ईथरनेट आईपी और अलग मैक पते दिखाता है
  2. कभी-कभी (बहुत कम ही) और विंडोज़ से arp -a सही IP-MAC संयोजन दिखाता है।
  3. विंडोज़ से अधिकांश समय arp –a दोनों में पता चलता है कि wln और eth0 में एक ही मैक एड्रेस है
  4. खिड़कियों से या तो wln या eth0 को पिंग करते समय, पिंग प्रतिक्रिया wln से आती है और बहुत कम ही eth0 से आती है। tcpdump wln को केवल 4 पिंग्स में से 1 के लिए प्रतिसाद देता है (उदाहरण के लिए)
  5. जब विंडोज़ एक आर्पीपी भेजता है जिसके पास eth0 आईपी के लिए संदेश है - दोनों eth0 और wln इंटरफेस प्रतिक्रिया देते हुए कहते हैं कि यह IP है:

मेरा मानना ​​है कि आइटम 3 आइटम 5 के कारण होता है। आरपी टेबल को गड़बड़ किया जा रहा है क्योंकि डब्ल्यूएलएन एआरपी संदेशों का जवाब दे रहा है जो केवल एथ0 को जवाब देना चाहिए। मेरा मानना ​​है कि आइटम 4 भी आइटम 5 के कारण होता है। पिंग को मैक पते के आधार पर भेजा जाता है और चूंकि प्राप्त अंतिम एआरपी संदेश wln से था, जिसमें यह कहा गया है कि इसमें eth0 IP है, पिंग को गलत तरीके से wln इंटरफ़ेस में रूट किया गया है।

बहुत खुदाई और परीक्षण के बाद समाधान वास्तव में सरल था। इस लेख को देखें - http://blog.cj2s.de/archives/29-Preventing-ARP-flux-on-Linux.html

लिनक्स कर्नेल नेटवर्क ड्राइवरों को इस तरह से कॉन्फ़िगर किया गया है कि जब किसी ज्ञात इंटरफ़ेस के लिए एक arp अनुरोध प्राप्त होता है (भले ही यह किसी अन्य इंटरफ़ेस पर प्राप्त होता है) तो यह arp का जवाब देगा।

यह सेटिंग समस्या का समाधान करती है:

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

स्पष्टीकरण:

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

बहुत जानकारीपूर्ण जबाब, लेकिन जैसा कि ओ पी ने कहा, वह करने की कोशिश की है कि और इसी तरह के जवाब से जुड़ा हुआ serverfault.com/a/30648/57200
जायें

1

चूंकि यह OS के पिछले संस्करण (ओपनमेडबेड पर आधारित) पर ठीक काम करता था, मेरा समाधान OS के अगले संस्करण की प्रतीक्षा करना था। मेरा सबसे अच्छा अनुमान था कि वायरलेस कर्नेल मॉड्यूल छोटी गाड़ी थी।


वास्तव में, चूंकि आप जो व्यवहार अनुभव कर रहे हैं, वह @sciurus द्वारा उल्लिखित है। यह हो सकता है कि पिछली रिलीज जहां यह "ठीक काम किया" छोटी गाड़ी थी और उन्होंने इसे ठीक कर लिया है :-)। वास्तव में, यह सिर्फ एक है जो किसी के अंतिम जवाब देता है वह है जो दूरस्थ छोर पर एआरपी तालिका में चिपक जाता है। चूंकि वायरलेस वायर्ड की तुलना में धीमा है, आप वायरलेस प्राप्त करने जा रहे हैं।
सीन रिफ़्स्चाइडर

0

Insyte की टिप्पणी के बाद।

कुछ नामकरण करें:

  • पीसी 1 - टॉप राइट
  • PC2 - टॉप लेफ्ट
  • PC3 - नीचे बाएँ

आपके लिए आपका रोबोट 3 पीसी से वायर्ड और वायरलेस मीडिया दोनों के माध्यम से उपलब्ध है। और वे एक ही सबनेट पर हैं, आप यह सुनिश्चित करने के लिए नहीं कह सकते हैं कि आपके वायर्ड मीडिया के लिए arp अनुरोध किस तरह से गुजरा है। तक क्या मेरा मतलब है जब एक एआरपी अनुरोध के लिए स्विच प्रसारण, अपने रोबोट दोनों इंटरफेस पर यह प्राप्त करता है कि इतने [अपने चित्र की चर्चा करते हुए] के लिए यह एआरपी पर वायर्ड मीडिया पर आईपी के लिए अनुरोध प्राप्त करता वायरलेस मीडिया भी संभावना यह बॉक्स के लिए वायरलेस मीडिया के भौतिक पते के साथ उत्तर देता है कि इसमें आईपी कॉन्फ़िगर किया गया है

मेरा अतीत में यह मुद्दा रहा है, यह आपके लिए सटीक नहीं था लेकिन समान था। डिफ़ॉल्ट लिनक्स द्वारा इंटरफ़ेस के भौतिक पते के साथ उत्तर दिया जाता है कि आईपी चाहे जिस इंटरफ़ेस पर कॉन्फ़िगर किया गया है, वह arp अनुरोध प्राप्त करता है। तो आपके मामले में PC3 को रोबोट के eth0 इंटरफ़ेस से सीधे कनेक्ट करें और 192.168.0.101 के लिए एक arp अनुरोध करें, यह आपको ra0 के बजाय eth0 इंटरफ़ेस के भौतिक पते के साथ उत्तर देगा।

मेरा परिनियोजन परिदृश्य था:

[RTR] | ------------ eth0 --- [सर्वर]
| -------- | स्विच 1 | ----- eth1 ----- [सर्वर]

इसका एक ही स्विच है, जिससे दोनों इंटरफेस कनेक्ट होते हैं। उम्मीद है कि यह आपकी मदद करेगा।

राउटर में प्राथमिक और द्वितीयक आईपी एड्रेस था जो कि सर्वर पर दो अलग-अलग इंटरफेस पर दो अलग-अलग नेटवर्क के लिए अपने इंटरफेस पर कॉन्फ़िगर किया गया था। लेकिन eth1 के IP पते के लिए eth1 पर एक arp अनुरोध प्राप्त करना उसने eth1 के भौतिक पते के साथ उत्तर दिया

इसे रोकने के लिए निम्नलिखित ने अब तक मेरे लिए काम किया है

# 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

इसे अपने रोबोट पर कहीं रखें ताकि आप इसे बूट पर लगा सकें।

अनुशंसाएँ: मैं आपको दो अलग-अलग सबनेट को कॉन्फ़िगर करने की सलाह दूंगा (जैसे 190.168.1.x / 24 ra0 पर और 192.168.2.x / 24 eth0 पर) आप अपने पीसी पर आईपी उपनाम का उपयोग कर सकते हैं और आपका रोबोट किसी भी पर उपलब्ध होगा दो आईपी का। आपके पास एक ही होस्ट पर एक ही सबनेट के लिए दो आउटबाउंड पथ नहीं हो सकते। तब तक नहीं जब तक कि कुछ ऐसा न हो जो आपके रोबोट को एक-दूसरे से अधिक पसंद करता है। आपका रोबोट पैकेट भेजने के लिए केवल एक ही रास्ता निकाल सकता है।

कुछ रीडिंग: arp_announce , arp_ignore


arp_announce & arp_ignore ने मेरे लिए काम नहीं किया। इन्सटाइट के समाधान पर मेरी टिप्पणी देखें। दो अलग-अलग सबनेट दुर्भाग्य से एक विकल्प नहीं हैं। इसके अलावा, मेरे प्रश्न के अंतिम संपादन के अनुसार, यह ओएस के पिछले संस्करण पर ठीक काम करता था, इसलिए मेरे पास एक ही होस्ट पर एक ही सबनेट के लिए दो आउटबाउंड पथ हो सकते हैं।
Jayen

-2

मुझे लगता है कि आपके वायरलेस एपी और आपके स्विच के बीच गलत धारणा है। स्विच और एपी भ्रमित हो रहे हैं कि पैकेट कहां भेजें। हालांकि इस बारे में निश्चित नहीं है। इसके अलावा, मुझे लगता है कि आपको एक गेटवे को परिभाषित करने की कोशिश करनी चाहिए, जहां प्रोग्राम पता कर सकते हैं कि पैकेट कहाँ भेजना है। कुछ इस तरह

route add default gw 192.168.0.1


वायर्ड और वायरलेस दोनों तरह के लैपटॉप ठीक काम करते हैं, इसलिए यह एपी या स्विच नहीं है। इसके अलावा, एक प्रवेश द्वार केवल तभी आवश्यक है जब मैं सबनेट के बाहर जाने की कोशिश कर रहा हूं। (मैं इसे वैसे भी करने की कोशिश की, और यह कुछ भी नहीं बदलता है। अगर मैं eth0 या ra0 के लिए प्रवेश द्वार को जोड़ने से कोई फर्क नहीं पड़ता।)
Jayen

आपके eth0 पर कोई RX / TX नहीं है, कुछ विन्यास को इंगित करता है। त्रुटि?
fmysky

hrm, मुझे लगता है कि यह सच है। eth0 को कम से कम ARP अनुरोध प्राप्त करना चाहिए, क्योंकि यह एक प्रसारण है, है ना?
Jayen

हाँ, मैं क्या सोचा
fmysky

कि lwn लेख में arp समस्या केवल 2.4.x गुठली को प्रभावित करने के लिए लगता है
fmysky
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.