В больших компьютерных сетях обычно используется несколько изолированных подсетей. Для маршрутизации между сетями можно использовать дорогие маршрутизаторы третьего уровня (L3) или обойтись компьютером с несколькими сетевыми картами. Но гораздо удобней и выгоднее взять управляемый свитч второго уровня (L2) с поддержкой VLAN, настроить на нём транковый порт (trunk port) и воткнуть в одну сетевую карту на компьютере. Это позволяет маршрутизировать трафик между несколькими VLAN (сетями) или обеспечить присутствие сервера в нескольких VLAN (сетях) одновременно.
И так нам необходим настроенный свитч с транковым портом и поддержка 802.1Q на уровне ядра Linux. Рассмотрим как это делается в разных дистрибутивах.
Настройка VLAN Debian, Ubuntu
Для начала нужно установить пакет с утилитами для поддержки vlan
apt-get install vlan
Настройки новых VLAN интерфейсов необходимо добавить в файл /etc/network/interfaces
Например:
auto vlan100 iface vlan100 inet static address 192.168.0.10 netmask 255.255.255.0 vlan_raw_device eth0
Или можно использовать другое именование интерфейсов вида eth0.100, а не vlan100:
auto eth0.100 iface eth0.100 inet static address 192.168.0.1 netmask 255.255.255.0 vlan_raw_device eth0
Параметр vlan_raw_device указывает, на каком сетевом интерфейсе должны создаваться новый интерфейс vlan100.
Настройка VLAN в CentOS, Red Hat
Для каждого VLAN нужно создавать отдельный файл. В зависимости от системы наименования интерфейсов, есть два варианта.
Первый вариант файл /etc/sysconfig/network-scripts/ifcfg-eth0.100
VLAN=yes DEVICE=eth0.100 BOOTPROTO=static ONBOOT=yes TYPE=Ethernet IPADDR=192.168.0.20 NETMASK=255.255.255.0
И второй вариант файл /etc/sysconfig/network-scripts/ifcfg-vlan100
VLAN=yes VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD DEVICE=vlan100 PHYSDEV=eth0 BOOTPROTO=static ONBOOT=yes TYPE=Ethernet IPADDR=192.168.0.20 NETMASK=255.255.255.0
При этом переменные VLAN_NAME_TYPE и PHYSDEV задаются только во втором варианте для интерфейсов вида vlan100, а при использовании имени вида eth0.100 их значения вычисляются автоматически из имени интерфейса.
Настройка VLAN в Gentoo
Ниже кусок файла /etc/conf.d/net, отвечающий за настройку VLAN. В данном случае настраивается 2 vlan-интерфейса на интерфейсе eth0, создание и удаление данных интерфейсах происходит в скрипте /etc/init.d/net.eth0
config_eth0="null" vlans_eth0="1 2" vlan1_name="vlan100" config_vlan1="192.168.0.20/24" vlan2_name="vlan200" config_vlan2="192.168.20.20/24"
Проверка настроек
После того как прописали новые настройки нужно перезапустить сетевые настройки локально это делается так:
/etc/init.d/networking restart
Но если вы сидите удаленно то лучше просто поднять новые интерфейсы командой:
ifup vlan100 ifup vlan200
Проверить поднялся ли VLAN можно командой:
ifconfig vlan100
Вывод должен выглядеть так:
vlan0100 Link encap:Ethernet HWaddr d4:85:64:78:24:a3 inet addr:192.168.0.20 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::d685:62ff:fe0a:2796/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:9787273 errors:0 dropped:0 overruns:0 frame:0 TX packets:50282 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:422938594 (422.9 MB) TX bytes:4648122 (4.6 MB)
Дальше можно работать с новым интерфейсом как с обычным сетевым интерфейсом. Кроме того к VLAN интерфейсам также можно делать алиасы ip адресов которые были в статье, имена у таких интерфейсов удобно использовать в таком виде vlan100:0, vlan100:1.