Встала задача маршрутизировать vlan’ы. Нашёл вот такое решение
Создание vlan’а
#ifconfig vlan101 create
#ifconfig vlan101 vlan 101 vlandev em0
Или тоже самое, но одной командой:
#ifconfig vlan101 create vlan 101 vlandev em0 up
Внимание!
В 9.2-Stable обнаружен баг(особенность): любое создание интерфейса вырубало форвардинг, устанавливало параметр net.inet.ip.forwarding в 0. Что бы этого не было, нужно устанавливать gateway_enable=”YES” в rc.conf. А вот почему: теперь devd реагирует на создание любого сетевого интерфейса и запускает /etc/pccard_ether $subsystem start. Этот скрипт, в свою очередь, запускает /etc/rc.d/netif quietstart $ifn, а тот уже делает кучу вещей, совершенно ненужных IMO при создании _каждого_ интерфейса, особенно при массовом обслуживании через mpd, когда интерфейсы создаются/удаляются очень часто.
Для поднятия vlan’ов при загрузке ОС в /etc/rc.conf добавляем следующее
gateway_enable="YES"
cloned_interfaces="vlan101 vlan102 vlan103"
ifconfig_vlan101="inet x.x.x.x netmask 255.255.255.248 vlan 101 vlandev em0 mtu 1500"
ifconfig_vlan102="inet x.x.x.x netmask 255.255.255.248 vlan 102 vlandev em0 mtu 1500"
ifconfig_vlan103="inet x.x.x.x netmask 255.255.255.248 vlan 103 vlandev em0 mtu 1500"
ifconfig_em0="up mtu 1504"
Примечание.
Если сетевая карта не поддерживает MTU больше 1500, тогда нужно именить значение MTU непосредственно для самих вланов на 4 байта меньше, то есть поставить 1496:
ifconfig_em0="up mtu 1500"
ifconfig_vlan101="inet x.x.x.x netmask 255.255.255.248 vlan 101 vlandev em0 mtu 1496"
Если нужно добавить много вланов, то я написал скрипт для автоматизации создания вланов (в /etc/rc.conf придёться добавлять все вланы вручную)
#!/bin/sh
for i in vlan101 vlan102 vlan103
do
echo $i
n=`echo $i | awk '{a=substr($1,5,3); print a}'`
/sbin/ifconfig $i create && ifconfig $i vlan $n vlandev em0
done
Примечание.
Если у вас прописаны вланы в /etc/rc.conf, то для создания вланов, достаточно просто выполнить команду:
ifconfig vlanX create
Важный момент – значение MTU на интерфейсе с вланами. Поскольку для инкапсуляции вланов используется дополнительно 4 байта, то и MTU соответственно нужно увеличить на 4 байта, то есть 1504 (для vlan’ов с MTU 1500).
Скажу сразу, что не все сетевые адаптеры позволяют задавать MTU больше 1500. Выход простой – у вланов тогда ставьте MTU 1496.
Так же не забудьте, на свичах включать jumbo frames, где это явно можно задать.
QinQ vlans
Отдельно хочется сказать про QinQ вланы. Это технология, которая позволяет инкапсулировать вланы во вланы. Например, есть несколько пользовательских вланов, которые нужно передать на другой конец. Можно конечно использовать переименование вланов, но так быстро закончатся доступные порты, а можно делать QinQ. О том, как это сделать, кратко написано здесь
http://juick.com/Shura/1761713
http://alexandr.sysoev.ru/node/134
http://birdofluck.livejournal.com/3451.html
http://juick.com/hizel/2654599
http://markmail.org/message/4a27au6yzmfr2q5q
Vlan over IP
Представим ситуацию, когда нужно пересылать vlan’ы через обычный, нетегированный канал. В этом нам поможет EtherIP (RFC 3378). Правда он не умеет STP, но кому это не надо – можете смело использовать. Примеры использования можно почерпнуть отсюда:
https://sites.google.com/a/glyns.it/website/projects/etherip-rfc-3378-on-freebsd
http://modiford.com/menu-computing/4-open-source/9-rfc-3378-etherip-with-freebsd
А можно ещё использовать конструкцию OpenVPN + OpenVswitch