Робота з підмережами за допомогою проксі-arp
Переклад: Станіслав Рогін. SWSoft Pte Ltd.
У цьому документі описується робота з підмережами за допомогою протоколу Проксі-ARP (Address Resolution Protocol). Моя мета - зробити так, щоб підмережа з декількох комп'ютерів була видна в іншій підмережі, що використовує протокол IP. (Я називаю таку конфігурацію суб-підмережею). В результаті все повинно виглядати так, як ніби машини локальної підмережі (далі мережу 0) підключені до головної мережі (далі мережу 1).
Це все буде працювати тільки в тому випадку, якщо всі машини з'єднані за допомогою Ethernet-сумісних пристроїв (тобто не буде працювати з SLIP / PPP / CSLIP і т.п ..)
Створення цього документа і мого способу використання Проксі-ARP, було б неможливо без допомоги:
Andrew Tridgell, який реалізував підтримку підмереж в ARP в Linux - він особисто допомагав мені під час налаштування всього цього
Міні-HOWTO "Проксі-ARP" (Al Longyear)
Міні-HOWTO "Кілька Ethernet-мереж" (Don Becker)
Оригінальний текст програми arp (8) і man-сторінка (Fred N. van Kempen і Bernd Eckenfels)
Конфігурація підмереж, при яких необхідне використання Проксі-ARP, досить специфічна.
У мене була радіо-Ethernet-ISA-8біт-карта. Мені було необхідно підключити її до кількох машин одночасно. Я міг використовувати її на Linux-машині (правда мені для цього довелося писати драйвер, але це тема для окремої розмови). Загалом, від мене вимагалося встановити другу карту в Linux-машину, і деяким чином об'єднати дві підмережі.
У звичайному випадку я повинен був зробити наступне:
Використовувати IP-міст (див. Міні-HOWTO: Мости), щоб передавати пакети між інтерфейсами. На жаль, у радіо-Ethernet-карт немає режиму "promisc" (вони не можуть перехоплювати весь трафік мережі 1). Це пов'язано з малою швидкістю передачі (2Мбіт / сек), а також з тим, що нам зовсім не треба обробляти весь трафік мережі 1. Більш того, мости досить добре завантажують систему!
З іншого боку, я міг використовувати підмережі і IP-маршрутизацію для передачі даних між підмережами (див. Міні-HOWTO: "Підмережі IP"). Це рішення підходить тільки для IP-протоколу - ядро Linux буде обробляти лише IP-пакети, а іншим протоколам (наприклад AppleTalk) будуть потрібні додаткові програми. Це також вимагатиме нової IP-підмережі, що не завжди можливо.
В цьому випадку я не міг отримати нову підмережу, тому мені довелося налаштувати все так, як ніби все машини мережі 0 підключені до мережі 1. Ось тут і знадобився Проксі-ARP. Для роботи з іншими (НЕ-IP) протоколами використовувалися відповідні програми - наприклад для маршрутизації пакетів AppleTalk використовувався netatalk.
Насправді Проксі-ARP необхідний тільки для передачі пакетів з мережі 1 в мережу 0. Назад пакети йдуть за допомогою стандартної IP-маршрутизації.
Аналогічно (і навіть трохи простіше) відбувається з пакетами будь-яких машин обох мереж, призначеними для машини A.
Зауважте, що в машинах B і C (і D) не потрібно якихось спеціальних IP-налаштувань. У моєму випадку - це була дика суміш з Sun, Macintosh і PC-машин в мережі 0, підключених до решти світу через Linux-машину A.
Я налаштував роботу Проксі-ARP з підмережами в ядрі Linux версії 2.0.30, але мені сказали, що все це працювало ще в пору ядер 1.2.x.
Перше, що треба запам'ятати: код ARP можна розділити на дві частини: перша частина входить в ядро - вона посилає і отримує ARP запити і відповіді, оновлює вміст ARP-кешу і т.п .; друга частина - це команда arp (8), що дозволяє адміністратору змінювати вміст ARP-кешу, а іншим користувачам його переглядати.
Потім додаємо настройку другий Ethernet-карти (після завантаження всіх необхідних модулів з драйвером):
/ Sbin / ifconfig eth1 (name on net 1) broadcast (x.y.z.255) netmask 255.255.255.0
Тепер додаємо запис в таблицю маршрутизації:
/ Sbin / route add -net (x.y.z.0) netmask 255.255.255.0
Тепер настав час додати рядок, що включає Проксі-ARP:
/ Sbin / arp -i eth1 -Ds $ eth1 netmask $ pub
bash $ / sbin / arp -an Address HWtype HWaddress Flags Mask Iface xyz1 ether 00: 00: 0C: 13: 6F: 17 C * eth1 xyz65 ether 00: 40: 05: 49: 77: 01 C * eth0 xyz67 ether 08: 00: 20: 0B: 79: 47 C * eth0 xyz5 ether 00: 00: 3B: 80: 18: E5 C * eth1 xyz64 ether 00: 40: 96: 20: CD: D2 CMP 255.255.255.240 eth1
# / Bin / netstat -rn Kernel routing table Destination Gateway Genmask Flags Metric Ref Use Iface xyz64 0.0.0.0 255.255.255.240 U 0 0 71 eth0 xyz0 0.0.0.0 255.255.255.0 U 0 0 389 eth1 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 7 lo 0.0.0.0 xyz1 0.0.0.0 UG 1 0 573 eth1
Цю ж таблицю ви побачите, глянувши на файл / proc / net / route.
Зауважте, що перший запис є підмножиною другої, але таблиця маршрутизації відсортована в порядку пріоритету, тому рядок eth0 буде оброблятися до рядка eth1.
Існують і інші способи роботи з цими подсетями, крім Проксі-ARP. Про деякі з них я вже згадав вище (мости і маршрутизація):
Інший спосіб - IP-тунель, але він не сумісний з усіма операційними системами, тому я вирішив його не використовувати.
Використовувати Проксі-ARP без підмереж. Теоретично це можливо, просто вам доведеться в ARP-кеші вказати всі машини підмережі 0 окремо, замість вказівки посилання на всю мережу.
Напевно, тут можна скористатися і IP-Алиасинг, але я про це не думав.
Ще один приклад застосування Проксі-ARP в подсетях можна знайти тут же, в Австралійському Національному Університеті. Це та сама конфігурація, для якої Andrew Tridgell і написав роботу з підмережами в Проксі-ARP. Однак, Andrew каже, що, насправді в світі існує ще кілька подібних конфігурацій (подробиць у мене немає).
Це була лабораторія, в якій студентів навчають, як налаштовувати TCP / IP в машинах, включаючи і настройку шлюзу. Там є мережа класу C, і Andrew була потрібна "підмережа" для безпеки, контролю трафіку і освітніх цілей, згаданих вище. Він зробив це за допомогою стандартного Проксі-ARP, а потім до нього дійшло, що мати одну запис в ARP-кеші значно простіше, ніж мати по одному запису для кожної машини. І ось. з'явився Проксі-ARP для підмереж!
Voice: (+61) 2 6249 4090
Цей документ є частиною проекту Linux HOWTO.