VLAN
VLAN (аббр. от англ. Virtual Local Area Network) — логическая («виртуальная») локальная компьютерная сеть, представляет собой группу хостов с общим набором требований, которые взаимодействуют так, как если бы они были подключены к широковещательному домену, независимо от их физического местонахождения. VLAN имеет те же свойства, что и физическая локальная сеть, но позволяет конечным станциям группироваться вместе, даже если они не находятся в одной физической сети. Такая реорганизация может быть сделана на основе программного обеспечения вместо физического перемещения устройств.
Для этого существуют следующие решения:
•.по порту (Port-based, 802.1Q): порту коммутатора вручную назначается одна VLAN. В случае, если одному порту должны соответствовать несколько VLAN (например, если соединение VLAN проходит через несколько свитчей), то этот порт должен быть членом транка. Только одна VLAN может получать все пакеты, не отнесённые ни к одной VLAN (в терминологии 3Com, Planet, D-Link, Zyxel, HP — untagged, в терминологии Cisco — native VLAN). Свитч будет добавлять метки данной VLAN ко всем принятым кадрам не имеющим никаких меток. VLAN, построенные на базе портов, имеют некоторые ограничения.
•.по MAC-адресу (MAC-based): членство в VLANe основывается на MAC-адресе рабочей станции. В таком случае свитч имеет таблицу MAC-адресов всех устройств вместе с VLANами, к которым они принадлежат.
•.по протоколу (Protocol-based): данные 3-4 уровня в заголовке пакета используются чтобы определить членство в VLANe. Например, IP-машины могут быть переведены в первую VLAN, а AppleTalk-машины во вторую. Основной недостаток этого метода в том, что он нарушает независимость уровней, поэтому, например, переход с IPv4на IPv6 приведет к нарушению работоспособности сети.
•.методом аутентификации (Authentication based): устройства могут быть автоматически перемещены в VLAN основываясь на данных аутентификации пользователя или устройства при использовании протокола 802.1x.
Это простейший вариант организации виртуальной ЛВС. VLAN на базе портов обеспечивают высочайший уровень управляемости и безопасности. Устройства связываются в виртуальные сети на основе портов коммутатора, к которым эти устройства физически подключены. VLAN на базе портов являются статическими и для внесения изменений требуется физическое переключение устройств.
Однако построенные на базе портов виртуальные сети имеют некоторые ограничения. Они очень просты в установке, но позволяют поддерживать для каждого порта только одну виртуальную ЛВС. Следовательно, такое решение малоприемлемо при использовании концентраторов или в сетях мощными серверами, к которым обращается много пользователей (сервер не удастся включить в разные VLAN). Кроме того, виртуальные сети на основе портов не позволяют вносить в сеть изменения достаточно простым путем, поскольку при каждом изменении требуется физическое переключение устройств.
Хотя этот тип виртуальных сетей относится к числу наиболее простых, VLAN на базе MAC-адресов настраивать сложнее, нежели сети на основе физических портов.
Настройка виртуальной сети на основе MAC-адресов может отнять много времени - представьте себе, что вам потребуется связать с VLAN адреса 1000 устройств. Кроме того, MAC-адреса "наглухо зашиты" в оборудование и может потребоваться много времени на выяснение адресов устройств в большой, территориально распределенной сети. Однако программа управления сетью OmniVision корпорации Xylan позволяет собрать адреса в масштабе всей сети автоматически, избавляя администратора от рутинной работы. С помощью программы можно настроить виртуальные сети, используя вместо MAC-адресов связанные с ними имена станций.
Виртуальные ЛВС сетевого уровня позволяют администратору связать трафик для того или иного протокола в соответствующей виртуальной сети.
Спектр возможностей коммутатора, на базе которого строится VLAN, чато определяет гибкость виртуальных сетей данного типа. Многие виртуальные ЛВС сетевого уровня поддерживают системы на базе нескольких коммутаторов, тогда как другие могут работать только с одним устройством. Помните, что этот тип виртуальных ЛВС почти не отличается от сетей на базе маршрутизаторов и некоторые коммутаторы неспособны обеспечить требуемую в данном случае производительность. Коммутаторы OmniSwitch хорошо справляются с задачами этого типа.
Этот тип виртуальных сетей строится на базе заданного в каждом кадре типа протокола.
После того, как правила загружены в коммутаторы OmniSwitch или PizzaSwitch, устройства сразу же позволяют начать работу с виртуальными сетями на основе заданных администратором правил.
Многоадресный (multicast) трафик отличается от широковещательного (broadcast), который передается во всю сеть, и одноадресного (unicast), обеспечивающего связь "точка-точка".
Многоадресный трафик представляет собой обмен "точка-многоточка" (один со многими) или многоточечный (многие со многими) и в последнее время становится все более популярным для различных сетевых приложений. Многоадресный режим может использоваться для видеоконференций, биржевых систем, новостей и т.п. систем, где одна и та же информация передается многочисленным пользователям.
Виртуальные ЛВС с многоадресным трафиком создаются динамически путем прослушивания IGMP (Internet Group Management Protocol). Когда пользователь открывает приложение, использующее режим multicast, он динамически включается в виртуальную сеть, связанную с данным приложением. По окончании работы с программой пользователь удаляется из соответствующей виртуальной сети.
Многоадресный трафик в общем случае является стабильным потоком с достаточно широкой полосой. Следовательно, такой трафик лучше всего зафиксировать в одной виртуальной сети для предотвращения лавинной маршрутизации (flooding).
Это наиболее мощная реализация VLAN, позволяющая администратору использовать любые комбинации критериев для создания виртуальных ЛВС. Для включения устройств в виртуальные ЛВС можно использовать все перечисленные выше способы при условии их поддержки установленными в сети коммутаторами. После того, как правила загружены во все коммутаторы, они обеспечивают организацию VLAN на основе заданных администратором критериев. Поскольку в таких сетях кадры постоянно просматриваются на предмет соответствия заданным критериям, принадлежность пользователей к виртуальным сетям может меняться в зависимости от текущей деятельности пользователей.
Виртуальные ЛВС на основе правил используют широкий набор критериев принадлежности к сети, включая все перечисленные выше варианты: MAC-адреса, адреса сетевого уровня, тип протокола и т.д. Возможно также использовать любые комбинации критериев для создания правил, наиболее точно соответствующих вашим задачам.
VLAN для уполномоченных пользователей обеспечивают высокий уровень безопасности в сети и предъявляют более строгие требования к пользователям для предоставления доступа к серверам или иным сетевым ресурсам. Например, сеть уполномоченных пользователей может быть создана для финансового отдела предприятия и сотрудники других подразделений не смогут получить доступ в эту сеть, не имея соответствующих полномочий. Для поддержки таких сетей в коммутаторах OmniSwitch и PizzaSwitch используются функции встроенных брандмауэров. Администратор может эффективно управлять доступом пользователей, задавая процедуру аутентификации. Хотя другие варианты VLAN обеспечивают некоторые средства безопасности, только сети уполномоченных пользователей делают это на достаточно высоком уровне.
Сравнительные характеристики различных типов AutoTracker VLAN
| По портам | По MAC-адресам | Сетевой уровень | По протоколам | Многоадресные | На основе правил |
Гибкость | - | Средняя | Средняя | Средняя | Средняя | Высокая |
Простота связывания | + | - | Переменная | + | Переменная | + |
Перенос устройств | - | + | + | + | + | Автоматически |
Использование структуры сети | - | - | + | - | + | Автоматически |
Несколько VLAN для одного порта (поддержка концентраторов и серверов) | - | + | + | + | + | Автоматически |
Возможность включения устройства в несколько VLAN | - | Возможно | Возможно | Возможно | Возможно | Автоматически |
Уровень | Высокий | Минимальный | Минимальный | Минимальный | Минимальный | Выбирается |
•.Облегчается перемещение, добавление устройств и изменение их соединений друг с другом.
•.Достигается большая степень административного контроля вследствие наличия устройства, осуществляющего между сетями VLAN маршрутизацию на 3-м уровне.
•.Уменьшается потребление полосы пропускания по сравнению с ситуацией одного широковещательного домена.
•.Сокращается непроизводственное использование CPU за счет сокращения пересылки широковещательных сообщений.
•.Предотвращение широковещательных штормов и предотвращение петель.
IEEE 802.1Q — открытый стандарт, который описывает процедуру тегирования трафика для передачи информации о принадлежности к VLAN.
Так как 802.1Q не изменяет заголовки кадра (фрейма), то сетевые устройства, которые не поддерживают этот стандарт, могут передавать трафик без учёта его принадлежности к VLAN.
802.1Q помещает внутрь фрейма тег, который передает информацию о принадлежности трафика к VLAN.
Размер тега — 4 байта. Он состоит из таких полей:
•Tag Protocol Identifier (TPID, идентификатор протокола тегирования). Размер поля — 16 бит. Указывает какой протокол используется для тегирования. Для 802.1Q используется значение 0x8100.
•Priority (приоритет). Размер поля — 3 бита. Используется стандартом IEEE 802.1p для задания приоритета передаваемого трафика.
•Canonical Format Indicator (CFI, индикатор канонического формата). Размер поля — 1 бит. Указывает на формат MAC-адреса. 0 — канонический, 1— не канонический. CFI используется для совместимости между сетями Ethernet и Token Ring.
•VLAN Identifier (VID, идентификатор VLAN). Размер поля — 12 бит. Указывает какому VLAN принадлежит фрейм. Диапазон возможных значений от 0 до 4094.
При использовании стандарта Ethernet II, 802.1Q вставляет тег перед полем «Тип протокола». Так как фрейм изменился, пересчитывается контрольная сумма.
В стандарте 802.1Q существует понятие Native VLAN. По умолчанию это VLAN 1. Трафик, передающийся в этом VLAN, не тегируется.
Вставка тега 802.1Q в кадр Ethernet-II
Необходима поддержка 802.1Q ядром Linux:
# modprobe 8021q
Выключить интерфейс:
# /sbin/ifconfig eth0 down
Теперь поднимем его, но уже без адреса:
# /sbin/ifconfig eth0 0.0.0.0 up
Затем говорим какие VID будем пропускать. Для этого используем программу vconfig. В результате будут созданы виртуальные интерфейсы с именами, содержащими VLAN ID по типу интерфейс.VLAN-ID (напр. Eh0.20):
# /sbin/vconfig add eth0 2
# /sbin/vconfig add eth0 3
# /sbin/vconfig add eth0 4
# /sbin/vconfig add eth0 5
Далее, назначаем каждому интерфейсу свой IP-адрес:
# /sbin/ifconfig eth0.2 10.х.х.х netmask 255.255.255.0 up
# /sbin/ifconfig eth0.3 192.168.0.х netmask 255.255.255.0 up
# /sbin/ifconfig eth0.4 192.168.1.х netmask 255.255.255.0 up
# /sbin/ifconfig eth0.5 х.х.х.х netmask 255.255.255.224 up
Если маршрут по умолчанию смотрит в один из VLAN'ов, нужно его задать:
# /sbin/route add default gw 192.168.1.1
Лучше сразу запретить пересылку трафика между интерфейсами (forwarding). Если пересылку разрешить, весь трафик между VLANами может пересылаться через эту систему. Если для этого она и настраивалась, пересылку разрешайте, но помните, что вы можете ограничить прохождение трафика и регулировать его другим способом.
Для управления прохождением трафика между VLAN'ами можно использовать стандартные механизмы ядра Linux, такие как маршрутизация, iptables и QoS.
Просматривать информацию о VLAN-подынтерфейсах в Linux можно через /proc:
%# cat /proc/net/vlan/eth0.2
eth0.2 VID: 2 REORDER_HDR: 1 dev->priv_flags: 1
total frames received: 53973265
total bytes received: 1075877000
Broadcast/Multicast Rcvd: 397878
total frames transmitted: 41904604
total bytes transmitted: 2333267429
total headroom inc: 0
total encap on xmit: 41904604
Device: eth0
INGRESS priority mappings: 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0
EGRESSS priority Mappings:
В случае, если надо объединить VLAN-сети, соединенные между собой через несколько коммутаторов, то необходимо их объединить:
Ethernet bonding — это объединение двух или более физических сетевых интерфейсов в один виртуальный для обеспечения отказоустойчивости и повышения пропускной способности.
Опции модуля могут быть заданы как аргументы командной строки или указаны в файлах конфигурации /etc/modules.conf или /etc/modprobe.conf.
Существуют два способа диагностирования (мониторинга) связанности:
•.с помощью статуса Media Independent Interface (MII);
•.с помощью ARP-запросов и ответов.
miimon — определяет как часто производится мониторинг MII. 0 – мониторинг отключён (используется по-умолчанию). Рекомендуемое значение 100 мс.
arp_interval — с какой периодичностью в миллисекундах осуществлять ARP-мониторинг. Значение 0 — ARP-мониторинг выключен.
arp_ip_target — IP-адрес, по которому осуществлять ARP-мониторинг (в случае если значение arp_interval больше 0). Если с данного адреса нет ARP-ответов, значит канал, по которому посылались запросы, не работает.
downdelay — задержка в миллисекундах с момента, как было обнаружено, что связь утеряна, до момента, как данный канал перестанет быть активным. Задержка нужна, чтобы отфильтровывать кратковременные сбои. Например, после переключения кабеля. По-умолчанию используется значение 0 – нет задержки.
updelay — то же самое, что и downdelay, но определяет задержку по включению. На случай, когда сетевой коммутатор (switch) или концентратор (hub) "не до конца включились", напряжение на порт подано, а пакеты не принимаются.
max_bonds — определяет количество bond-интерфейсов, которые будут созданы при загрузке одного модуля. Значение по-умолчанию — 1.
primary — указывает подчинённый интерфейс (eth0, eth1 и прочие), который будет основным в связке. Указанный интерфейс всегда будет работать в активном режиме, когда это возможно. Особенно актуально это, когда скорость одного интерфейса больше других. Опция primary доступна только для режима active-backup.
primary_reselect — определяет условия выбора активного подчинённого интерфейса:
•.always или 0 — первичный подчинённый интерфейс всегда становится активным, когда это возможно;
•.better или 1 — интерфейс становится активным, если скорость и duplex-режим больше, чем скорость и дуплексный режим активного интерфейса;
•.failure или 2 — интерфейс становится активным лишь в случае, когда текущий активный интерфейс становится недоступным.
Параметр primary_reselect не учитывается в двух случаях:
•.если нет активных подчинённых интерфейсов, то первичный интерфейс всегда становится активным;
•.при первоначальном создании bond-связки, первичный интерфейс всегда становится активным.
•Round-robin balance. Этот режим используется по-умолчанию. Пакеты передаются последовательно в циклическом порядке с первого до последнего интерфейса из bonding-группы. В случае подключения сервера к разным коммутаторам, требуется их настройка. Режим обеспечивает распределение нагрузки и отказоустойчивость.
•Active-backup. Активен только один интерфейс из группы, остальные находятся в режиме ожидания, при его отказе, на замену подключается другой интерфейс из группы. Режим применяется для повышения отказоустойчивости.
•XOR. В этом режиме физический интерфейс для передачи пакетов вычисляется по формуле:
( source XOR destination ) % n_slaves
где:
•.source — MAC-адрес отправителя;
•.destination — MAC-адрес получателя;
•.n_slaves — число работающих интерфейсов в bonding-е.
Интерфейс, отправляющий пакет зависит от MAC-адреса получателя, каждый физический сетевой интерфейс отправляет пакеты только определённой группе MAC-адресов, тем самым обеспечивая распределение нагрузки.
•Broadcast. Широковещательный режим. Все пакеты передаются через все интерфейсы, что обеспечивает отказоустойчивость.
•IEEE 802.3ad Dynamic link aggregation. Динамическое объединение соединений. В группы объединяются одинаковые по скорости и дуплексному режиму интерфейсы. Все интерфейсы используются одновременно в соответствии со спецификацией IEEE 802.3ad.
Необходимые условия выполнения:
•.поддержка в ethtool определения скорости и дуплексного режима сетевых карт;
•.коммутатор, поддерживающий стандарт IEEE 802.3ad Dynamic link aggregation.
•.Adaptive transmit load balancing. Адаптивная балансировка передачи. Исходящий трафик распределяется в соответствии с текущей нагрузкой (в зависимости от скорости) на интерфейсах.
Необходимые условия выполнения:
•.поддержка в ethtool определения скорости и дуплексного режима сетевых карт.
•.Adaptive load balancing. Включает в себя balance-tlb плюс балансировку на приём (rlb) для IPv4. Не требует применения специальных коммутаторов. Балансировка на приём достигается на уровне протокола ARP. Драйвер перехватывает ARP ответы локальной системы и, в зависимости от загрузки, перезаписывает физический адрес на адрес одного из сетевых интерфейсов.
# modprobe bonding max_bonds=1 mode=1 primary=eth0 miimon=100 downdelay=3000 updelay=1000
Со следующими параметрами:
•.max_bonds=1 — один bond-интерфейс;
•.mode=1 — режим active-backup;
•.primary=eth0 — первичным подчинённым интерфейсом является eth0;
•.miimon=100 — каждые 100мс проверяется состояние подключения интерфейса;
•.downdelay=3000 — через три секунды после того как интерфейс теряет соединение, он становится неактивным и на его замену подключается резервный интерфейс;
•.updelay=1000 — через одну секунду после того, как появляется соединение на интерфейсе, на него могу посылаться пакеты.
Проверить, что модуль появился:
# lsmod | grep bonding
bonding 63220 0
В большинстве современных дистрибутивов, драйверы уже присутствуют в ядре Linux в качестве модулей и для удобной работы с Ethernet bonding, желательно установить утилиту управления ifenslave. Если таковой утилиты в дистрибутиве нет, то её можно собрать:
# cd /usr/src/linux/Documentation/networking
# gcc -Wall -O -I/usr/src/linux/include ifenslave.c -o ifenslave
# cp ifenslave /sbin/
Для автоматического запуска в Slackware можно добавить скрипт rc.bond:
#!/bin/sh
#
case "$1" in
'start')
echo "start bond0"
#modprobe bonding mode=balance-alb miimon=100
modprobe bonding mode=balance-rr miimon=100
modprobe tg3
ifconfig bond0 up
ifenslave bond0 eth0
ifenslave bond0 eth1
#TODO need to be changed
ifconfig bond0 hw ether 00:16:3e:aa:aa:aa
;;
'stop')
ifconfig bond0 down
rmmod bonding
rmmod tg3
;;
*)
echo "Usage: $0 {start|stop}"
;;
esac
И добавить строку запуска скрипта в файл rc.M после строки «# Initialize the networking hardware»:
# If script rc.bond is executeable then start it
if [ -x /etc/rc.d/rc.bond ]; then
. /etc/rc.d/rc.bond start
fi
Надо учесть, что физические Ethernet-карты не должны иметь сетевых адресов:
IPADDR[0]=""
NETMASK[0]=""
USE_DHCP[0]=""
DHCP_HOSTNAME[4]=""
IPADDR[1]=""
NETMASK[1]=""
USE_DHCP[1]=""
DHCP_HOSTNAME[1]=""
В файл rc.inet1.conf перед строками настройки маршрута по-умолчании надо добавить следующее:
IFNAME[4]="bond0"
IPADDR[4]="XXX.XX.XX.XX"
NETMASK[4]="255.255.255.0"
USE_DHCP[4]=""
DHCP_HOSTNAME[4]=""
Посмотреть настройку можно в каталоге /proc:
# cat /proc/net/bonding/bond0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:e0:81:5e:9e:c4
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:e0:81:5e:9e:c5
Кроме этого можно воспользоваться программой mii-tool.