Проброс VLANов на оборудовании Ubiquity Networks (DreamWIFI)

Введение


На сегодняшний день многие телекомы оценили преимущества линейки беспроводного оборудования компании Ubiquity Networks (в России более известные под маркой DreamWIFI). Это недорогие, компактные и довольно мощные устройства которые используется разными около-телекомовскими конторами для разных задач: от подключения удаленного клиента, до проброса транспорта на удаленные точки.

«Ну и что? Статей с рекламой мы уже начитались» — спросите вы.

Нет. Я хочу упомянуть про один очень существенный недостаток: в стандартном веб-интерфейсе нету вообще упоминания про виланы. А ведь без них никак хотя-бы по двум причинам:
  1. Хочется иметь что-то вроде «управляющего вилана» для всех устройств, чтобы клиент не мог достучаться до устройства.
  2. Проброс транспорта. Очень немаловажный пункт. Есть объекты куда оптоволокно пока невозможно протянуть, а транспорт туда нужен (именно «правильный» транспорт, с отдельными виланами).

Сам производитель обещает полную поддержку виланов в прошивке версии 5.5. На данный момент версия стабильной прошивки 5.2.1.

Задача


image

Есть удаленный клиент который пользуется 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.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.