Реклама:

info.krc.karelia.ru

win -:|:- koi -:|:- iso -:|:- dos -:|:- mac

Start -:|:- Проекты -:|:- О нас

Как настраивать ARP-маршрутизатор.

  • 1. Зачем нужен маршрутизатор
  • 2. Как работает маршрутизатор
  • 3. Что такое ARP
  • 4. Почему именно ARP-маршрутизатор
  • 5. Конфигурация ядра.
  • 6. Настройка двух сетевых карт
  • 7. Настройка firewall и ARP.
  • 8. Заключение.

    1. Зачем нужен маршрутизатор. Маршрутизатор объединяет локальные сети друг с другом, осуществляя при этом пересылку сетевых пакетов согласно набору правил. Обычно набор правил определяет фильтры, по которым отсеиваются пакеты, не предназначенные для маршрутизации, например - траффик внутри локальной сети, или даже попытки несанкционированного доступа в сеть извне. Существует целое множество маршрутизаторов, различающихся как предназначением так и технической реализацией. Передо мной встала задача объединить две подсети, разрешив доступ всего нескольким машинам (хостам). Главной целью было разделение траффика для увеличения производительности каждой из подсетей, вопросы несанкционированного доступа отступали на второй план.

    2. Как работает маршрутизатор. Маршрутизатор имеет как минимум два сетевых интерфейса, по одному или более на каждую из сетей, которые он объединяет. Сетевым интерфейсом является любое устройсво, способное передавать данные между компьютерами (сетями) - сетевая карта, волоконно-оптический интерфейс, модемная, радиорелейная, выделенная линия связи, ISDN и все, что только можно выдумать. Каждому сетевому интерфейсу присваиваится уникальный IP-адрес, то есть все маршрутизаторы обладают двумя и более IP-адресами. Все IP-пакеты передаются поверх протоколов конкретного сетевого интерфейса. На любом маршрутизаторе вы найдете таблицу маршрутизации (routing table), которая определяет, по какому сетевому интерфейсу должен быть передан IP-пакет, чтобы достичь требуемого хоста. Типичной задачей маршрутизатора является пересылка IP-пакетов с одного сетевого интерфейса на другой, связывая таким образом локальные сети. Фильтрация пакетов при пересылке позволяет запретить несанкционированный доступ.

    3. Что такое ARP. ARP - это аббревиатура от Address Resolution Protocol, протокол поиска адреса. Дело в том, что в сетях нет однозначного соответствия между физическим адресом сетевого интерфейса (например - MAC адресом сетевой карты) и его IP-адресом. Для того, чтобы получить такое соответствие, и используется протокол ARP. Механизм его реализации рассмотрим на примере Ethernet-сетей. Сетевые пакеты (не путайте с IP-пакетами, сетевые пакеты более низкого уровня) передаются на основе MAC-адреса сетевой карточки, который уникален. Сетевой уровень "ничего не знает" о том, что передается поверх него, и ему вся IP-маршрутизация глубоко безразлична. Если хосту A необходимо передать пакет хосту B, то хост A передает широковещательный (broadcast) запрос по сети примерно такого содержания: "У кого есть MAC-адрес хоста B?" Обычно откликается сам хост B и сообщает о своем MAC-адресе. После этого хост A запоминает MAC-адрес хоста B, строит ARP-таблицу соответствия IP и MAC-адресов, и в дальнейшем уже не посылает ARP-запросы.

    ARP позволяет одному компьютеру "выступать" от лица другого. Представьте, например, что у ARP-маршрутизатора есть модемный пул, по которому дозваниваются клиенты (небольшой такой Интернет-провайдер). Каждый модем представляет собой сетевой интерфейс, а следовательно имеет IP-адрес, который присваивается дозвонившемуся клиенту. ARP-маршрутизатор на запросы о MAC-адресе клиента посылает MAC-адрес своей сетевой карточки. После этого все IP-пакеты, предназначенные клиенту передаются маршрутизатору, а он посылает их дальше, по нужному сетевому интерфейсу. Следует отметить, однако, что ARP работает только в локальных сетях.

    4. Почему именно ARP-маршрутизатор. В моем распоряжении был компьютер 486/DX2-66 c 8Mb RAM, и две сетевые карточки - 3Com 905 и 509. Клиентские машины, которые должны были получить маршрутизацию, имели 4 разные операционные системы, и настраивать каждую у меня не было никакого желания. Я решил использовать ARP по следующим причинам:

    1. Клиентские машины не нуждаются в какой-либо конфигурации, для них маршрутизатор "прозрачен"
    2. ARP достаточно прост в настройке, неприхотлив и с успехом справляется со своей задачей в локальных сетях.

    Однако для Интернет такое решение не подойдет по крайней мере по двум причинам:

    1. Низкая степень защиты от несанкционированного доступа
    2. Разрастание так называемых ARP таблиц у клиентов при интенсивной работе в Интернет.

    В моем случае ни один из недостатков не играл определяющей роли, поэтому выбор ARP оказался оправданным.

    5. Конфигурация ядра. В Линуксе, в отличие от некоторых других разновидностей UNIX, и маршрутизация, и поддержка ARP реализованы в ядре, поэтому никаких доролнительных сервисов запускать не надо. В ядре я скомпилировал маршрутизатор и firewall, ответив таким вот образом на следующие опции в конфигурировании сети:

    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-сервер ;-)

 

Rambler's Top100 Service Яндекс цитирования