![]() |
141001 г.Мытищи МО Ул.Институтская д:1 ком:101 (095) 588-52-09, 588-55-62 E-mail: T-Alex@mgul.ac.ru |
|
Сервер Лаб. Космической информатики каф.ВТ Московский Государственный Университет Леса
|
|
|---|---|
ARP позволяет одному компьютеру "выступать" от лица другого. Представьте,
например, что у ARP-маршрутизатора есть модемный пул, по которому
дозваниваются клиенты (небольшой такой Интернет-провайдер). Каждый модем
представляет собой сетевой интерфейс, а следовательно имеет IP-адрес, который
присваивается дозвонившемуся клиенту. ARP-маршрутизатор на запросы о
MAC-адресе клиента посылает MAC-адрес своей сетевой карточки. После этого все
IP-пакеты, предназначенные клиенту передаются маршрутизатору, а он посылает их
дальше, по нужному сетевому интерфейсу. Следует отметить, однако, что ARP
работает только в локальных сетях.
4. Почему именно ARP-маршрутизатор.
В моем распоряжении был
компьютер 486/DX2-66 c 8Mb RAM, и две сетевые карточки - 3Com 905 и 509.
Клиентские машины, которые должны были получить маршрутизацию, имели 4 разные
операционные системы, и настраивать каждую у меня не было никакого желания. Я
решил использовать ARP по следующим причинам:
CONFIG_FIREWALL=y CONFIG_NET_ALIAS=n CONFIG_INET=y CONFIG_IP_FORWARD=y CONFIG_IP_MULTICAST=n CONFIG_SYN_COOKIES=y CONFIG_IP_FIREWALL=y CONFIG_IP_FIREWALL_VERBOSE=y CONFIG_IP_MASQUERADE=n CONFIG_IP_ALWAYS_DEFRAG=n CONFIG_IP_ACCT=y CONFIG_IP_ROUTER=y CONFIG_NET_IPIP=n
Я так же скомпилировал поддержку для своих 3Com сетевых карточек, прямо в
ядре, а не как модули, хотя вы вполне можете скомпилировать поддержку второй
карточки как модуль, при необходимости.
6. Настройка двух сетевых карт.
После загрузки с новым ядром, я
получил два сетевых устройства: eth0 и eth1. При помощи dmesg я определил, что
eth0 у меня 905 карточка, а eth1 - 509. Первым делом я определил IP-адреса
карточек, адреса подсетей и широковещательные адреса. По этому поводу можно
долго говорить, но лучше прочитать NET-3-HOWTO, а я рассмотрю простейший
случай - когда имеются две подсети класса С (то есть для адресации хоста в
подсети используется только последняя цифра IP-адреса). Пусть первая подсеть
имеет адрес 100.100.100.0, а вторая - 100.100.101.0, а IP-адреса роутера
100.100.100.1 и 100.100.101.1 соответственно в каждой подсети. Тогда получаем
следующую конфигурацию:
eth0:
DEVICE=eth0
IPADDR=100.100.100.1
NETMASK=255.255.255.0
NETWORK=100.100.100.0
ONBOOT=yes
eth1:
DEVICE=eth1
IPADDR=100.100.101.1
NETMASK=255.255.255.0
NETWORK=100.100.101.0
ONBOOT=yes
В зависимости от дистрибутива Линукса у вас возможно будут различные конфигурационные файлы. Для RedHat достаточно создать файлы в директории /etc/sysconfig/network-scripts/ c именами ifcfg-eth0 и ifcfg-eth1 и записать в них конфигурацию. Файл ifcfg-eth0 у вас, скорее всего, уже есть, второй файл надо создать вручную. В дистрибутиве SuSE надо подправить всего один файл - /etc/rc.config, отредактировав следующие строчки:
# 2 сетевые карточки eth0 и eth1 NETCONFIG=_0 _1 # IP-адреса IPADDR_0=100.100.100.1 IPADDR_1=100.100.101.1 # Сетевые интерфейсы NETDEV_0=eth0 NETDEV_1=eth1 # Указываем маршрутизацию IFCONFIG_0="100.100.100.1 broadcast 100.100.100.255 netmask 255.255.255.0" IFCONFIG_1="100.100.101.1 broadcast 100.100.101.255 netmask 255.255.255.0"
Для других дистрибутивов могут быть другие настройки, (например для Дебиана, это файл /etc/init.d/network) но в любом случае вызываются одни и те же команды. Если угодно, это одна и та же конфетка, только в разных фантиках. В конце-концов, можно самому написать скрипт, по которому будет конфигурироваться вся сеть.
После того, как все настроено, попробуйте пингануть (то есть использовать
программку ping) хосты в каждой подсети. Если все правильно подключено, в том
числе - не перепутаны сетевые кабели, то все должно нормально работать. Пока
подсети не были разделены, я использовал для отладки один кабель, физически
перетыкая его из одной карточки в другую.
7. Настройка firewall и ARP.
Настройке firewall посвящена
отдельная статья, но в нашем случае нам достаточно разрешить пересылку пакетов
с одного интерфейса на другой. Это достигается добавлением строчки типа
/sbin/ipfwadm -F -a accept -P all -S 0.0.0.0/0 -D 0.0.0.0/0
в один из последних загрузочных скриптов, например /etc/rc.d/rc.local Убедитесь, что у вас установлена программка ipfwadm в директории /sbin. Эта комманда позволяет пересылку любых пакетов с интерфейса на интерфейс. Почитайте документацию, чтобы задать более жесткие правила.
И, наконец - собственно настройка ARP. Для работы с таблицей ARP есть маленькая программка arp, установленная в моем случае в /sbin. С помощью программы ifconfig я узнал MAC-адреса своих сетевых карт (поле HWaddr).
00:60:97:B8:6E:37 00:A0:24:8A:AC:B2
<-----------------> Linux <----------------->
eth0 eth1
net_A net_B
100.100.100.xxx 100.100.101.xxx
host_A host_D
host_B host_E
host_C
То есть, в сеть 100.100.100.0 была обращена карточка eth0 с MAC-адресом 00:60:97:B8:6E:37, а в сеть 100.100.101.0 - eth1 c MAC 00:A0:24:8A:AC:B2. Хосты с именами host_A, host_B, host_C находятся в подсети net_A, а машины с именами host_D, host_E - в подсети net_B, что должно быть отражено в файле /etc/hosts:
... # сеть 100.100.100.xxx host_A 100.100.100.5 host_B 100.100.100.25 host_C 100.100.100.123 ... # сеть 100.100.101.xxx host_D 100.100.101.33 host_E 100.100.101.77 ...
Чтобы заработал ARP, необходимо, чтобы интерфейс eth0 выступал от имени хостов host_D и host_E в подсети net_A, и аналогично - для eth1. Для этого добавляем в один из скриптов следующие строчки:
# Карточка eth0 имеет MAC адрес 00:60:97:B8:6E:37 /sbin/arp -i eth0 -s host_D 00:60:97:B8:6E:37 pub /sbin/arp -i eth0 -s host_E 00:60:97:B8:6E:37 pub # Карточка eth1 имеет MAC адрес 00:A0:24:8A:AC:B2 /sbin/arp -i eth1 -s host_A 00:A0:24:8A:AC:B2 pub /sbin/arp -i eth1 -s host_B 00:A0:24:8A:AC:B2 pub /sbin/arp -i eth1 -s host_C 00:A0:24:8A:AC:B2 pub
После этой настройки, исполнив все эти комманды (перезагрузка не
требуется), пропингуйте одну подсеть из другой - ping будет проходить только
от перечисленных хостов и только на перечисленные, что, собственно, нам и
требовалось :-)
8. Заключение.
В последнее время, в связи с повсеместным переходом
на "оконную" технологию, локальные сети просто забиты ненужными пакетами. Дело
в том, что сети "Microsoft" используют немаршрутизируемый и впридачу
широковещательный протокол, который хорош только в очень локальных (я бы
сказал даже - домашних) - сетях. Слабым выходом является использование
относительно дорогостоящих Switch - коммутаторов, которые на основе анализа
MAC-адресов оптимизируют работу в сети. Однако против широковещательной натуры
Windows (да-да, это когда фонарик ползает вправо-влево по Нетворк Неборхуд)
они уже не помогут. После введения ARP-маршрутизатора траффик из одной сети в
другую уменьшился в 20 раз! Если все-же необходимо сделать передачу файлов по
сети Microsoft, сделайте из ARP-маршрутизатора Samba-сервер ;-)
|
|
|
|