Шаманство над виланами. Создаем виртуальную локальную сетьДенис Колисниченко (dhsilabs@mail.ru, www.dkws.org.ua) Уж очень все вокруг виртуальное: виртуальная реальность, виртуальные машины, виртуальные частные сети… Стоп. А почему бы нам не организовать виртуальную локальную сеть? Тем более, аппаратные решения от Cisco, HP, Dlink и соответствующим образом настроенные виртуальные сетевые интерфейсы Linux, xBSD, Windows вполне это позволяют. Зачем нужны виртуальные сети?VLAN (Virtual Local Area Network, Виртуальная Локальная Сеть) – группа устройств, взаимодействующая напрямую на канальном уровне, хотя на физическом уровне все эти устройства подключены к разным коммутаторам. Устройства, находящиеся в разных виртуальных сетях, невидимы друг для друга на канальном уровне, даже если они подключены к одному и тому же коммутатору. А взаимодействие между устройствами осуществляется только на сетевом или других, более высоких уровнях. Виртуальные локальные сети используются для создания логической топологии сети, которая никак не зависит от физической топологии. По сравнению с реализацией на раздельных коммутаторах, VLAN уменьшает количество оборудования и сетевого кабеля, но требует обязательного использования более дорогих управляемых коммутаторов.
Все виртуальное, оказывается, находит вполне реальное применение. Виртуальная локальная сеть – это не какой-нибудь эмулятор или игрушка для админа, а инструмент построения современной сети. Во-первых, VLAN позволяет гибко разделять устройства на группы. Например, можно с легкостью объединить устройства, находящиеся в разных местах, в одну сеть, или же разделить устройства одной сети на разные виртуальные подсети. Во-вторых, виртуальная локальная сеть поможет уменьшить количество широковещательного трафика. С помощью VLAN можно разбить коммутатор на несколько широковещательных доменов и отправить широковещательное сообщение только одной группе устройств (одной виртуальной сети). В-третьих, VLAN позволяет повысить безопасность и управляемость сети. VLAN активно используется для борьбы с ARP-спуфингом и существенно упрощает применение политик и правил безопасности. Кроме того, с помощью виртуальных сетей можно применять правила к целым подсетям, а не к каждому устройству отдельно. В последнее время VLAN активно применяется крупными провайдерами домашних сетей. Поскольку число клиентов и сервисов (например, данные, VoIP, IPTV) постоянно растет, провайдеры выбирают коммутаторы, которые поддерживают более 1024 статических VLAN (стандарт 802.1Q). Для соединения сетей офисов через сеть провайдера используется механизм Double VLAN (смотри врезку), что позволяет эффективнее использовать идентификаторы виртуальных сетей (VLAN ID) в крупных сетях. Метим трафикКогда компьютер передает данные, он ничего не подозревает ни о своей принадлежности к какой-нибудь виртуальной сети, ни о существовании VLAN. Он просто передает информацию. А вот всем остальным занимается коммутатор, который знает, что компьютер, подключенный к тому или иному порту, принадлежит такой-то виртуальной сети.
Что делать, если на порт приходит трафик разных VLAN? Как его различить? Для этого используется маркировка кадров. Она позволяет идентифицировать трафик, то есть установить, к какой виртуальной сети он принадлежит. Существуют различные варианты маркировки кадров. Иногда производители оборудования, в частности Cisco, разрабатывают собственные протоколы маркировки кадров. Но чаще используется стандарт IEEE 802.1Q. В этом случае внутрь кадра помещается специальная метка – тег, которая передает информацию о принадлежности трафика к определенной VLAN. Размер этой метки – всего 4 байта. Состоит она из следующих полей:
Маркер вставляется перед полем «Тип протокола». После этого пересчитывается контрольная сумма, поскольку кадр уже изменился. Порты и VLANПоговорим о портах коммутатора и виртуальных сетях. Порты коммутатора, которые поддерживают виртуальную сеть, можно разделить на две группы: маркированные порты (в терминологии Cisco - это транковые порты, англ. trunk ports) и немаркированные порты (порты доступа, access ports).
Порты доступа используются для передачи немаркированного трафика. Порт доступа может принадлежать только одной VLAN, однако он может быть маркированным в нескольких VLAN и одновременно являться портом доступа для какой-то другой виртуальной сети (в таком случае сеть называется родной для этого порта, native VLAN). О «родном» режиме передачи трафика скажу ниже. Когда на порт доступа приходит маркированный трафик, то он обычно должен удаляться. Но это происходит не всегда – зависит от настроек коммутатора. По умолчанию все порты коммутатора считаются портами доступа для сети VLAN 1. В процессе настройки администратор может изменить тип порта на маркированный и определить принадлежность портов к разным VLAN. Порты коммутатора могут привязываться к определенной виртуальной сети статически или динамически. В первом случае администратор вручную определяет, какой порт будет принадлежать к какой VLAN. При динамическом назначении узлов принадлежность порта к той или иной виртуальной сети определяется коммутатором. Процедура назначения портом описана в стандарте 802.1X. Он предусматривает аутентификацию пользователя на RADIUS-сервере для получения доступа к порту. ПрактикаА теперь поговорим о настройке VLAN на коммутаторах Cisco. Думаю, уже всем ясно, что VLAN – штука полезная, и хочется все настроить на практике. Чтобы не изобретать колесо, будем использовать топологию сети – примерно такую, как описано в документации Cisco, но с небольшими усовершенствованиями. Ранние версии коммутаторов Cisco поддерживали проприетарный протокол ISL (Inter Switch Link). Сейчас этот протокол упразднен и вместо него используется 802.1Q. Как уже было отмечено, по умолчанию все его порты принадлежат к vlan 1. Чтобы создать вторую виртуальную сеть (vlan 2) и присвоить ей имя, используются следующие команды Cisco:
Далее нужно назначить порты к той или иной сети. Назначим порты fa0/3 и fa0/4 к виртуальной сети vlan 2:
Первая команда выбирает интерфейс, вторая задает режим порта – access. Третья назначает порт виртуальной сети vlan 2.
Просмотреть информацию о назначенных портах и созданных виртуальных сетях можно с помощью команды:
Теперь настало время создать транковый порт. Делается это командами:
Можно задать «родной» режим, – то есть трафик сети vlan 2, передающийся через транковый порт, будет немаркированным. А весь немаркированный трафик, попавший на транковый интерфейс, будет промаркирован как принадлежащий vlan 2 (по умолчанию он воспринимается как трафик vlan 1)
Просмотреть информацию о транковом порте можно с помощью одной из двух команд:
Вот конфигурация для нашего первого коммутатора switch 1:
Настройки для коммутатора switch2 выполняются аналогичным способом. Теперь представим, что в нашей сети появился маршрутизатор, он же роутер. Топология сети будет немного изменена, как показано на рисунке («Новая топология сети»). Первым делом нам нужно включить маршрутизацию на коммутаторе switch1:
После этого указать IP-адрес маршрутизатора (192.168.1.1). Этот адрес будет шлюзом по умолчанию для компьютеров первой виртуальной сети (vlan1 или default):
Аналогично можно задать:
Теперь настроим интерфейс fa0/20, который соединен с маршрутизатором. Трафик, не предназначенный нашим виртуальным сетям, должен перенаправляться на маршрутизатор, а он уже сам пусть разбирается, что с ним делать. Вот необходимые команды конфигурации:
Осталось прописать сам маршрут:
Другие производителиCisco – далеко не единственный производитель сетевого оборудования. Учитывая, что оборудование от Cisco стоит немало, желающие сэкономить наверняка будут искать более дешевые аналоги, например, оборудование от D-Link. Простенько, иногда зависает (ничего личного, говорю, как есть), – но зато ощутимо дешевле. Настройка VLAN в LinuxА теперь поговорим о настройке виртуальных сетей в ОС Linux. Этот раздел статьи понадобится, если ты надумал построить программный маршрутизатор между двумя VLAN на базе Linux или если нужно обеспечить присутствие одного и того же сервера в нескольких VLAN – такой себе «Фигаро здесь и Фигаро там».
Модуль не найден? Тогда нужно перекомпилировать ядро, включив поддержку этого модуля в разделе Network options / 802.1Q VLAN Support.
Теперь укажем, к какому интерфейсу подключена какая виртуальная сеть. Для этого используется команда vconfig (пакет vlan или vconfig – название пакета, содержащего программу vconfig, зависит от дистрибутива). Формат вызова команды такой:
Например:
В данном случае мы связали vlan1 и vlan2 с одним сетевым интерфейсом – eth0. Далее нужно указать IP-адрес и сетевую маску для каждого интерфейса:
Можно задать маршрут по умолчанию (если необходимо):
Получить исчерпывающую информацию о виртуальных интерфейсах можно через псевдофайловую систему /proc:
Это еще не все. VLAN мы вроде бы настроили, но при перезагрузке настройки потеряются. Чтобы этого не случилось, нужно прописать модуль 802.1q в файле /etc/modules.conf, а настройки VLAN – в файле /etc/network/interfaces, например, так: Также можно создать сценарий и добавить его вызов в файлы автозапуска системы – это уже кому как больше нравится. VLAN в Windows: миф или реальность?Windows не обладает встроенной поддержкой VLAN, однако ее можно добавить, установив специальные драйверы. Вот они: Intel Advanced Networking Suite (iANS), 3com DynamicAccess, Broadcom Advanced Server Program (BASP). Все эти драйверы ты без проблем найдешь в интернете, как и документацию, в которой будет описано, что с ними делать. Но вряд ли тебе придется настраивать VLAN в Windows, поскольку правильнее и проще использовать или готовые устройства с поддержкой VLAN, или же отдельный Linux-сервер.
Вместо заключенияПонятно, что эта статья полностью не охватывает все секреты настройки VLAN, но, надеюсь, общее впечатление у тебя сформировалось. Дополнительную информацию можно получить по следующим ссылкам:
Что такое «Double VLAN»?Это функция, поддерживающая инкапсуляцию тегов IEEE 802.1Q VLAN в теги второго уровня 802.1Q tag на провайдерских граничных коммутаторах Provider Edge (PE). При помощи Double VLAN сервис-провайдер может использовать уникальные VLAN (Service-provider VLAN ID, или SP-VLAN ID) для предоставления услуг клиентам, которые имеют несколько VLAN в своих сетях. VLAN клиента, или Customer VLAN IDs (CVLAN IDs), в этом случае сохраняются, и трафик от различных клиентов сегментируется, даже если он передается в одном и том же VLAN. Протоколы автоконфигурированияСергей Супрунов, системный администратор, автор многих статей по системному и сетевому администрированию Технология VLAN при всей своей полезности имеет и ряд недостатков, с которыми приходится считаться. Раньше наиболее частой была проблема совместимости оборудования: не все коммутаторы и хабы умели безболезненно пропускать тегированные кадры, и не все сетевые адаптеры поддерживали увеличенный размер кадра (oversized frames). Сейчас с этим ты вряд ли столкнешься. Поэтому на первый план выходит необходимость вручную настраивать каждый порт каждого коммутатора. Для больших разветвленных сетей это может превратиться в ту еще в головную боль. Проблему пытаются решить по-разному. Тут и протокол 802.1X, позволяющий совместно с RADIUS-сервером конфигурировать VLAN в зависимости от аутентификационной информации пользователя (смотри xgu.ru/wiki/802.1X_и_RADIUS); и протокол VQP, совместно с сервером VMPS обеспечивающий динамическое включение в ту или иную VLAN портов коммутатора на основе MAC-адресов, подключенных к ним компьютеров (en.wikipedia.org/wiki/VQP). Из более простых решений можно отметить протокол GVRP (описанный в стандарте IEEE 802.1P). Его поддержка позволяет коммутаторам распознавать VLAN и автоматически конфигурировать транковые порты (www.javvin.com/protocolGVRP.html). В системах Cisco аналогичную задачу обычно решает их собственный протокол - VTP (en.wikipedia.org/wiki/VTP). |