главная

Ведущие производители маршрутизаторов:

Компания Asotel — производитель и поставщик телекоммуникационного оборудования. Широкий спектр устройств, предлагаемых компанией «Асотел», позволяет решить комплексные задачи по построению мультисервисных сетей передачи информации. Линейка продукции компании в 2007 году включает: оборудование xDSL (в том числе IP DSLAM), аналоговые модемы, VoIP-шлюзы и IP-телефоны, коммутаторы Ethernet (управляемые и неуправляемые), медиаконверторы,  маршрутизаторы, конверторы интерфейсов,  оборудование HomePNA и др. Стремясь не отставать от тенденций в отрасли, компания готовится выйти на рынок оборудования Wi-Fi и оборудования для предоставления сервиса IPTV в домашних сетях.
о нас
продукция
статьи
цены
контакты

 
Тайванская компания Billion Electric Co. Ltd. была основана в 1973 году. В настоящее время компания является одним из ведущих поставщиков сетевого оборудования и систем электропитания в Азиатско-тихоокеанском регионе. С момента основания коммуникационного подразделения в 1992 году компания Billion направила усилия и средства на разработку сетевого оборудования и устройств доступа к интернету для домашних сетей, предприятий малого и среднего бизнеса. Сетевое оборудование, производимое компанией, неоднократно получало награды и знаки отличия. Компания имеет широкую сеть клиентов и партнеров в Европе, Америке, на Ближнем Востоке, в Африке и в Азиатско-тихоокеанском регионе.

Торговая марка BILLION была официально зарегистрирована в 2004. Энергия, преданность делу, дисциплина – основные понятия, на которых базируется деятельность компании. Благодаря хорошо оснащенным научно-исследовательским лабораториям и квалифицированным специалистам компания Billion продолжает занимать передовые позиции в производстве сетевого оборудования и предоставляет своим нынешним и потенциальным клиентам высококачественную продукцию.



Компания TP-Link — крупнейший в Китае производитель сетевого оборудования для домашних сетей и предприятий малого/среднего бизнеса. TP-Link имеет 14 торговых представительств и более 600 дистрибьюторов в Китае, что позволяет компании продавать более 15 млн. устройств ежегодно. На рынке сетевого оборудования в Китае продукция компании TP-Link составляет более 50%. В данный момент компания расширяет свой бизнес на международный рынок.

На сегодняшний день среди сотрудников компании TP-Link более 100 квалифицированных разработчиков программного и аппаратного обеспечения, которые работают в оборудованной по последним требованиям лаборатории компании. Большие возможности в области научных исследований и разработок позволяют компании ежегодно представлять широкий ряд новых моделей, которые получают положительные отзывы в средствах массовой информации и успешно проходят тестирование в испытательных центрах.

Компания TP-Link имеет 2 собственные фабрики, расположенные недалеко от центрального офиса. 21 линия производства и большое количество испытательного оборудования, позволяющего осуществлять контроль качества, дают возможность компании выпускать около 25 млн. устройств ежегодно в соответствии со стандартом системы управления качеством ISO 9001.

Мощный потенциал компании TP-Link в области разработок, эффективный процесс производства и строгий контроль качества гарантирует высокий уровень функционирования оборудования компании.

 


 

   Asotel Vector 2304
Широкополосный маршрутизатор для домашних сетей

 


 
Маршрутизатор или роутер

Сетевое устройство, на основании информации о топологии сети и определённых правил принимающее решения о пересылке пакетов сетевого уровня (уровень 3 модели OSI) между различными сегментами сети. Работает на более высоком уровне, нежели коммутатор и сетевой мост.

Принцип работы

Обычно маршрутизатор использует адрес получателя, указанный в пакетах данных и определяет по таблице маршрутизации путь, по которому следует передать данные. Если в таблице маршрутизации для адреса нет описанного маршрута, пакет отбрасывается.
Существуют и другие способы определения маршрута пересылки пакетов, когда, например, используется адрес отправителя, используемые протоколы верхних уровней и другая информация, содержащаяся в заголовках пакетов сетевого уровня. Нередко маршрутизаторы могут осуществлять трансляцию адресов отправителя и получателя, фильтрацию транзитного потока данных на основе определённых правил с целью ограничения доступа, шифрование/дешифрование передаваемых данных и т. д.


 


 
Таблица маршрутизации

Таблица маршрутизации содержит информацию, на основе которой маршрутизатор принимает решение о дальнейшей пересылке пакетов. Таблица состоит из некоторого числа записей — маршрутов, в каждой из которых содержится адрес сети получателя, адрес следующего узла, которому следует передавать пакеты и некоторый вес записи — метрика. Метрики записей в таблице играют роль в вычислении кратчайших маршрутов к различным получателям. В зависимости от модели маршрутизатора и используемых протоколов маршрутизации, в таблице может содержаться некоторая дополнительная служебная информация. Например:

192.168.64.0/16 [110/49] via 192.168.1.2, 00:34:34, FastEthernet0/0.1

где 192.168.64.0/16 — сеть назначения,
    110/49 — метрика маршрута,
    192.168.1.2 — адрес следующего маршрутизатора, которому следует
                  передавать пакеты для сети 192.168.64.0/16,
    00:34:34 — время, в течение которого был известен этот маршрут,
    FastEthernet0/0.1 — интерфейс маршрутизатора, через который можно
                  достичь «соседа» 192.168.1.2.

Таблица маршрутизации может составляться двумя способами:

статическая маршрутизация — когда записи в таблице вводятся и изменяются вручную. Такой способ требует вмешательства администратора каждый раз, когда происходят изменения в топологии сети. С другой стороны, он является наиболее стабильным и требующим минимума аппаратных ресурсов маршрутизатора для обслуживания таблицы.

динамическая маршрутизация — когда записи в таблице обновляются автоматически при помощи одного или нескольких протоколов маршрутизации — RIP, OSPF, EIGRP, IS-IS, BGP, и др. Кроме того, маршрутизатор строит таблицу оптимальных путей к сетям назначения на основе различных критериев — количества промежуточных узлов, пропускной способности каналов, задержки передачи данных и т. п. Критерии вычисления оптимальных маршрутов чаще всего зависят от протокола маршрутизации, а также задаются конфигурацией маршрутизатора. Такой способ построения таблицы позволяет автоматически держать таблицу маршрутизации в актуальном состоянии и вычислять оптимальные маршруты на основе текущей топологии сети. Однако динамическая маршрутизация оказывает дополнительную нагрузку на устройства, а высокая нестабильность сети может приводить к ситуациям, когда маршрутизаторы не успевают синхронизировать свои таблицы, что приводит к противоречивым сведениям о топологии сети в различных её частях и потере передаваемых данных.

 


 

 


 
Применение

Маршрутизаторы помогают уменьшить загрузку сети, благодаря её разделению на домены коллизий и широковещательные домены, а также благодаря фильтрации пакетов. В основном их применяют для объединения сетей разных типов, зачастую несовместимых по архитектуре и протоколам, например для объединения локальных сетей Ethernet и WAN-соединений, использующих протоколы xDSL, PPP, ATM, Frame relay и т. д. Нередко маршрутизатор используется для обеспечения доступа из локальной сети в глобальную сеть Интернет, осуществляя функции трансляции адресов и межсетевого экрана.
В качестве маршрутизатора может выступать как специализированное (аппаратное) устройство (характерный представитель Juniper), так и обычный компьютер, выполняющий функции роутера. Существует несколько пакетов программного обеспечения (в основном на основе ядра Linux) с помощью которого можно превратить ПК в высокопроизводительный и многофункциональный маршрутизатор, например GNU Zebra.

История изобретения

Леонард Босак работал в Стенфордском университете и хотел общаться со своей женой Сандрой Лернер, рабочая станция которой располагалась в другой локальной сети. Так эти двое положили начало компании Cisco, в которой создали первый маршрутизатор.
Наверное, любой из вас хотя бы отдаленно знает, что такое маршрутизация. Итак, маршрутизация — это, как бы это банально не звучало, есть выбор маршрута. В данной статье под этим термином я буду понимать выбор маршрута следования сетевого IP-пакета. Дело в том, что современные программные маршрутизаторы (а рассказывать я буду как раз об одном из представителей данного класса устройств) умеют полноценно работать только с протоколом ip.

Почему же я решил описать построение маршрутизатора именно на основе ОС GNU/Linux(*)? Тут две основные причины:
— ядро GNU/Linux способно уместиться на дискете, что может позволить создать весьма функциональный маршрутизатор вне зависимости от конкретной машины, кроме этого, можно «оживить» старые машины и заставить их работать на пользу людям;
— ядро Linux (2.4, 2.2) поддерживает очень полезные функции маршрутизации, и может быть специально заточено под использование в качестве маршрутизатора, кроме этого, стандартный брандмауэр Linux 2.4 — iptables — может «метить» (не подумайте ничего плохого) определенные пакеты, а ядро может выполнять выбор маршрута согласно этим меткам.

Это открывает широкие возможности при создании сетей со сложной структурой. Еще очень важной особенностью является универсальность GNU/Linux — по-моему, эта ОС поддерживает в той или иной степени все распространенные сетевые протоколы. Еще одной немаловажной особенностью является бесплатность всей системы маршрутизации. С точки зрения многих администраторов маршрутизатор — это просто черный ящик, принимающий и передающий пакеты, однако грамотная настройка маршрутизации — залог эффективности и зачастую безопасности всей сети. Очень интересно использовать маршрутизацию для распределения нагрузки, передачи определенного трафика на определенный хост (для анализа), и уменьшения опасности DoS-атак. Маршрутизация способна ограничивать сетевые «штормы» и существенно увеличить пропускную способность сети. Я решил построить эту статью в виде конкретных примеров настройки маршрутизации (в дальнейшем я иногда буду употреблять слово роутинг).

Маршрутизация бывает статической и динамической. Отличие в том, что при статической маршрутизации все правила передачи пакетов прописываются статически и могут быть изменены только вручную, динамическая маршрутизация применяется, когда в сети существет несколько маршрутизаторов, и нахождение пути до удаленного хоста становится нетривиальной задачей. Динамическая маршрутизация больше подходит для часто меняющихся сетей со сложной структурой. Хотя GNU/Linux поддерживает оба типа маршрутизации, но в рамках данной статьи я буду рассказывать о статической маршрутизации при помощи пакета iproute2, кстати, написанного нашим программистом Алексеем Кузнецовым. Для начала работы необходимо настроить соответствующим образом ядро и установить пакет iproute. Остановлюсь на настройке ядра. В ядре необходимо включить ряд опций маршрутизации (думаю, нет нужды объяснять, как настраивать и компилировать ядро). Я предполагаю, что вы настраиваете ядро командой "make menuconfig".

На странице Networking Options необходимо включить следующие элементы:

IP: advanced router — включение расширенных возможностей маршрутизации;
IP: policy routing — маршрутизация по некоторым внутренним полям пакетов (обычно применяется совместно с брандмауэром), а также для расширенных возможностей маршрутизации, например, маршрутизация согласно адресу-источнику пакета (source-based routing);
IP: use netfilter MARK value as routing key — включение возможности маршрутизации согласно маркировке пакета брандмауэром;
IP: use TOS value as routing key — маршрутизация пакетов на основе заголовка тип сервиса (TOS), помогает увеличить пропускную способность сети при наличии нескольких путей прохождения пакетов;
IP: large routing tables — включение больших (>64 правил) таблиц маршрутизации ядра.

Можно также включить поддержку туннелей, но я не буду на этом задерживаться. После настройки ядра необходимо установить iproute2. В большинстве дистрибутивов GNU/Linux эта программа входит в дистрибутив, например, для Debian GNU/Linux команда будет выглядеть так:
# apt-get install iproute

Исходные коды могут быть получены по адресу ftp://ftp.inr.ac.ru/iprouting/iproute2-xxx.tar.gz. Компиляция стандартная, но цели install в Makefile нет — необходимо скопировать бинарные файлы из каталога ip (cp ifcfg ip routef routel rtacct rtmon rtpr /sbin) и из каталога tc (cp tc /sbin) в /sbin, а ./etc/iproute2/ — в /etc/iproute2/.

Не поленитесь также скачать Linux Advanced Routing and Traffic Control HOWTO, которое может быть найдено на узле www.lartc.org. На самом деле, это руководство просто необходимо для настройки сложной статической маршрутизации на основе Linux. Я сам настраивал маршрутизацию в сети на основе этого руководства, поэтому если эта статья не решила вашей проблемы, лучше обратиться к данному документу.

Пакет iproute состоит фактически из двух утилит управления трафиком:

ip — управление собственно маршрутизацией;
tc — управление очередями маршрутизации.

Для начала расскажу об общих принципах команды ip, синтаксис команды таков:

ip [опции] {объект маршрутизации} {команда или HELP}

Из опций наиболее полезным является выбор семейства IP:

--4 — IPv4;
--6 — IPv6.

Объекты маршрутизации представлены следующим списком:

— link — сетевое устройство (реальное физическое или виртуальное, например, vlan или туннель);
— address — ip-адрес устройства;
— neighbour — кеш ARP;
— route — таблицы маршрутизации;
— rule — правила маршрутизации;
— maddress — широковещательный адрес;
— mroute — широковещательные таблицы маршрутизации;
— tunnel — IP-туннель.

Команды для разных объектов разные, но для всех объектов существует стандартный набор команд:

add (добавить), delete (удалить) и show (показать; можно также приенять list или ls). Синтаксис различных команд для разных объектов может быть совершенно разным, поэтому я не буду описывать здесь все команды каждого объекта. Я буду придерживаться стиля Linux Adv. Routing HOWTO и приведу полезные примеры употребления команды ip. Для начала просмотрим сетевые устройства, присутствующие на нашей тестовой машине (пусть у нее будут ip-адреса 192.168.1.1 и 192.168.2.1):

# ip link list
1: lo: mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: dummy0: mtu 1500 qdisc noop
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
3: eth0: mtu 1500 qdisc pfifo_fast qlen 10
link/ether 48:54:e8:01:ef:56 brd ff:ff:ff:ff:ff:ff
4: eth1: mtu 1500 qdisc pfifo_fast qlen 10
link/ether 00:e0:4c:39:ef:56 brd ff:ff:ff:ff:ff:ff

Теперь настало время перейти к рассмотрению простейшего случая организации маршрутизации. Допустим, в локальной сети крупных размеров есть три компьютера, которым положено иметь доступ к глобальной сети. При этом имеется два соединения с провайдером: быстрое ADSL и медленное модемное. Желательно один компьютер (c адресом 192.168.1.10) направить в глобальную сеть через модем, а два других (с адресами 192.168.1.20 и 192.168.21) через ADSL. Трафик, направленный во внешний мир с других компьютеров, желательно перенаправлять на сниффер, расположенный по адресу 192.168.1.100, причем сниффер может располагаться и на данном компьютере (tcpdump -i ethX).

 


 

 


 
Просмотрим сетевые карты на сервере; список будет примерно таким:

# ip link list
1: lo: mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: mtu 1500 qdisc pfifo_fast qlen 10
link/ether 48:54:e8:01:ef:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 brd 192.168.1.255 scope global eth0
3764: ppp0: mtu 1492 qdisc pfifo_fast qlen
link/ppp
inet 213.59.72.1 peer 213.59.72.48/24 scope global ppp0
3765: ppp1: mtu 1492 qdisc pfifo_fast qlen
link/ppp
inet 213.59.72.2 peer 213.59.72.10/24 scope global ppp1

Очевидно, что ppp0 соответствует модемному соединению, а ppp1 — ADSL-соединению. Просмотрим таблицы маршрутизации (здесь идет отображение всех таблиц маршрутизации ядра, ядро принимает решение о применениии той или иной таблицы на основании адреса источника пакета, утилита route способна оперировать только с таблицой main и local, iproute2 дает возможность создавать собственные таблицы, что будет описано несколько позже):

# ip rule list

0: from all lookup local
32766: from all lookup main
32767: from all lookup default

Как видно, пока наши таблицы применимы ко всем пакетам. Добавим новую таблицу для машин, связанных с Интернетом через ADSL:

# echo 200 inet_adsl >> /etc/iproute2/rt_tables

Эта команда требует некоторого пояснения: номер 200 выбран произвольно, главное, чтобы он не совпадал с другими номерами таблиц маршрутизации, имя inet_adsl также дается произвольно, но потом этой таблицей можно управлять по имени, так что в ваших же интересах дать понятное имя таблице, дабы облегчить себе процесс дальнейшей настройки.

Добавим в таблицу правила приема пакетов:

# ip rule add from 192.168.1.20 table inet_adsl
# ip rule add from 192.168.1.21 table inet_adsl

Эти команды, думаю, являются понятными, поэтому сразу просмотрим наши таблицы маршрутизации:

# ip rule list
0: from all lookup local
32764: from 192.168.1.20 lookup inet_adsl
32765: from 192.168.1.21 lookup inet_adsl
32766: from all lookup main
32767: from all lookup default

Теперь необходимо добавить маршртизатор по умолчанию для таблицы inet_adsl — тогда все пакеты от необходимых машин будут направляться к заданному шлюзу:

# ip route add default via 213.79.52.10 dev ppp1 table inet_adsl

После этого необходимо сбросить кеш маршрутизатора:

# ip route flush cache

Теперь очередь настроить модемное соединение. Думаю, следующие команды не должны вызвать сложности:

# echo 201 inet_modem >> /etc/iproute2/rt_tables
# ip rule add from 192.168.1.10 table inet_modem
# ip route add default via 213.79.52.48 dev ppp0 table inet_modem
# ip route flush cache

Для просмотра таблиц маршрутизации можно использовать такую команду:

# ip route list [table table_name]

Теперь необходимо включить сниффер для отслеживания пакетов, которые пришли из локальной сети. Добавим виртуальную сетевую карту:

# ifconfig eth0:1 192.168.1.100 up

И настроим правила маршрутизации так, чтобы пакеты с локальной сети, направленные во внешнюю сеть, направлялись на адрес 192.168.1.100, т.е. чтобы администратор мог наблюдать за попытками выхода во внешнюю сеть. Эта проблема не так тривиальна, как предыдущая, но решение все-таки существует. Задача решается интеграцией возможностей netfilter (iptables) и iproute2. Внутри ядра существует возможность установки на пакетах меток (метки устанавливает iptables, но учтите, что эти метки существуют только в пределах ядра, и не выходят за границы данного компьютера) .

Подробное описание системы netfilter выходит за рамки данной статьи, поэтому я ограничусь описанием процесса установки метки на конкретном примере:

# iptables -A PREROUTING -i eth0 -s 192.168.1.0/24 -d ! 192.168.1.0/24
-t mangle -j MARK --set-mark 2

Некоторые комментарии:

Обратите внимание на флаги -j MARK и --set-mark — последний флаг может устанавливать метку от 1 до 255. После установки правила iptables необходимо вновь вернуться к настройке iproute2. Учтите, что сейчас все необходимые нам пакеты помечены меткой 2, осталось только направить все такие пакеты на сниффер, расположенный по адресу 192.168.1.100:

# echo 202 sniffing >> /etc/iproute2/rt_tables
# ip rule add fwmark 2 table sniffing

Заметьте, эта строка выполняет выборку пакетов согласно их метке:

# ip route add default via 19.168.1.100 dev eth0:1 table sniffing
# ip route flush cache

Запускаем собственно сниффер (в фоновом режиме):

# tcpdump -i eth0:1 > /var/log/tcpdump.log &

При этом необходимо позаботиться о правильной установке прав доступа к файлу дампа, установите правильную umask или установите атрибуты вручную:

# touch /var/log/tcpdump.log
# chattr 600 /var/log/tcpdump.log
 

 


 

 


 
Для повышения безопасности можно также запустить сниффер через chroot (chroot /var/log tcpdump -i eth0:1), но обычно это делается в инициализационном скрипте.

Есть еще несколько нюансов в данном примере, а именно: установки сетевых опций ядра. Опции ядра обычно устанавливаются посредством файловой системы /proc: занесением необходимых значений в определенные файлы. Для нас необходимо отключить icmp redirect ответы, чтобы наш маршрутизатор не сообщал клиентам о выборе необходимого маршрута непосредственно (это лишит нас возможности установки меток на пакеты, а кроме того, понимается далеко не всеми клиентами по умолчанию). Для этого делаем следующее:

# echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
# echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects

Не забывайте также о правильной настройке брандмауэра, а также, если имеется несколько подсетей, желательно убедиться, что выключена прямая передача пакетов из подсети в подсеть (т.е. если пакет направлен в другую подсеть, он не должен передаваться на другой сетевой интерфейс без обработки):

# echo 0 > /proc/sys/net/ipv4/ip_forward

Единственный серьезный минус приведенной схемы — возможность подмены ip-адреса. К сожалению этот недостаток исправить невозможно, но можно дополнительно отслеживать обращения ко внешней сети. На этом я завершу описание этой «простенькой» задачки для администратора и перейду к описанию установки IP-туннелей.

Вообще любой сетевой туннель выполняет инкапсуляцию пакетов (фактически к каждому пакету добавляется необходимый заголовок). Туннели позволяют организовать связь нескольких подсетей одним соединением. В ядро Linux интегрирована поддержка нескольких типов IP-туннелей. Управление туннелями осуществляется посредством команды ip tunnel. Но для начала необходимо включить поддержку туннелей в ядре. На странице «Networking options» отмечаем следующие опции:
IP: tunneling — поддержка туннелей ядром;
IP: GRE tunnels over ip — поддержка GRE-туннелей, которые обладают возможностью инкапсулировать ipv6-трафик, кроме этого, GRE является стандартом де-факто в маршрутизаторах Cisco, поэтому для организации туннеля между Linux-машиной и маршрутизатором Cisco применяйте GRE-туннели.

Представим себе организацию туннеля между двумя компьютерами и соединяющего две подсети. Для добавления GRE-туннеля можно воспользоваться следующими командами:
на сервере 192.168.1.1:


# ip tunnel add tuna mode gre remote 192.168.2.1 local 192.168.1.1 ttl 255

Эта команда задает GRE-туннель от машины 192.168.1.1 до машины 192.168.2.1, для создания чисто IPV6-туннеля используется тип sit (mode sit), при этом необходимо вручную добавлять IPV6-адрес туннелю (ip --6 addr add ipv6_addr dev tunsit). Учтите, что вы можете добавлять туннель с любым именем, состоящим из букв и цифр. Поле ttl является необязательным, но каждому пакету, проходящему через туннель, будет присваиваться заданный ttl. Вторым этапом настройки туннеля является настройка маршрутизации через этот туннель:
включаем виртуальный сетевой интерфейс, созданный предыдущей командой:

# ip link set tuna up

Теперь необходимо назначить созданному туннелю ip-адрес:

# ip addr add 192.168.1.101 dev tuna

Добавляем маршрут к сети 192.168.2.0/24 через созданный туннель:

# ip route add 192.168.2.0/24 dev tuna

Последнее действие можно выполнить и с помощью старой утилиты route (route add -net 192.168.2.0 netmask 255.255.255.0 dev tuna), но синтаксис iproute IMHO несколько проще. На другом конце туннеля (192.168.2.1) проделываем схожие действия:

# ip tunnel add tunb mode gre remote 192.168.1.1 local 192.168.2.1 ttl 255
# ip link set tunb up
# ip addr add 192.168.2.101 dev tunb
# ip route add 192.168.1.0/24 dev tunb

После этого туннель начинает функционировать. Учтите также, что к данным, проходящим по туннелю дописывается дополнительный заголовок 20 байт длиной, таким образом MTU для туннеля составляет не 1500, а 1480 байт. Для решения этой проблемы несколько модифицируем команду добавления маршрута, указав mtu:

# ip route add 192.168.2.0/24 dev tuna mtu 1480

Явное указание mtu — очень полезная вещь во многих случаях, например, при организации VLAN (IEE802.1q) также необходимо уменьшать значение MTU интерфейса.

Если планируется организовать туннель с маршрутизатором CISCO, то его конфигурация может выглядеть следующим образом:

interface Tunnel1
description IP tunnel
no ip address
no ip directed-broadcast
ip address 192.168.2.101/24
tunnel source Serial0
tunnel destination 192.168.1.101
tunnel mode ipip
ip route 192.168.1.0/24 Tunnel1
 

 


 

 


 
Итак, подведем итог этой небольшой статьи. Для выполнения статической маршрутизации лучше всего подходит iproute2 для GNU/Linux. Маршрутизация позволяет выполнять достаточно сложные операции по передаче пакетов, при этом возможно грамотно установить политику доступа к определенным подсетям и узлам сети. Одним из наиболее полезных в практическом плане инструментом оптимизации сетевых операций является управление очередями устройств, но это предмет другой моей статьи (см. «Управление сетевым трафиком посредством очередей»). Для установки маршрутизатора не требуется мощного компьютера, в некоторых случаях достаточно floppy-дистрибутива Linux. Одним из таких дистрибутивов является ориентированный на маршрутизацию linuxrouter (www.linuxrouter.org). Он построен на базе ядра 2.2 и 2.0, что является приемлемым вариантом для построения маршрутизатора (включает iproute2, но, к сожалению, я не нашел в составе дистрибутива утилиты tc). Если же в вашей сети несколько маршрутизаторов или структура сети является непостоянной, то лучшим выбором является установка динамического маршрутизатора, имеющего возможность автоматического обновления маршрутных таблиц. Для любителей маршрутизаторов Cisco могу посоветовать роутер Zebra, эмулирующий синтаксис Cisco IOS. Ну, вот и все, разговор о пакете iproute будет продолжен. Приведу список полезных ссылок:

http://www.lartc.org — Linux Advanced Routing and Traffic Control HOWTO — обязательный документ, помогающий грамотно настроить маршрутизатор.
http://www.linuxrouter.org — floppy-дистрибутив GNU/Linux, ориентированный на маршрутизацию.
http://www.opennet.ru — большая подборка документации о маршрутизации.

Книга: «Маршрутизация в Linux»; Брокмайер, Лебланк, Маккарти; Издательский дом «Вильямс», 2002. ISBN 5-8459-0271-1. Книга в основном рассказывает об общих вопросах маршрутизации и настройки демона динамической маршрутизации gated.


*** Сейчас ведутся активные споры по наименованию Linux. Так как эта операционная система базируется на ПО GNU, то было предложено называть ее GNU/Linux, поэтому далее я буду называть операционную систему GNU/Linux, а ядро — Linux, что соответствует истине.

 


 

 


 
Довольно часто в компьютерной литературе дается следующее обобщенное определение маршрутизатора: “Маршрутизатор – это устройство сетевого уровня эталонной модели OSI, использующее одну или более метрик для определения оптимального пути передачи сетевого трафика на основании информации сетевого уровня”. Из этого определения вытекает, что маршрутизатор, прежде всего, необходим для определения дальнейшего пути данных, посланных в большую и сложную сеть. Пользователь такой сети отправляет свои данные в сеть и указывает адрес своего абонента. И все. Данные проходят по сети и в точках с разветвлением маршрутов поступают на маршрутизаторы, которые как раз и устанавливаются в таких точках. Маршрутизатор выбирает дальнейший наилучший путь. То, какой путь лучше, определяется количественными показателями, которые называются метриками. Лучший путь – это путь с наименьшей метрикой. В метрике может учитываться несколько показателей, например, длина пути, время прохождения и т.д.

Маршрутизаторы реализуются по разному. Маршрутизаторы делят на устройства верхнего, среднего и нижнего классов.

Высокопроизводительные маршрутизаторы верхнего класса служат для объединения сетей предприятия. Они поддерживают множество протоколов и интерфейсов, причем не только стандартных, но, подчас, и весьма экзотических. Устройства данного типа могут иметь до 50 портов локальных или глобальных сетей.

С помощью маршрутизаторов среднего класса формируются менее крупные сетевые объединения масштаба предприятия. Стандартная конфигурация включает два-три порта локальных сетей и от четырех до восьми портов глобальных сети. Такие маршрутизаторы поддерживают наиболее распространенные протоколы маршрутизации и транспортные протоколы.

Маршрутизаторы нижнего класса предназначаются для локальных сетей подразделений; они связывают небольшие офисы с сетью предприятия. Типичная конфигурация: один порт локальной сети (Ethernet или Token Ring) и два порта глобальной сети, рассчитанные на низкоскоростные выделенные линии или коммутируемые соединения. Тем не менее, подобные маршрутизаторы пользуются большим спросом у администраторов, которым необходимо расширить имеющиеся межсетевые объединения.

Маршрутизаторы для базовых сетей и удаленных офисов имеют разную архитектуру, поскольку к ним предъявляются разные функциональные и операционные требования. Маршрутизаторы базовых сетей обязательно должны быть расширяемыми. Маршрутизаторы локальных сетей подразделения, для которых, как правило, заранее устанавливается фиксированная конфигурация портов, содержат только один процессор, управляющий работой трех или четырех интерфейсов. В них используются примерно те же протоколы, что и в маршрутизаторах базовых сетей, однако программное обеспечение больше направлено на облегчение инсталляции и эксплуатации, поскольку в большинстве удаленных офисов отсутствуют достаточно квалифицированные специалисты по сетевому обслуживанию.

Маршрутизатор базовой сети состоит из следующих основных компонентов: сетевых адаптеров, зависящих от протоколов и служащих интерфейсами с локальными и глобальными сетями; управляющего процессора, определяющего маршрут и обновляющего информацию о топологии; основной магистрали. После поступления пакета на интерфейсный модуль он анализирует адрес назначения и принимает команды управляющего процессора для определения выходного порта. Затем пакет по основной магистрали маршрутизатора передается в интерфейсный модуль, служащий для связи с адресуемым сегментом локальной или глобальной сети.

В роли маршрутизатора может выступать рабочая станция или сервер, имеющие несколько сетевых интерфейсов и снабженные специальным программным обеспечением. Маршрутизаторы верхнего класса – это, как правило, специализированные устройства, объединяющие в отдельном корпусе множество маршрутизирующих модулей.

По определению, основное назначение маршрутизаторов – это маршрутизация трафика сети. Процесс маршрутизации можно разделить на два иерархически связанных уровня:

Уровень маршрутизации. На этом уровне происходит работа с таблицей маршрутизации. Таблица маршрутизации служит для определения адреса (сетевого уровня) следующего маршрутизатора или непосредственно получателя по имеющемуся адресу (сетевого уровня) и получателя после определения адреса передачи выбирается определенный выходной физический порт маршрутизатора. Этот процесс называется определением маршрута перемещения пакета. Настройка таблицы маршрутизации ведется протоколами маршрутизации. На этом же уровне определяется перечень необходимых предоставляемых сервисов;
Уровень передачи пакетов. Перед тем как передать пакет, необходимо: проверить контрольную сумму заголовка пакета, определить адрес (канального уровня) получателя пакета и произвести непосредственно отправку пакета с учетом очередности, фрагментации, фильтрации и т.д. Эти действия выполняются на основании команд, поступающих с уровня маршрутизации.
Определение маршрута передачи данных происходит программно. Соответствующие программные средства носят названия протоколов маршрутизации. Логика их работы основана на алгоритмах маршрутизации. Алгоритмы маршрутизации вычисляют стоимость доставки и выбирают путь с меньшей стоимостью. Простейшие алгоритмы маршрутизации определяют маршрут на основании наименьшего числа промежуточных (транзитных) узлов на пути к адресату. Более сложные алгоритмы в понятие “стоимость” закладывают несколько показателей, например, задержку при передаче пакетов, пропускную способность каналов связи или денежную стоимость связи. Основным результатом работы алгоритма маршрутизации является создание и поддержка таблицы маршрутизации, в которую записывается вся маршрутная информация. Содержание таблицы маршрутизации зависит от используемого протокола маршрутизации. В общем случае таблица маршрутизации содержит следующую информацию:

Действительные адреса устройств в сети;
Служебную информацию протокола маршрутизации;
Адреса ближайших маршрутизаторов.
Основными требованиями, предъявляемыми к алгоритму маршрутизации являются:

Оптимальность выбора маршрута;
Простота реализации;
Устойчивость;
Быстрая сходимость;
Гибкость реализации.
Оптимальность выбора маршрута является основным параметром алгоритма, что не требует пояснений.

Алгоритмы маршрутизации должны быть просты в реализации и использовать как можно меньше ресурсов

Алгоритмы должны быть устойчивыми к отказам оборудования на первоначально выбранном маршруте, высоким нагрузкам и ошибкам в построении сети.

Сходимость – это процесс согласования между маршрутизаторами информации о топологии сети. Если определенное событие в сети приводит к тому, что некоторые маршруты становятся недоступны или возникают новые маршруты, маршрутизаторы рассылают сообщения об этом друг другу по всей сети. После получения этих сообщений маршрутизаторы производят переназначение оптимальных маршрутов, сто в свою очередь может породить новый поток сообщений. Этот процесс должен завершиться, причем достаточно быстро, иначе в сетевой топологии могут появиться петли, или сеть вообще может перестать функционировать. Алгоритмы маршрутизации должны быстро и правильно учитывать изменения в состоянии сети (например, отказ узла или сегмента сети).

Достоинства гибкой реализации не требуют комментариев.

Алгоритмы маршрутизации могут быть:

Статическими или динамическими;
Одномаршрутными или многомаршрутными;
Одноуровневыми или многоуровневыми;
Внутридоменными или междоменными;
Одноадресными или групповыми.
Для статических (неадаптивных) алгоритмов маршруты выбираются заранее и заносятся вручную в таблицу маршрутизации, где хранится информация о том, на какой порт отправить пакет с соответствующим адресом. Протоколы, разработанные на базе статических алгоритмов, называют немаршрутизируемыми. Примерами немаршрутизируемых протоколов могут служить LAT (Local AreaTransport, транспортный протокол для канальных областей) фирмы DEC, протокол подключения терминала и NetBIOS. Обычно с этими протоколами работают мосты, так как они не различают протоколы сетевого уровня.

 


 

 


 
При использовании динамических алгоритмов таблица маршрутизации автоматически обновляется при изменении топологии сети или трафика в ней. Динамические алгоритмы различаются по способу получения информации о состоянии сети, времени изменения маршрутов и используемым показателям оценки маршрута.

Одномаршрутные протоколы определяют только один маршрут. Он не всегда оказывается оптимальным. Многомаршрутные алгоритмы предлагают несколько маршрутов к одному и тому же получателю. Такие алгоритмы позволяют передавать информацию по нескольким каналам одновременно, что означает повышение пропускной способности сети.

Алгоритмы маршрутизации могут работать в сетях с одноуровневой или иерархической архитектурой. В одноуровневой сети все ее фрагменты имеют одинаковый приоритет, что, как правило, обусловлено схожестью их функционального назначения. Иерархическая сеть содержит подсети (фрагменты сети). Маршрутизаторы нижнего уровня служат для связи фрагментов сети. Маршрутизаторы верхнего уровня образуют особую часть сети, называемую магистралью (опорная часть). Маршрутизаторы магистральной сети передают пакеты между сетями нижнего уровня.

Иерархическая структура в больших и сложных сетях позволяет значительно упростить процесс управления сетью, облегчает изоляцию сегментов сети и т.д. Например, логическая изоляция сегментов сети допускает установку брандмауэров.

Некоторые алгоритмы маршрутизации действуют только в пределах своих доменов (внутридоменная маршрутизация), а другие – как в пределах своих доменов, так и в смежных с ними (междоменная маршрутизация). В данном случае домен означает область маршрутизации, в которой работает один или несколько протоколов. В разных доменах работают разные протоколы. Если необходима связь доменов, используется междоменная маршрутизация.

Одноадресные алгоритмы маршрутизации предназначены для передачи конкретной информации (по одному или нескольким маршрутам) только одному получателю. Многоадресные (или групповые) алгоритмы способны передавать информацию многим получателям одновременно.

Когда маршрутизатор получает пакет, он считывает адрес назначения и определяет, по какому маршруту отправить пакет. Обычно маршрутизаторы хранят данные о нескольких возможных маршрутах. Выбор маршрута зависит от нескольких факторов, в том числе:

Применяемой системы измерения длины маршрута (его метрики);
Маршрутизируемого протокола высокого уровня;
Топологии сети.
На уровне маршрутизации существуют три основные группы протоколов маршрутизации (деление на группы определяется типом реализуемого алгоритма определения оптимального маршрута):

Протоколы вектора расстояния;
Протоколы состояния канала;
Протоколы политики маршрутизации;
Протоколы вектора расстояния – самые простые и самые распространенные. Протоколы данной группы включают RIP IP, RIP IPX, AppleTalk и Cisco IGRP. Свое название этот тип протокола получил от способа обмена информацией. Маршрутизатор с определенной периодичностью извлекает адреса получателей информации и метрику из своей таблицы маршрутизации и помещает эти данные в рассылаемые соседям сообщения об обновлении. Соседние маршрутизаторы сверяют полученные данные со своими собственными таблицами маршрутизации и вносят необходимые изменения. После этого они сами рассылают сообщения об обновлении. Таким образом каждый маршрутизатор получает информацию о маршрутах всей сети. При очевидной простоте алгоритма говорить о его полной надежности нельзя. Он может работать эффективно только в небольших сетях. Это связано с тем, что в крупных сетях поток сообщений между маршрутизаторами резко возрастает. При этом большинство из них являются избыточными (так как изменения сетевой топологии происходят довольно редко). Как следствие – действительно необходимая информация подчас долго гуляет по сети, и маршрутизаторы обновляют свои таблицы с большой задержкой. Так, более несуществующий маршрут может довольно долго оставаться в таблицах маршрутизации. Трафик, направленный по такому маршруту, не достигнет своего адресата.

Протоколы состояния канала были впервые предложены в 1970 году Эдсгером Дейкстрой. Эти протоколы значительно сложнее, чем протоколы вектора расстояния. Вместо рассылки соседям содержимого своих таблиц маршрутизации, каждый маршрутизатор осуществляет широковещательную рассылку списка маршрутизаторов, с которыми он имеет непосредственную связь, и списка напрямую подключенных к нему локальных сетей. Эта информация является частью информации о состоянии канала. Она рассылается в специальных сообщениях. Кроме того маршрутизатор рассылает сообщения о состоянии канала только в случае его изменения или по истечении заданного интервала времени. Протоколы состояния канала трудны в реализации и нуждаются в значительном объеме памяти для хранения информации о состоянии каналов. Примерами этих протоколов служат OSPF, IS–IS, Nowell NLSP и Cisco EIGRP.

По Дейкстре, топология сети представляется в виде неориентированного графа. Каждому ребру приписывается некоторое значение. В процессе работы алгоритма вычисляется сумма показателей для ребер, сходящихся в каждом узле графа. Эта оценка называется меткой узла. При определении пути подсчитывается сумма меток на возможном пути и выбирается путь с меньшей суммарной меткой.

К третьей группе протоколов относятся протоколы политики (правил) маршрутизации. Эти протоколы наиболее эффективно решают задачу доставки получателю информации. Эта категория протоколов используется при маршрутизации в Internet и позволяет операторам получать информацию о маршрутизации от соседних операторов на основании специальных критериев. То есть в процессе обмена вырабатывается список разрешенных маршрутов (путей). Алгоритмы политики маршрутизации опираются на алгоритмы вектора расстояния, но информация о маршрутах базируется на списке операторов сети Internet. Примерами протоколов данной категории могут служить BGP и EGP.

Все вышесказанное относилось к уровню маршрутизации. Уровень передачи пакетов реализуется на алгоритмах коммутации и, как правило, одинаков для большинства протоколов маршрутизации. Промежуточный маршрутизатор, имея адрес следующего маршрутизатора, посылает ему пакет, адресованный специально на физический адрес (МАС-уровня) этого маршрутизатора, но с адресом (сетевого уровня) получателя. По адресу получателя маршрутизатор определяет, знает ли он, как передать пакет следующему маршрутизатору в пути. Если знает, то пакет отсылается следующему маршрутизатору путем замены физического адреса получателя на физический адрес следующего маршрутизатора. Если маршрутизатор не знает, то пакет игнорируется. На следующем маршрутизаторе все повторяется. По мере прохождения пакета через сеть, его физический адрес меняется, но адрес сетевого уровня остается неизменным. Этот процесс проиллюстрирован на рисунке:


Основная задача уровня передачи пакетов – это коммутация пакетов от разных пользователей. Общая схема передачи пакетов такова: выбирается один из возможных транзитных узлов (эта информация поступает с уровня маршрутизации, на котором она вычисляется по адресу получателя), формируется выходной заголовок канального уровня и осуществляется посылка пакета. Кроме того, на этом этапе может производиться фрагментация пакетов, проверка контрольной суммы и т.д.

Маршрутизаторы (точнее – уровень маршрутизации) работают на сетевом уровне эталонной модели OSI. Уровень продвижения пакетов функционирует на канальном уровне.

Работа на сетевом уровне позволяет производить интеллектуальную обработку пакетов. Поскольку маршрутизаторы в основном работают с протоколом IP, они должны поддерживать связь без создания логического соединения между абонентами. При этом каждый пакет обрабатывается и отправляется получателю независимо.

Производители при создании маршрутизаторов используют три основных типа архитектуры:

Однопроцессорная;
Усиленная однопроцессорная;
Симметричная многопроцессорная.
При однопроцессорной архитектуре на центральный процессор маршрутизатора возлагается вся нагрузка по обработке трафика: фильтрация и передача пакетов, обновление таблиц маршрутизации, выделение служебных пакетов, работа с протоколом SNMP, формирование управляющих пакетов и т.д. Это приводит к тому, что маршрутизатор может стать узким местом в сети при увеличении нагрузки. Даже применение мощных RISC-процессоров не решает проблему.

Для преодоления недостатков такой архитектуры применяют усиленную однопроцессорную архитектуру. В функциональной схеме маршрутизатора выделяют модули, ответственные за выполнение тех или иных специальных задач. Каждый такой модуль маршрутизатора оснащается своим (периферийным) процессором. При этом происходит частичная разгрузка центрального процессора, который отвечает только за те задачи, которые нельзя поручить периферийному. В целом, и эта архитектура не способна решить все задачи связанные с производительностью.

Симметричная многопроцессорная архитектура лишена перечисленных недостатков, так как происходит прямое распределение нагрузки на все модули. Но теперь каждый модуль содержит свой процессор, который выполняет все задачи маршрутизации и имеет свою копию таблицы маршрутизации. Преимущества такой архитектуры признаны всеми производителями маршрутизаторов. Данная архитектура позволяет достичь теоретически неограниченной производительности маршрутизаторов.

В заключение нашего анализа маршрутизаторов можно сказать, что они обладают несомненными достоинствами. Маршрутизаторы не вносят никаких ограничений в топологию сети. Петли, возникающие в цепях с коммутаторами, не представляют проблемы для маршрутизаторов.

Тем не менее, маршрутизаторы по сравнению с коммутаторами и мостами требуют гораздо больше усилий по администрированию. Администраторам сетей необходимо знать целое множество конфигурационных параметров для маршрутизаторов. При этом параметры каждого маршрутизатора должны быть согласованы с параметрами других маршрутизаторов в сети.

Сегодня многие организации реализуют межсетевой обмен через маршрутизаторы. Большое число компаний модернизируют свои системы, устанавливая коммутаторы между маршрутизаторами и сетями, которые обслуживаются этими маршрутизаторами. При этом коммутаторы повышают производительность сети, а маршрутизаторы обеспечивают защиту информации и выполняют более сложные задачи, такие как трансляция протоколов.

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