Предпосылки
Изначально имелся маршрутизатор Mikrotik, он же – точка доступа. На проводную и беспроводную сети была выделена разная адресация. Это удобно, если с ноутбука, подключенного по беспроводной сети, требуется получать высокоскоростной доступ к локальным ресурсам (сетевому хранилищу) по гигабитному проводу.Но, вот беда, сеть использовалась с двух этажей, а проводной доступ был только на одном. Да и качество беспроводной связи на этаже без точки оставляло желать лучшего. К тому же, был в наличии неиспользуемый Netgear WNR3500L.
Ничто не предвещало беды
Официально TomatoUSB от Shibby поддерживает тэгированные вланы и даже, в экспериментальном порядке, позволяет переназначать VID'ы (доступно всего 15 вланов, и без переназначения их VID'ы, соответственно, от 1 до 15). Решение, казалось бы, лежит на поверхности.На Микротике
Создаём два влана на порту подключения Нетгира, один влан объединяем в мост с беспроводным интерфейсом, другой – с мастер-интерфейсом езернет-коммутатора. Как это сделать, я описывать не буду, потому как на Mikrotik Router OS существует подробная всеобъемлющая документация. Адресацию, DHCP-сервера, IGMP (для работы DLNA между сетями) и прочие настройки перевешиваем на вновь созданные мосты.На Нетгире
Теоретически, нам нужно принять два влана через WAN и раздать без тэгов на LAN-коммутатор и беспроводной интерфейс, соответственно. Но если с проводной сетью всё просто, то что делать с беспроводной?Advanced → VLAN
Нам бы подключить её в мост с соответствующим вланом, так же, как на Микротике. Но веб-интерфейс помидора этого сделать не позволяет. Так же, как и не позволяет включить WiFi-интерфейс во влан (забегая вперёд, скажу, что такая возможность не предусмотрена на железном уровне, если я достаточно разобрался в коде). Тупик.Погружение
Проблема используемой прошивки заключается в том, что при наличии минимальной справки по веб-интерфейсу внутренности документированы чуть менее, чем никак. Только изучение исходников прошивки позволило мне получить знания, которые привели меня к решению задачи. Ими я с вами и поделюсь.Прежде, чем ставить эксперименты
Небольшая предварительная настройка сэкономит вам кучу времени и нервов.Рис. 1: включаем ответ на ICMP-запросы.
Advanced → Firewall
Рис. 2: включаем сервер SSH, выключаем телнет и вписываем свой открытый ключ.Administration → Admin Access
Рис. 3: на случай, если что-то пойдёт не так, подготовим скрипт, возвращающий сетевые настройки в исходное состояние, и повесим его исполнение на кнопку WPS. В противном случае, при каждом неудачном действии с сетью мы будем вынуждены сбросить маршрутизатор в конфигурацию по умолчанию и загрузить резервную копию конфигурации (да, вы ведь сделали бэкап, прежде чем пускаться во все тяжкие?). Процедура отнимает минут пять и при регулярном выполнении изрядно нервирует.Administration → Button/LED
Custom Script
Текущие значения для внесения в скрипт можно получить командой nvram show. Если у вас не гигабитный, а стомегабитный маршрутизатор, восьмёрку в параметрах vlanXports меняем на пятёрку.nvram set lan1_ifname=
nvram set lan1_ifnames=
nvram set lan1_ipaddr=
nvram set lan1_netmask=
nvram set lan1_proto=
nvram set lan1_stp=
nvram set lan_desc=1
nvram set lan_dhcp=0
nvram set lan_domain=
nvram set lan_gateway=<gw>
nvram set lan_hostname=<hostname>
nvram set lan_hwaddr=<mac addr>
nvram set lan_hwnames=
nvram set lan_ifname=br0
nvram set lan_ifnames=vlan1
nvram set lan_invert=0
nvram set lan_ipaddr=<ip>
nvram set lan_lease=86400
nvram set lan_netmask=<netmask>
nvram set lan_proto=static
nvram set lan_route=
nvram set lan_state=1
nvram set lan_stp=0
nvram set lan_wins=
nvram set landevs=vlan1
nvram set vlan1hwname=et0
nvram set vlan1ports=1 2 3 4 8*
nvram set vlan1vid=
nvram set vlan2hwname=et0
nvram set vlan2ports=0 8
nvram set vlan2vid=
nvram set vlan3hwname=
nvram set vlan3ports=
nvram set vlan3vid=
nvram set vlan4hwname=
nvram set vlan4ports=
nvram set vlan4vid=
nvram commit
reboot
И собственно настройка
Рис. 4: для того, чтобы WAN оказался в состоянии UP, прошивка обязывает нас настроить на нём что угодно поверх езернета: хоть IP, хоть туннель. Значение disable сделает порт полностью неактивным, а объединение его с LAN-коммутатором – это не то, чего мы хотим. Можно было бы повесить на него любой ip-адрес, но возникает вероятность затыка маршрутизации в будущем. Адрес 0.0.0.0 также выключит порт. Оптимальное решение – присвоить интерфейсу link-local адрес.Рис. 5: в нашем случае бесполезно указывать в этом поле шлюз по умолчанию. (Доступ в интернет может понадобиться маршрутизатору по нескольким причинам. Во-первых, это синхронизация времени. Также, у меня используется сборка Tomato с торрент-клиентом).
Рис. 6: хоть веб-интерфейс и не позволяет объединить в мост влан и беспроводную сеть, сама прошивка это сделать может. Поэтому сконфигурируем второй мост. Мостам присвоены адреса из блоков, выделенных ранее на Микротике для проводной и беспроводной сетей, соответственно.
Рис. 7: а вот указанные на этой вкладке DNS-сервера, в противовес шлюзу по умолчанию, работать будут.
Basic → Network
Рис. 8: маршрут по умолчанию укажем вручную как статический.Advanced → Routing
Рис. 9: пропускаем оба влана с тэгами на порт WAN.Рис. 10: добавляем беспроводной интерфейс в созданный ранее второй мост. Пока беспроводная сеть будет единственной составляющей моста.
Рис. 11: а вот тут внимание! Практика показала, что на используемом маршрутизаторе этот функционал не работает, поэтому придётся использовать те VID'ы, которые доступны на Нетгире: с первого по пятнадцатый.
Advanced → VLAN
А теперь обещанная расчленёнка
Из консольных утилит нам интересны, в первую очередь, nvram и robocfg. Первая позволяет взаимодействовать с областью flash-памяти, в которой хранится конфигурация прошивки в виде массива пар переменная=значение. Вторая – управлять конфигурацией вланов на портах. Впрочем, для описываемой ситуации дальнейшая работа с вланами не потребуется. Также нам доступны стандартные ifconfig, vconfig, brctl и ip.Изучив список интерфейсов, мы увидим, что в наличии имеются два моста (сами настраивали), два езернет-интерфейса (eth0 – проводная сеть, eth1 – беспроводная) и два влана. Отдельного езернет-интерфейса порт WAN не удостоился. С помощью какого-то сильного колдунства от его имени выступает влан, назначенный виртуальному мосту WAN на странице Advanced → VLAN веб-интерфейса.
Чтобы взглянуть на конфигурацию, выполним команду
nvram show
Интерес представляют параметры, начинающиеся с wan_ и lan. Первая группа параметров описывает, как несложно догадаться, WAN-интерфейс, а вторая является ничем иным, как списком мостов. Всего их в системе может быть до четырёх, один из которых обязателен (группа параметров lan_).Именно wan_ifnameX указывает на тот влан, который станет WAN'ом. А lanX_ifnames – содержит список интерфейсов, включённых в мост. Зная это, мы можем сделать то, что не даёт выполнить веб-интерфейс – объединить в мост влан и беспроводную сеть.
nvram set lan1_ifnames=vlan2 eth1
nvram commit
reboot
Профит.Осталось настроить беспроводную сеть с ключом и именем аналогичными сети на первой точке.
Напоследок
Набор параметров vlanX_ описывает 15 вланов, которые мы можем настроить на маршрутизаторе. Параметр hwname – имя драйвера интерфейса; ports – порты, на которые выходит влан: 0 – WAN, 1-4 – порты коммутатора, 8 (для 100Мб – 5) – виртуальный порт процессора, должен присутствовать в каждом влане. Буква t после номера порта означает, что на данном порту влан будет тэгироваться. Звёздочка – «влан по умолчанию», этим вланом внутри коммутатора тэгируются пакеты, пришедшие без тэга. Параметр vid задаёт альтернативный VID для влана. Но этот функционал, как сказано выше, не работает.Упоминания параметра ports я в коде, за исключением исходников утилиты robocfg, не нашёл. Видимо, он используется драйвером, который поставляется в бинарном виде.