DreamWIFI и VLAN-ы
Введение
На сегодняшний день многие телекомы оценили преимущества линейки беспроводного оборудования компании Ubiquity Networks (в России более известные под маркой DreamWIFI). Это недорогие, компактные и довольно мощные устройства которые используется разными около-телекомовскими конторами для разных задач: от подключения удаленного клиента, до проброса транспорта на удаленные точки.
«Ну и что? Статей с рекламой мы уже начитались», — спросите вы.
Нет. Я хочу упомянуть про один очень существенный недостаток: в стандартном веб-интерфейсе нету вообще упоминания про виланы. А ведь без них никак хотя-бы по двум причинам:
- Хочется иметь что-то вроде «управляющего вилана» для всех устройств, чтобы клиент не мог достучаться до устройства.
- Проброс транспорта. Очень немаловажный пункт. Есть объекты куда оптоволокно пока невозможно протянуть, а транспорт туда нужен (именно «правильный» транспорт, с отдельными виланами).
Сам производитель обещает полную поддержку виланов в прошивке версии 5.5. На данный момент версия стабильной прошивки 5.4.3.
Задача
Есть удаленный клиент который пользуется 2-мя услугами: интернет и телефония. В роли точки доступа у нас будет Rocket M5, а в роли station-a NanoStation M5. Подключены они через бридж ethernet — wifi — ethernet. Нужно чтобы по воздуху бегал тегированный трафик.
Решение
Оборудование UBNT работает на прошивке собственной разработки под названием AirOS основанной на Linux, BusyBox и куче разных утилит. А если это Linux, то диагноз понятен: виланы настраиваются стандартными средствами, осталось только найти как интегрировать наши настройки с тем что делает веб-интерфейс.
И так, приступим. Настраиваем обе точки как обычно: даем IP адреса, SSID и остальные параметры. Как это делается я объяснять не буду, все довольно просто.
Заходим через ssh на одну из точек и видим что система просто создала бридж br0 который связывает все интерфейсы между собой. Нам надо этот бридж удалить, создать виланы и связать их в отдельные бриджы. Чтобы не затрагивать целостность конфигурации в общем, в AirOS предусмотрен скрипт /etc/persistent/rc.poststart (по умолчанию его нету) который запускается после того как система закончит свои настройки после старта.
Скрипт надо создать и сделать его исполняемым (делается на обеих точках):
XM.v5.2.1# touch /etc/persistent/rc.poststart
XM.v5.2.1# chmod +x /etc/persistent/rc.poststart
Сначала настроим удаленный station чтоб потом его не потерять. Добавляем в его rc.poststart следующие строки:
# На всякий случай удалим с ath0 IP адрес
ifconfig ath0 0.0.0.0# Выключаем бридж
ifconfig br0 down# Удаляем из него все интерфейсы
brctl delif br0 ath0
brctl delif br0 eth0_real
brctl delif br0 eth1_real
# Удаляем сам бридж
brctl delbr br0# Создаем виланы
vconfig add ath0 100
vconfig add ath0 200
vconfig add ath0 300# Включаем созданные интерфейсы
ifconfig ath0.100 0.0.0.0 up
ifconfig ath0.200 0.0.0.0 up
ifconfig ath0.300 0.0.0.0 up# Создаем бридж для вилана 200 (интернет)
brctl addbr br200
brctl addif br200 ath0.200
brctl addif br200 eth0_real
ifconfig br200 up# Создаем бридж для вилана 300 (VoIP)
brctl addbr br300
brctl addif br300 ath0.300
brctl addif br300 eth1_real
ifconfig br300 up# Добавляем на управляющий интерфейс IP адрес
ifconfig ath0.100 10.10.10.2 netmask 255.255.255.0 up
# Если в этом вилане есть маршрут по умолчанию, то добавляем его
route del default gw 0.0.0.0
route add default gw 10.10.10.254 ath0.100
Хочу предупредить о грабле на которую сам попал и никак не мог вникнуть в чем проблема: если интерфейс имеет виртуальные интерфейсы, то он не должен быть ни в одном из бриджей, а то ничего работать не будет!
И так обязательно сохраняем наши изменения командой:
XM.v5.2.1# cfgmtd -w -p /etc/
И перезагружаемся:
XM.v5.2.1# reboot
И так Station мы на время потеряли так как он видит только тегированный трафик, но это не проблема скоро теги пойдут. Далее идет содержимое файла /etc/persistent/rc.poststart с точки доступа 10.10.10.1 (комментарии повторять не буду):
ifconfig ath0 0.0.0.0
ifconfig br0 down
brctl delif br0 ath0
brctl delif br0 eth0_real
# У Rocket-a физически один ethernet интерфейс, но в системе есть и второй.
brctl delif br0 eth1_real
brctl delbr br0# Создаем виланы на беспроводном интерфейсе
vconfig add ath0 100
vconfig add ath0 200
vconfig add ath0 300# Те же самые виланы создаем на ethernet интерфейсе
vconfig add eth0_real 100
vconfig add eth0_real 200
vconfig add eth0_real 300# Включаем созданные интерфейсы
ifconfig ath0.100 0.0.0.0 up
ifconfig ath0.200 0.0.0.0 up
ifconfig ath0.300 0.0.0.0 up
ifconfig eth0_real.100 0.0.0.0 up
ifconfig eth0_real.200 0.0.0.0 up
ifconfig eth0_real.300 0.0.0.0 up# Создаем бридж для вилана 200 (интернет)
brctl addbr br200
brctl addif br200 ath0.200
brctl addif br200 eth0_real.200
ifconfig br200 up# Создаем бридж для вилана 300 (VoIP)
brctl addbr br300
brctl addif br300 ath0.300
brctl addif br300 eth0_real.300
ifconfig br300 up# Создаем бридж для управляющего вилана
brctl addbr br100
brctl addif br100 ath0.100
brctl addif br100 eth0_real.100
ifconfig br100 10.10.10.1 netmask 255.255.255.0 up
route del default gw 0.0.0.0
route add default gw 10.10.10.254 br100
Сохраняем и перезагружаем:
XM.v5.2.1# cfgmtd -w -p /etc/
XM.v5.2.1# reboot
Полученные результаты можно просматривать командами ifconfig и brctl.