ARP-proxy-scape للشبكات المتداخلة

على واجهة جهاز التوجيه ، يتم استخدام الشبكة 10.0.0.0/8 في نفس الوقت على واجهات أخرى من نفس جهاز التوجيه ، يتم استخدام قطع من الشبكة 10.0.0/8: 10.0.1.0/24 و 10.0.2.0/24. في الوقت نفسه ، لا يوجد مضيف واحد من شبكات 10.0.1.0/24 و 10.0.2.0/24 على الشبكة 10.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0/24.

تكمن المشكلة في أن المضيفين من الشبكة الكبيرة 10.0.0.0/8 لن يتمكنوا من التواصل مع المضيفين من الشبكات 10.0.1.0/24 و 10.0.2.0/24 ، لأن المضيفين على الشبكة 10.0.0/8 يعتقدون أنهم في مقطع إذاعي واحد مع شبكات 10.0.0/24 المضيفات 10.0.1.0/24 و 10.0.2.0/24 لن يكون هناك أحد يجيب عليه.
مثال على ARP:
طلب ARP

رد ARP:

القرار الصحيح رقم 1. أبسط قرار رقم 2 ليشمل ARP-proxy على واجهة جهاز التوجيه مع شبكة 10.0.0.0/8 ، ولكن في بائعين مختلفين ، يمكن أن يعمل ARP-Proxy بشكل مختلف. على سبيل المثال ، يحتوي Juniper ARP-Proxy على وضعين تشغيل: مقيد وغير مقيد.
مقيد - يستجيب المفتاح لطلبات ARP التي تختلف فيها الشبكات الفعلية للمصدر والهدف ولا تستجيب إذا كانت عناوين IP المصدر والهدف على نفس الشبكة الفرعية. في هذا الوضع ، يتواصل المضيفين على نفس الشبكة الفرعية بدون ARP الوكيل. نوصي باستخدام هذا الوضع على التبديل.
غير مقيد - يستجيب المفتاح لجميع طلبات ARP الخاصة بمسار إلى الوجهة. هذا هو الوضع الافتراضي (لأن الوضع الافتراضي في تكوينات نظام التشغيل Juniper Networks Junos (Junos OS) بخلاف التبديل). نحن نطلب باستخدام الوضع المقيد على المفتاح.
في Cisco ARP-Proxy ، يتم تضمين الوضع الافتراضي في الوضع المقيد بواسطة Juniper.
لن يساعدنا ARP-Proxy في الوضع المقيد ، لأن عنوان IP للمرسل وعنوان IP للمستلم سيكون على نفس الشبكة. سيؤدي إدراج ARP-proxy في الوضع غير المقيد إلى حل المشكلة ، ولكنه سيخلق آخر ، لأن ARP-Proxy يستجيب لأي طلبات سيتم تشغيلها من خلال آلية تحديد عناوين IP المكررة. عند إرسال رسالة ARP غير مبررة ، سيتلقى المضيف إجابة من ARP-Proxy.
يتم تقليل الخيارات رقم 3 ورقم 4 إلى عزل مضيفي شبكة واحدة من بعضها البعض على مستوى L2 والاتصال بين المضيفين عبر L3 من واجهة جهاز التوجيه وتتطلب تغييرات على تكوين معدات الشبكة ، وكذلك لها قيود وميزات خاصة بهم.
الخيار رقم 5 لكتابة ARP -Proxy استخدم Python3 و Scape - أداة لمعالجة حزم الشبكة.
نقوم بتوصيل مضيف جديد مع Linux بالشبكة 10.0.0.0.0/8 على متن الطائرة وأطلقوا ARP-Proxy ، حيث سنقوم باعتراض الحزم مع ARP-Request الذي يدخل فيه عنوان IP للمضيف المطلوب الشبكة 10.0.1.0/24 و 10.0.2.0/24 والاستجابة لهما على العنوان MAC للبابة من 10.0.0.0.0. نتيجة لذلك ، سيتم إرسال الحزم المخصصة للشبكات 10.0.1.0/24 و 10.0.2.0/24 إلى شبكة الشبكة 10.0.0.0/8 وتسليمها إلى المرسل إليها.

مثال على سجل arp-proxy.py:
2017-03-12 00:35:00,984 INFO STDOUT: -----------------------------------
2017-03-12 00:35:00,985 INFO STDOUT: ARP receive:
2017-03-12 00:35:00,985 INFO STDOUT: -----------------------------------
2017-03-12 00:35:00,986 INFO STDOUT: ###[ Ethernet ]###
2017-03-12 00:35:00,986 INFO STDOUT: dst = ff:ff:ff:ff:ff:ff
2017-03-12 00:35:00,986 INFO STDOUT: src = e4:8d:8c:79:dc:2e
2017-03-12 00:35:00,986 INFO STDOUT: type = 0x806
2017-03-12 00:35:00,987 INFO STDOUT: ###[ ARP ]###
2017-03-12 00:35:00,987 INFO STDOUT: hwtype = 0x1
2017-03-12 00:35:00,987 INFO STDOUT: ptype = 0x800
2017-03-12 00:35:00,987 INFO STDOUT: hwlen = 6
2017-03-12 00:35:00,987 INFO STDOUT: plen = 4
2017-03-12 00:35:00,988 INFO STDOUT: op = who-has
2017-03-12 00:35:00,988 INFO STDOUT: hwsrc = e4:8d:8c:79:dc:2e
2017-03-12 00:35:00,988 INFO STDOUT: psrc = 10.0.0.100
2017-03-12 00:35:00,988 INFO STDOUT: hwdst = 00:00:00:00:00:00
2017-03-12 00:35:00,988 INFO STDOUT: pdst = 10.0.1.55
2017-03-12 00:35:00,988 INFO STDOUT: ###[ Padding ]###
2017-03-12 00:35:00,989 INFO STDOUT: load = 'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00'
2017-03-12 00:35:00,989 INFO STDOUT: -----------------------------------
2017-03-12 00:35:00,989 INFO STDOUT: -----------------------------------
2017-03-12 00:35:00,989 INFO STDOUT: ARP send:
2017-03-12 00:35:00,989 INFO STDOUT: -----------------------------------
2017-03-12 00:35:00,989 INFO STDOUT: ###[ Ethernet ]###
2017-03-12 00:35:00,989 INFO STDOUT: dst = e4:8d:8c:79:dc:2e
2017-03-12 00:35:00,989 INFO STDOUT: src = 00:0c:29:85:7d:35
2017-03-12 00:35:00,990 INFO STDOUT: type = 0x806
2017-03-12 00:35:00,990 INFO STDOUT: ###[ ARP ]###
2017-03-12 00:35:00,990 INFO STDOUT: hwtype = 0x1
2017-03-12 00:35:00,990 INFO STDOUT: ptype = 0x800
2017-03-12 00:35:00,990 INFO STDOUT: hwlen = 6
2017-03-12 00:35:00,990 INFO STDOUT: plen = 4
2017-03-12 00:35:00,990 INFO STDOUT: op = is-at
2017-03-12 00:35:00,991 INFO STDOUT: hwsrc = 90:fa:3d:aa:bb:cc
2017-03-12 00:35:00,991 INFO STDOUT: psrc = 10.0.1.55
2017-03-12 00:35:00,991 INFO STDOUT: hwdst = e4:8d:8c:79:dc:2e
2017-03-12 00:35:00,991 INFO STDOUT: pdst = 10.0.0.100
2017-03-12 00:35:00,991 INFO STDOUT: -----------------------------------
في بيئتنا ، نستخدم توزيع خادم Ubuntu 16.04 و SystemD Formerable لبدء البرنامج النصي كخدمة.
mkdir /opt/arp-proxy
cp ~/arp-proxy.py /opt/arp-proxy/
قم بإنشاء ملف مع إعدادات البرنامج النصي SystemD:
touch /lib/systemd/system/arp-proxy.service
arp-proxy.service
[Unit]
Description=arp-proxy for overlapped networks
[Service]
Type=simple
ExecStart=/opt/arp-proxy/arp-proxy.py enp4s0 00:05:00:05:00:05
StandardOutput=null
Restart=always
[Install]
WantedBy=multi-user.target
لإطلاق ARP-proxy ، تحتاج إلى تحديد اسم الواجهة التي ستستمع إلى طلب ARP وإرسال رد ARP وشبكة MAC للشبكة التي سيتم استخدامها في ARP Reply
نقوم بتنشيط خدمتنا ونطلقها:
sudo systemctl enable arp-proxy.service
sudo systemctl start arp-proxy.service
حالة الخدمة:
sudo systemctl status arp-proxy.service
● arp-proxy.service - arp-proxy for overlapped networks
Loaded: loaded (/lib/systemd/system/arp-proxy.service; enabled; vendor preset: enabled)
Active: active (running) since Вс 2017-03-12 18:41:01 MSK; 7s ago
Main PID: 10294 (python3)
Tasks: 1
Memory: 18.6M
CPU: 981ms
CGroup: /system.slice/arp-proxy.service
└─10294 python3 /opt/arp-proxy/arp-proxy.py enp4s0 00:05:00:05:00:05
إدارة الخدمات في النظام
تثبيت Scapy:
sudo pip3 install scapy-python3
وثائق Scape
Scape Doc PDF