Уже довольно большой период времени все сетевые интерфейсы настраиваю с поддержкой 802.1Q VLAN. Решил описать процедуру настройки, возможно мой опыт пригодится еще кому-либо.
Итак, не будем забывать о том, что есть сетевые карты, которые поддерживают vlan на аппаратном уровне, а есть которые не поддерживаются. Если сетевая карта не поддерживает vlan, во FreeBSD предусмотрена software поддержка, но карточка должна поддерживать oversized пакеты. Этим требованиям удовлетворяет большинство современных сетевых карт.
FreeBSD позволяет использовать vlan-интерфейсы двух типов:
Исходные данные:
Для поддержки 802.1Q VLAN на уровне ядра, необходимо наличие в конфигурационном файле ядра наличие следующей строки:
device vlan |
Но если поддержки 802.1Q VLAN на уровне ядра нету, то ничего страшного, поддержка 802.1Q VLAN подгрузится в виде модуля:
# kldstat | grep vlan 4 1 0xffffffff80822000 2306 if_vlan.ko |
Итак, приступим к созданию VID 8.
# ifconfig vlan8 create vlan 8 vlandev nfe0 195.3.159.250 netmask 255.255.255.252 |
Теперь более подробно о используемых опциях:
По аналогии создаем vlan12:
# ifconfig vlan12 create vlan 12 vlandev nfe0 10.25.25.1 netmask 255.255.255.0 |
Проверяем, что у нас получилось:
# ifconfig nfe0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8<VLAN_MTU> ether 00:22:15:02:04:8f media: Ethernet autoselect (100baseTX <full-duplex>) status: active lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 options=3<RXCSUM,TXCSUM> inet 127.0.0.1 netmask 0xff000000 vlan8: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:22:15:02:04:8f inet 195.3.159.250 netmask 0xfffffffc broadcast 195.3.159.251 media: Ethernet autoselect (100baseTX <full-duplex>) status: active vlan: 8 parent interface: nfe0 vlan12: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:22:15:02:04:8f inet 10.25.25.1 netmask 0xffffff00 broadcast 10.25.25.255 media: Ethernet autoselect (100baseTX <full-duplex>) status: active vlan: 12 parent interface: nfe0 |
Теперь дело за малым - внести необходимые изменения в rc.conf, чтобы не потерять настройки после перезагрузки сервера. Вот список необходимых опций:
ifconfig_nfe0="up" cloned_interfaces="vlan8 vlan12" |
ifconfig_nfe0="up" - указываем, что интерфейс необходимо "поднять", иначе он не подымется самостоятельно. Тоесть виртуальные интерфейсы создадутся, но трафик по ним проходить не будет.
cloned_interfaces="vlan8 vlan12" - необходимо перечислить, какие виртуальные интерфейсы необходимо создать.
Для удаления виртуального интерфейса необходимо воспользоваться ключем "destroy" команды ifconfig. Пример удаления vlan12:
# ifconfig vlan12 destroy |
Исходные данные:
Для поддержки 802.1Q VLAN на уровне ядра, необходимо наличие в конфигурационном файле ядра наличие следующей строки:
device vlan |
Если поддержки 802.1Q VLAN на уровне ядра нету, подгрузим необходимый модуль ядра:
# kldload /boot/kernel/if_vlan.ko 4 1 0xffffffff80822000 2306 if_vlan.ko |
Для автоматической подгрузки модуля во время загрузки операционной системы, необходимо внести изменения в loader.conf:
# echo 'if_vlan_load="YES"' >> /boot/loader.conf |
Создадим vlan-интерфейс c VID 7:
# ifconfig re0.7 create 195.3.158.42 netmask 255.255.255.240 |
Более подробно о используемых опциях:
По аналогии создадим интерфейс с VID 12:
# ifconfig re0.12 create 10.25.25.1 netmask 255.255.255.0 |
Проверяем, что у нас получилось в результате:
# ifconfig re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=b<RXCSUM,TXCSUM,VLAN_MTU> ether 00:19:e0:61:e9:90 media: Ethernet autoselect (100baseTX <full-duplex>) status: active lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 re0.7: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 195.3.158.42 netmask 0xfffffff0 broadcast 195.3.158.47 ether 00:19:e0:61:e9:90 media: Ethernet autoselect (100baseTX <full-duplex>) status: active vlan: 7 parent interface: re0 re0.12: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 10.25.25.1 netmask 0xffffff00 broadcast 10.25.25.255 ether 00:19:e0:61:e9:90 media: Ethernet autoselect (100baseTX <full-duplex>) status: active vlan: 12 parent interface: re0 |
Следующий шаг - внесение необходимых изменений в rc.conf, чтобы не потерять настройки после перезагрузки сервера:
cloned_interfaces="re0.7 re0.12" ifconfig_re0="up" ifconfig_re0_7="inet 195.3.158.42 netmask 255.255.255.240" ifconfig_re0_12="inet 10.25.25.1 netmask 255.255.255.0" |
ifconfig_re0="up" - указываем, что интерфейс необходимо "поднять", иначе он не подымется самостоятельно. Тоесть виртуальные интерфейсы создадутся, но трафик по ним проходить не будет.
cloned_interfaces="re0.7 re0.12" - необходимо перечислить, какие виртуальные интерфейсы необходимо создать.
Для удаления виртуального интерфейса необходимо воспользоваться ключем "destroy" команды ifconfig. Пример удаления vlan12:
# ifconfig re0.12 destroy |
Re: 802.1Q VLAN - реализация 802.1Q VLAN на FreeBSD
Мэн, огромное тебе спасибо! Долго искал как при старте системы присваивать адрес сisco-like интерфейсу - все время писалось em0.10 not found. А всего то надо было заменить точку на подчеркивание!
Re: 802.1Q VLAN - реализация 802.1Q VLAN на FreeBSD
Не хватает настройки для приема теггированного и нетегированного траффика.
Будет полезно для плавной миграции на виланы.
Re: 802.1Q VLAN - реализация 802.1Q VLAN на FreeBSD
Что именно имеется ввиду? Настройка коммутаторов?
Это будет оффтоп...
Re: 802.1Q VLAN - реализация 802.1Q VLAN на FreeBSD
Настройка шнтерфейса freebsd для приема траффика из native vlan и теггированного траффика vlan 2,3,и т.д.
Поскольку в описаной конфигурации прием траффика прекращается.
Это частный случай, с которым я столкнулся при постепенной миграции во vlan'ы.
Re: 802.1Q VLAN - реализация 802.1Q VLAN на FreeBSD
Настройка интерфейса freebsd для одновременного приема из native vlan(untagged) и теггированых сетей.
Re: 802.1Q VLAN - реализация 802.1Q VLAN на FreeBSD
ifconfig_re0="up"
cloned_interfaces="vlan11 vlan12"
ifconfig_vlan11="inet 195.3.158.42/28 vlan 11 vlandev re0"
ifconfig_vlan12="inet 10.25.25.1/24 vlan 12 vlandev re0"
ifconfig_re0="inet 192.168.111.1/24"