Всем привет, эта небольшая инструкция посвящается моим коллегам и всем тем, кому нужно реализовать сценарий Router-On-A-Stick на устройствах с интернет-центром Keenetic. Делаете все на свой страх и риск, хотя ничего сломаться не должно.
Проблема
Хотел бы начать со своего варианта использования. Есть два помещения, в которых требуется WiFi покрытие для комфортной работы в Интернете. В первое помещение заходит WAN кабель от провайдера, в этом же помещении находится роутер. Во втором помещении этот сигнал очень слабый из-за металлических стенок, иногда даже к сети не удается подключиться. Сразу на ум приходит желание усилить WiFi сигнал каким-нибудь репитером или вторым роутером, однако и второй роутер не может подцепиться к первому. Теперь появляется идея проложить два кабеля между первым и вторым роутером для объединения их в LAN-сеть, вариант этот стопроцентный, но зная про существование VLANов, можно чутка упроситить задачу.
Поскольку на территории объекта, на котором работает провайдер, пользователям запрещено правилами прокладывать кабели самостоятельно и вмешиваться в инфраструктуру объекта, то провайдер предоставляет услугу подключения локальных сетей через провайдерские коммутаторы на объекте. Это означает, что через стену или потолок клиенту нельзя кинуть кабель между своими хостами. В этом есть свои плюсы, особенно если ваши помещения находятся далеко друг от друга, не придется платить за два WAN соединения, также сохраняются все приемущества работы в одной локальной сети, сохранится удобное взаимодействие компьютеров и принтеров.
В подключении дополнительного роутера к коммутатору нет ничего сложного, провайдер прокладывает витую пару, выделяет для вашей локалки VLAN ID и он назначется на порт коммутатора (UNTAGGED, ACCESS MODE). Однако, тянуть второй кабель от основного роутера до коммутатора по тому же маршртуту может быть затратно и не всегда имеется техническая возможность. Конечно можно раздвоить кабель на два RJ-45 с обеих концов как на риснуках 1 и 2, но мы так делать конечно же не будем.
Решение с использованием VLAN
Если оборудование клиента поддерживает работу с VLAN (802.1Q или 802.1ad), то имеет смысл настроить его таким образом, чтобы порт на основном роутере клиента стал транковым и оперировал тегированными пакетами при работе с WAN и LAN. Это позволить избежать проятяжки второго кабеля до коммутатора и сэкономить порт. Будет очень хорошо, если клиент имеет роутер на RouterOS, OpenWRT или других прошивках, где можно работать с мостами, VLANами и сетевыми интерфейсами. Но к сожалению для нас, потребитель делает выбор в пользу более простого оборудования с большим количеством абстракций, коим является Keenetic.
Будем использовать VLAN ID 1000 для выхода в интернет, а VLAN ID 2000 для локалки. Основной роутер - Keenetic Giant, второй - Keenetic Air.
В настройках вебке Keenetic есть настройка VLAN, которая позволяет принимать теггированный трафик на порт для WAN подключения, позволяет разбить локальную сеть на сегменты включая и исключая порты. Однако нельзя в настройках сегмента с заданным VLANом включить в сегмент порт, который считается WANом (см. Рисунок 3).
К счастью, весь этот веб-интерфейс это абстракция над Keenetic CLI, опыт работы с которым похож на работу с консолью Cisco. Через Keenetic CLI можно настроить всё, а вводить команды можно через вебку, ssh (надо доставить пакет), telnet. Стоит отметить, что инициализация роутера - это последовательное исполнение операторов в Keenetic CLI из файла startup-config, который можно скачать и просмотреть.
Ниже представлен упрощенный файл конфигурации после настройки роутера через вебку (настройка статики от провайдера, назначен VLAN 1000 на WAN порт и т.д.).
interface GigabitEthernet0
up
!
interface GigabitEthernet0/0
rename 1
switchport mode access
switchport mode trunk
switchport access vlan 1
up
!
interface GigabitEthernet0/1
rename 2
switchport mode access
switchport access vlan 1
up
!
interface GigabitEthernet0/2
rename 3
switchport mode access
switchport access vlan 1
up
!
interface GigabitEthernet0/3
rename 4
switchport mode access
switchport access vlan 1
up
!
interface GigabitEthernet0/Vlan1
description "Home VLAN"
security-level private
ip dhcp client dns-routes
ip name-servers
up
!
interface GigabitEthernet1
rename ISP
description "Ethernet-подключение"
mac address factory wan
security-level public
ip dhcp client dns-routes
ip name-servers
ipv6 no name-servers
up
!
interface GigabitEthernet1/0
rename 0
up
!
interface GigabitEthernet1/Vlan1000
description "Ethernet-подключение"
mac address factory wan
security-level public
ip address <IP от провайдера> <маска от провайдера>
ip dhcp client hostname Keenetic-1234
ip dhcp client dns-routes
ip mtu 1500
ip global 700
ip name-servers
igmp upstream
ipv6 no name-servers
up
!
interface WifiMaster0
country-code RU
compatibility BGN
tx-burst
rekey-interval 86400
vht
up
!
interface WifiMaster0/AccessPoint0й
rename AccessPoint
description "Wi-Fi access point"
mac access-list type none
security-level private
wps
wps no auto-self-pin
authentication wpa-psk ns3 secret
encryption enable
encryption wpa2
ip dhcp client dns-routes
ip name-servers
ssid secret
wmm
rrm
ft mdid 11
ft enable
up
!
interface WifiMaster0/AccessPoint1
rename GuestWiFi
description "Guest access point"
mac access-list type none
security-level private
encryption disable
ip dhcp client dns-routes
ip name-servers
down
!
interface Bridge0
rename Home
description "Home network"
inherit GigabitEthernet0/Vlan1
include AccessPoint
include AccessPoint_5G
mac access-list type none
security-level private
ip address 192.168.1.1 255.255.255.0
ip dhcp client dns-routes
ip name-servers
igmp downstream
iapp key ns3 secret
up
!
Конечно же, можно сделать все необходимые настройки для работы принципа Router-On-A-Stick через консоль если у вас есть опыт, однако это равносильно настройке роутера с нуля. Поскольку надо будет создавать новый интерфейс GigabitEthernet1/Vlan2000, создать под него новый Bridge (потому что в существующий Bridge не получилось включить новый интерфейс, операторы include и inherit не сработают), также непонятно как этот новый бридж и интерфейсы будут работать с вебкой и не сломается ли сама вебка (как бывает с OpenWRT и интерфейсом LuCi). Поэтому для настройки будем править только конфиг, эти действия должны привести к успеху.
Правим startup-config
Поскольку в конфиге везде фигурирует VLAN ID 1 под локалку, логично предположить, что все единицы нужно заменить на число VLAN ID под локалку, полученный от провайдера, в нашем случае 2000. Советую открыть конфиг в VSCode или другом редакторе и воспользоваться инструментом замены.
Для начала, нужно на всех портах роутера настроить Untagged VLAN ID. Для этого нужно заменить все строки "switchport access vlan 1" на "switchport access vlan x", где x - номер желаемого VLANа. На рисунке 4 показано как это делается, а на рисунке 5 результат (слева - до, справа - после)
Вторым шагом надо переименовать интерфейс для локалки, найдите GigabitEthernet0/Vlan1, он должен выглядить следующим образом:
interface GigabitEthernet0/Vlan1
description "Home VLAN"
security-level private
ip dhcp client dns-routes
ip name-servers
up
Его надо переименовать, но только сделать это надо с заменой всех совпадений, это для того, чтобы заменить все ссылки в файле на этот интерфейс и не было проблем. Переименуйте его в GigabitEthernet1/VlanX, где X - VLAN ID для локалки, полученный от провайдера. На рисунке 6 показано как это можно сделать.
Третьим действием убедиться, что существует GigabitEthernet1/VlanX, где X - VLAN ID для выхода в интернет от провайдера. Если вы настроили WAN через веб-интерфейс и правильно указали VLAN ID, то будет примерно так:
interface GigabitEthernet1/Vlan1000
description "Ethernet-подключение"
mac address factory wan
security-level public
ip address <IP от провайдера> <маска от провайдера>
ip dhcp client hostname Keenetic-1234
ip dhcp client dns-routes
ip mtu 1500
ip global 700
ip name-servers
igmp upstream
ipv6 no name-servers
up
!
После этого, сохраняем конфиг, заливаем его в роутер и проверяем, не потеряли ли мы доступ к роутеру и все ли работает. Если что-то пошло не так и не можем зайти на роутер, то сбрасываем его к заводским.
После таких действий, интерфейс работает как ни в чем не бывало. Поскольку настройка была произведена правя конфиг не могу дать гарантий, будет ли работать должным образом добавление новых сегментов (например Гостевая сеть или др.), другие пункты настроек роутера должны нормально работать.
Настройка второго роутера
Второй роутер у нас является тоже кинетиком, однако его можно настроить в режим точки доступа, переключив физический переключатель на корпусе или выставить в настройках его режим на "Ретранслятор" и подключить второй роутер к коммутатору. На первом роутере зайти в настройки Mesh и подключить второй роутер как ретранслятор, после этого заработает интернет на втором роутере, автоматом подятянутся названия сетей и паролей, а также заработает бесшовный роуминг 802.1r/k/v.
Если второй роутер не является Keenetic'ом, то на нем нужно сменить статический IP на отличный от основного роутера (в моем случае на 192.168.1.2), чтобы не было конфликтов в сети, также отключить DHCP-сервер, NAT, Firewall и настроить роутер под себя. Тем самым, сделать из него обычную точку доступа без функций маршрутизатора.
Заключение
Это мой первый опыт написания статей, также с Keenetic'ами опыт работы тоже небольшой у меня. К этой настройке я пришел методом тыка, сначала пытался через Web, затем через CLI, полезной информации для себя в Интернете по этому поводу я не нашел, да и документация по CLI не совсем понятная для меня, поэтому родилось мое собственное решение, которое оказалось простым.
Надеюсь что ничего не упустил, потому что сейчас не имею возможность все это провернуть еще раз и проверить из-за отстствия железок, имею только конфиги.