802.1Q VLAN - реализация 802.1Q VLAN на FreeBSD

Версия для печатиОтправить другуPDF version

Уже довольно большой период времени все сетевые интерфейсы настраиваю с поддержкой 802.1Q VLAN. Решил описать процедуру настройки, возможно мой опыт пригодится еще кому-либо.

Итак, не будем забывать о том, что есть сетевые карты, которые поддерживают vlan на аппаратном уровне, а есть которые не поддерживаются. Если сетевая карта не поддерживает vlan, во FreeBSD предусмотрена software поддержка, но карточка должна поддерживать oversized пакеты. Этим требованиям удовлетворяет большинство современных сетевых карт.

FreeBSD позволяет использовать vlan-интерфейсы двух типов:

  • псевдоинтерфейс vlan
  • cisco-like интерфейс

Псевдоинтерфейс vlan

Исходные данные:

  • коммутатор настроен корректно
  • порт комутатора в режиме "trunk"
  • VID 8 - Internet
  • VID 12 - локальная сеть
  • сетевой адаптер NVIDIA nForce MCP67 Networking Adapter (nfe0)

Для поддержки 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

Теперь более подробно о используемых опциях:

  • ifconfig - команда конфигурирования сетевого интерфейса;
  • vlan8 - указываем, какой именно интерфейс будем конфигурировать (я имею привычку обозначать виртуальный интерфейс, отталкиваясь от VID, но ничего не мешает проводить нумерацию интерфейсов по порядку, тоесть vlan0, vlan1, vlan3 и тд);
  • create - этой командой, собственно, и создается виртуальный интерфейс;
  • vlan 8 - указываем, какой VID будет у созданного интерфейса. В моем случае это 8;
  • vlandev nfe0 - указываем, на каком именно физическом интерфейсе будет создан виртуальный (в моем частном случае - это nfe0);
  • 195.3.159.250 netmask 255.255.255.252 - присваиваем IP-адрес интерфейсу.

По аналогии создаем 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_vlan8="vlan 8 vlandev nfe0 195.3.159.250 netmask 255.255.255.252" ifconfig_vlan12="vlan 12 vlandev nfe0 10.25.25.1 netmask 255.255.255.0"

ifconfig_nfe0="up" - указываем, что интерфейс необходимо "поднять", иначе он не подымется самостоятельно. Тоесть виртуальные интерфейсы создадутся, но трафик по ним проходить не будет.

cloned_interfaces="vlan8 vlan12" - необходимо перечислить, какие виртуальные интерфейсы необходимо создать.

Для удаления виртуального интерфейса необходимо воспользоваться ключем "destroy" команды ifconfig. Пример удаления vlan12:

# ifconfig vlan12 destroy

 

Сisco-like интерфейс

Исходные данные:

  • коммутатор настроен корректно
  • порт комутатора в режиме "trunk"
  • VID 7 - Internet
  • VID 12 - локальная сеть
  • сетевой адаптер на чипсете Realtec 8169 (re0)

Для поддержки 802.1Q VLAN на уровне ядра, необходимо наличие в конфигурационном файле ядра наличие следующей строки:

device         vlan

Если поддержки 802.1Q VLAN на уровне ядра нету, подгрузим необходимый модуль ядра:

# kldload /boot/kernel/if_vlan.ko
# kldstat | grep vlan

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

 Более подробно о используемых опциях:

  • ifconfig - команда конфигурирования сетевого интерфейса;
  • re0.7 - указываем "родительский" интерфейс (re0) и номер VID;
  • create - этой командой, собственно, и создается виртуальный интерфейс;
  • 195.3.158.42 netmask 255.255.255.240 - присваиваем IP-адрес интерфейсу.

По аналогии создадим интерфейс с 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

 

Ваша оценка: Нет Средняя: 5 (12 голосов)

Re: 802.1Q VLAN - реализация 802.1Q VLAN на FreeBSD

Мэн, огромное тебе спасибо! Долго искал как при старте системы присваивать адрес сisco-like интерфейсу - все время писалось em0.10 not found. А всего то надо было заменить точку на подчеркивание!

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература

Кoмпьютер пoзвoляет решать все те прoблемы, кoтoрые дo изoбретения кoмпьютера не существoвали.