VLAN'ы в OpenWrt
Решил немного разгрузить голову от прошлой недели и некоторый материал скинуть сюда.
Итак, сабж.
Часть первая, историческая
Предыстория: Начну издалека. С древних времён у нас сохранилась домовая сетка. Что это такое? Это сетевухи за 5 баксов, свитчи за 10, сопли, витая пара для внутреннего применения на улице и так далее. Практически всё это есть и у нас. В частности, есть у нас древняя "магистраль", на 120 метров, которую я всё никак не доберусь поменять. Так вот, линк на этой магистрали держит не всякое железо, поскольку она достаточно потрёпана жизнью, затапливалась не раз и проводимость там явно "уже не та".
Не так давно, решил я отделить свою домашнюю сетку от общей, поскольку та порядком разрослась, и обнаружил сию подлянку, описанную выше.
Разное оборудование даёт на этом линке разные эффекты.
- TP-Link'овский 8и-портовый свитч работает нормально,
- PCI-noname на бессмертном реалтеке 8139 - линк поднимает, но пакеты не ходят ни в одну сторону.
- TP-Link'овский же роутер на 5 портов - линк видит с переменным успехом.
Что делать? Свитч мне нужен для себя, как раз подходит по портам. Поэтому попытался настроить линк через роутер, изолировав ему 2 порта, и забанив их в свою сторону, чтобы юзеры на той стороне только в сервер смотрели. (про нестабильность линка я тогда ещё не знал)
Часть вторая, практическая
Как вообще в типовом роутере реализована сетевая часть? Есть свитч, обычно на 4 порта, хорошо если управляемый, доступный в системе через один интерфейс. Есть отдельный порт под WAN, доступный через другой интерфейс. Есть вафля - третий. Наибольший интерес представляет собой реализация такого "свитча".
С точки зрения самого свитча - портов у него не 4, а 5: 4 физических и пятый - для общения с системой. Если свитч неуправляемый - то порта будет 2 - 1 логический, с четырьмя физическими дырками и один виртуальный - системный. Второй случай не рассматриваем, за неинтересностью.
Поскольку "системный" интерфейс - один, при различных конфигурациях портов мы будем наблюдать и разные способы организации интерфейсов в системе. (спасибо, кэп)
Например, если мы хотим просто изолировать 2 порта, нам понадобится ещё один vlan. Порты 1, 2, 5 - первый, 3, 4 - второй (например).
,----------[5]----------.
| |
| .-----------+
`-[1]---[2]-+-[3]---[4]-'
Конфигурация интерфейсов с точки зрения системы останется простой - один интерфейс eth0, с которым мы и работаем. vlan'ы при этом обрабатываются внутри самого свитча и нам не видны.
Однако, если таки хотим получить доступ к этой группе портов, картина поменяется. Нам нужно:
- перевести пятый, системный порт в native-режим
завести 2 дополнительных интерфейса (eth0.1, eth0.2), на которых будет трафик без vlan'ов, при этом, на самом eth0 мы увидим тегированный трафик.
[6] <---. .--> [7] | | ,---------[|5|]---------. | | | | |----------+.+----------+ `-[1]---[2]-+-[3]---[4]-'
Если нам нужно, чтобы каждый порт жил отдельной жизнью и с другими не пересекался - у нас будет 5 интерфейсов в системе только для свитча. Такой маленький, но гордый ынтерпрайз.
Примерный конфиг сети для последнего случая - ниже (вырезано всё, что не касается vlan'ов)
# Layer 2
config switch
option name 'eth0'
option reset '1'
option enable_vlan '1'
# [1] + [2]
config switch_vlan # <- если написать здесь имя интерфейса - роутер вешается
option device 'eth0' # хотя в примерах на вики openwrt - попадается
option vlan '1'
option ports '0t 2 3'
# [3] + [4]
config switch_vlan
option device 'eth0'
option vlan '2'
option ports '0t 1 4'
# Layer 3
config interface 'lan1'
option ifname 'eth0.1'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
config interface 'lan2'
option ifname 'eth0.2'
option proto 'static'
option ipaddr '192.168.2.1'
option netmask '255.255.255.0'
"Родительский" интерфейс не описывается, он поднимается автоматически.
"Ручная" конфигурация свитча проводится через утилитку swconfig. (кэп, это опять вы?)
Впринципе, это краткий пересказ своими словами этой и других страниц вики, нескольких форумов и выдачи первых 10 страниц гугла.
Часть третья, заключительная
ИЧСХ, для меня это оказалось бесполезно, т.к. мощности для стабильного поддержания линка роутеру явно не хватает. И линукс тут, сцуко, бессилен. :-(
Но поздно, мануалы раскурены, конфиги написаны, не хотелось бы терять это знание, пусть и бесполезное в данный момент.