Узел доступа с применением VLAN и ограничения полосы пропускания (Shaping)

Автор: Vlad B. Pinzhenin, компания "Сетевые решения"
Оригинал статьи: www.lanbilling.ru/vlan_solution.html

Введение. Постановка задачи.

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

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

  В случае если потребителей не более 3-х, то поставленная задача, решается элементарно путем установки нескольких сетевых адаптеров в PC маршрутизатор на базе *NIX совместимой ОС и настройкой корректной таблицы маршрутизации. Однако зачастую независимых потребителей услуг интернет больше трех и в этих условиях вариантов решения задачи становится несколько. Самый первый вариант, приходящий в голову специалисту не сталкивавшегося с подобной проблемой, это установить столько сетевых адаптеров в маршрутизатор, сколько клиентов он планирует обслуживать. Идея утопична в силу известных ограничений на количество PCI устройств, установленных в маршрутизаторе. Расчет стоимости маршрутизируемого порта при каскадном соединении PC маршрутизаторов делает невыгодным саму идею использования сравнительно дешевого PC устройства для нужд маршрутизации. Можно предположить, что второй вариант, принимаемый во внимание, при изучении задачи будет использование аппаратного маршрутизатора 3-го уровня подобного, например, PASSPORT 1200 (Nortel Networks) или похожего по функциональности. Однако стоимость маршрутизируемого порта устройств подобного класса также вряд ли сможет порадовать. Оптимальным решением поставленной задачи будет применение сравнительно недорогого коммутатора второго уровня, который бы поддерживал протокол 802.1Q, другими словами работу с VLAN (полное описание протокола 802.1Q можно найти в документе, расположенном по адресу http://standards.ieee.org/reading/ieee/std/lanman/802.1Q-1998.pdf). В паре с коммутатором потребуется использовать Linux маршрутизатор, на котором также будет необходима поддержка работы с VLAN интерфейсами.

Структура системы. Выбор аппаратуры.

  Предполагается, что клиент (потребитель) будет подключен посредством кабеля "витая пара" в выделенный порт коммутатора. На стороне клиента кабель может подключаться как в маршрутизатор клиента, рабочую станцию так и в хаб или коммутатор. Поддержки VLAN на стороне клиента не требуется. В качестве основного коммутатора для тестирования подобной конфигурации мы выбрали устройство Lantech VIPSwitch HUB 2400. Как оказалось в последствии, выбор был не совсем удачным, но об этом позже. Устройств, которые достойно поддерживают работу с VLAN достаточно много, однако каждый производитель интерпретирует стандарт по своему, и в связи с этим реальная функциональность у разных устройств может существенно отличаться от того, что декларировано стандартом. Безусловно одна из лучших реализаций 802.1Q в коммутаторах от CISCO - Catalyst 2950-12 или 24 портовые коммутаторы, уже сегодня их можно приобрести по цене чуть ниже чем 1000 у.е. На сегодняшний день также существует линейка устройств Huawei (вся информация об этой торговой марке доступна через российский web сайт компании www.huawei.ru). Маршрутизаторы и коммутаторы Huawei по функциональности и математическому обеспечению практически идентичны устройствам CISCO, однако в 1.5 - 2 раза дешевле в связи с тем, что на российском рынке марка практически неизвестна. На наш взгляд это продукция будет пользоваться серьезным спросом ближайшее время, учитывая агрессивность цен и амбиции компании на российском рынке. Также имеет смысл обратить внимание на продукцию Allied Telesyn, мы не тестировали этот брэнд, однако по декларированным характеристикам устройство AT-8124XL также подходит для решения нашей задачи. На рис.1 изображена структурная схема системы доступа одного из наших клиентов, применяющих разделение клиентов посредством VLAN.



Рис.1


Реализация. Сервер доступа.

  Цель, которую мы преследуем на сервере доступа, это обеспечить маршрутизацию пакетов между VLAN (читается "виланами") используя единственный физический интерфейс eth1 (см. рис. 1), через который сервер доступа соединен с коммутатором. Предполагается что читатель знаком с процедурами сборки (компиляции) ядра Linux, а также с процедурами настройки маршрутизации.

  Для достижения цели в первую очередь необходимо настроить ядро с поддержкой VLAN. Для этого необходимо запустить конфигуратор ядра одной из команд, которые Вы предпочитаете (make menuconfig, make xconfig или make config) и разрешить все опции связанные с протоколом 802.1Q. После чего откомпилировать ядро:

# make dep && make bzImage && make modules && make modules_install

Перезагрузив новое ядро необходимо убедиться в том, что поддержка VLAN включена, для этого в момент загрузки необходимо заметить присутствие на экране следующих строк:

802.1Q VLAN Support v.X.XX Ben Greear
vlan Initialization complete.


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

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

# vconfig set_name_type [name-type]

Vconfig потребуется для всех манипуляций с VLAN интерфейсами, однако, эта утилита не входит в состав стандартного дистрибутива Linux, и поэтому ее надо установить из rpm пакета, который легко найти, например, через http://rpmfind.net или по адресу http://www.candelatech.com/~greear/vlan.html.

Существует четыре формата имени интерфейса

VLAN_PLUS_VID имя устройства будет выглядеть как: vlan0005
VLAN_PLUS_VID_NO_PAD имя устройства будет выглядеть как: vlan5
DEV_PLUS_VID имя устройства будет выглядеть как: eth0.0005
DEV_PLUS_VID_NO_PAD имя устройства будет выглядеть как: eth0.5

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

  Для настройки VLAN интерфейсов, потребуется не устанавливать IP адрес на том интерфейсе, которым сервер доступа будет подключен к коммутатору. В нашем случае это eth1. Эту операцию можно сделать так:

# ifconfig eth1 down
# ifconfig eth1 0.0.0.0 up


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

# vconfig add eth1 2
# vconfig add eth1 3
# vconfig add eth1 4

  Если команды завершились успешно, то созданным интерфейсам необходимо присвоить IP адреса:

# ifconfig -a
# ifconfig -i vlan0002 192.168.2.1 broadcast 192.168.2.255 netmask 255.255.255.0 up
# ifconfig -i vlan0003 192.168.3.1 broadcast 192.168.3.255 netmask 255.255.255.0 up
# ifconfig -i vlan0004 192.168.4.1 broadcast 192.168.4.255 netmask 255.255.255.0 up

  На этом конфигурирование сервера доступа можно считать законченным и следует переходить к настройке коммутатора.

Реализация. Коммутатор (На примере LANTECH VIPSwitch HUB 2400).

  Выбранный коммутатор предоставляет возможность web конфигурирования, однако для использования этой возможности необходимо настроить специфические опции Java машины в броузере Internet Explorer 5.0 (детали см. в руководстве по использованию). Забегая вперед, следует отметить, что успешно настроить изолирование VLAN друг от друга удалось только после того как на коммутаторе была полностью заменена прошивка (программное обеспечение коммутатора). Самое загадочное в нашем случае было то, что была заменена версия 1.23 на 1.23, однако скаченная с сайта производителя и датированная тем же числом, что и предустановленная. Возможно, это был дефект нашего экземпляра устройства но о настоящих причинах неработоспособности остается только догадываться. Если Вы столкнетесь с проблемой "пингования" VLAN'в между собой не поленитесь обновить прошивку.

  Основной экран конфигурирования VLAN показан на рис.2.


Рис.2


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

  Сервер доступа в нашем случае мы подключили в порт ? 24 и прописали его во все VLAN'ы, которые есть в системе. Кроме того, порт к которому подключен сервер доступа, необходимо сделать тэгированным. Это можно сделать в меню Port Configuration (второй слева пункт в строке меню).

На этом этапе настройки можно считать завершенными и можно приступить к тестированию.

Тестирование.

  Система настроена корректно если:

  Сетевые устройства, находящиеся в разных VLAN, не могут пересылать пакеты друг другу (проверяется: # ping IP_адрес_смежного_VLAN)

  Устройства каждого VLAN могут отправлять и посылать пакеты серверу доступа, соответственно на тот адрес, который присвоен интерфейсу соответствующего VLAN, в нашем случае, например, 192.168.2.1 для VLAN2, 192.168.3.1 для VLAN3 и т.д. (поверяется: # ping 192.168.2.1 из VLAN2)

  Если обе вышеприведенные команды приносят желаемый результат, то задача решена при помощи около 900 у.е. и дня работы системного администратора. Если VLAN'ы "пингуются" между собой, то, как правило, разбираться надо в коммутаторе. Если не "пингуется" сервер доступа из VLAN клиента, то, ошибку надо искать на Linux.

Реализация. Ограничение полосы пропускания для клиента (Shaping).

Если стоит задача ограничить скорость отдельно для каждого VLAN, то для данной задачи лучше всего подходит программа "rshaper". Достоинство этой программы в том, что с помощью нее можно ограничивать трафик не для отдельно взятого интерфейса, а для сети или даже отдельного IP адреса.
Программа поставляется в виде исходного кода, поэтому ее необходимо скомпилировать. В результате вы получаете модуль "rshaper.o" который неодходимо загрузить в ядро системы. Загрузка модулей в ядро осуществляется командой "insmod".

# insmod rshaper.o mode=2

где mode=
0 - исходящий трафик
1 - входящий трафик (default)
2 - оба вида трафика

Для управления используется утилита "rshaperctl". Вначале указывается IP адрес и маска сети, а затем требуемая скорость в байтах в секунду.

# rshaperctl 192.168.1.16/255.255.255.240 19200

или

# rshaperctl 192.168.1.16/28 19200

Таким образом, указав желаемую скорость для каждой из сетей, можно балансировать загрузку канала.