Работа с подсетями при помощи Прокси-ARP |
---|
Пред. | | След. |
Настройка Прокси-ARP
Я настроил работу Прокси-ARP с подсетями в ядре Linux версии 2.0.30, но мне
сказали, что все это работало еще в пору ядер 1.2.x.
Первое, что надо запомнить: код ARP можно разделить на две части: первая
часть входит в ядро - она посылает и получает ARP запросы и ответы,
обновляет содержимое ARP-кэша и т.п.; вторая часть - это команда arp(8), позволяющая администратору изменять
содержимое ARP-кэша, а остальным пользователям его просматривать.
Первая проблема, с которой я столкнулся, состояла в следующем - программа
arp(8), входившая в мой дистрибутив Slackware 3.1,
была настолько стара(1994 года выпуска!!!), что вообще не могла работать с
кодом arp в ядре (главное доказательство этого - очень странный результат
работы команды "arp -a").
Команда arp(8) входит в состав пакета
"net-tools-1.33a", который можно взять, практически, где угодно, в том числе
и по адресу ftp.linux.org.uk:/pub/linux/Networking/base/
(этот адрес я взял из файла README из
этого пакета). Она работает нормально, вместе с ней поставляется нормальная
версия man-страниц, в которых все объяснено значительно подробнее, чем в
старых.
Получив свежую версию команды arp(8),
все изменения я внес в скрипт /etc/rc.d/rc.inet1 (это в Slackware - в других
случаях все может быть немного по-другому). Сначала нам надо сменить
широковещательный адрес, адрес и сетевую маску интерфейса eth0:
NETMASK=255.255.255.240 # это для 4-битной сети
NETWORK=x.y.z.64 # наш номер сети (замените x.y.z на настоящие цифры вашей сети)
BROADCAST=x.y.z.79 # широковещательный адрес (в моем случае) |
Затем добавляем настройку второй 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 ${NETWORK} eth1 netmask ${NETMASK} pub |
Здесь мы указываем коду ARP добавить в кэш статическую запись (опция s)
для сети ${NETWORK}. Опция -D указывает ARP использовать адрес интерфейса
eth1 (вторая запись eth1), что позволяет нам не выяснять физический адрес
интерфейса eth1, чтобы вписать его сюда вручную. Опция netmask указывает
ARP, что мы работаем с подсетью (т.е. Прокси для всех (IP-адресов) &
${NETMASK} == ${NETWORK} & ${NETMASK}). Опция pub означает, что ARP
должен "опубликовать" эту ARP-запись, т.е., что это прокси-запись, и ее надо
посылать в ответ на поиск всех IP-адресов этой подсети. Опция -i eth1
означает, что ARP должен отвечать только на запросы, идущие с интерфейса
eth1.
Если нам повезет, после загрузки все машины подсети 0 появятся в
сети 1. Вы можете проверить на машине A настройку Прокси-ARP, используя
следующую команду: (имена и адреса изменены)
bash$ /sbin/arp -an
Address HWtype HWaddress Flags Mask Iface
x.y.z.1 ether 00:00:0C:13:6F:17 C * eth1
x.y.z.65 ether 00:40:05:49:77:01 C * eth0
x.y.z.67 ether 08:00:20:0B:79:47 C * eth0
x.y.z.5 ether 00:00:3B:80:18:E5 C * eth1
x.y.z.64 ether 00:40:96:20:CD:D2 CMP 255.255.255.240 eth1 |
Вы можете просмотреть содержимое "файла" /proc/net/arp.
Последняя строка - это прокси-запись для подсети. Флаги CMP означают, что
запись является статической (введена вручную), и должна быть опубликована.
Эта строка будет использоваться только при получении запроса с сети 1, если
IP-адрес соответствует сети 0. Заметьте, что команда arp(8) автоматически определила физический адрес
интерфейса eth1, и подставила его в соответствующее место (опция -Ds).
Вы также можете проверить правильность таблицу маршрутизации. Ниже
приведена моя таблица (имена и адреса снова изменены):
#/bin/netstat -rn
Kernel routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
x.y.z.64 0.0.0.0 255.255.255.240 U 0 0 71 eth0
x.y.z.0 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 x.y.z.1 0.0.0.0 UG 1 0 573 eth1 |
Эту же таблицу вы увидите, взглянув на файл /proc/net/route.
Заметьте, что первая запись является подмножеством второй, но таблица
маршрутизации отсортирована в порядке приоритета, поэтому строка eth0 будет
обрабатываться до строки eth1.
Пред. | Начало | След. |
Как использовать Прокси-ARP при работе с подсетями | | Другие способы работы с подсетями |