Статья участвует в Конкурсе статей по настройке оборудования Mikrotik с операционной системой RouterOS

RepiterУ меня появилась задача расширить зону покрытия моей домашней wifi-сети. Создает ее роутер от ASUS (потому что с ADSL), расширяет до текущих масштабов тоже ASUS. Дальнейшее расширение я захотел сделать на mikrotik, заодно попытаться второй ASUS заменить так же на mikrotik. Первый бы тоже заменил, но не нашел у микротиков чего-либо для работы с ADSL. До недавнего времени сделать это было нельзя.

Можно было либо:

  • С WDS. Мой ASUS согласен на WDS только при использовании WEP-шифрования. Нет, спасибо.
  • Исключительно между микротиками. Тоже не подходит, так как нужен ADSL, а следовательно в сети будет не только mikrotik.

Находил в сети советы в стиле "сделайте виртуальный wireless-интерфейс, основному mode поставьте station, виртуальному ap bridge и при одинаковом SSID у Вас всё заработает". Не заработает, так как в официальной wiki написано, что VirtualAP будет функционировать только если мастер "is in ap-bridge, bridge or wds-slave mode", а нам нужен station.

В итоге проблема решилась обновлением routeros до версии 6.35. В ней добавили модуль wireless-rep, который позволяет реализовать желаемое, а так же получить некоторые приятные бонусы. Например, из минироутеров (mAP или RB941-2nD-TC) можно сделать фильтр wifi сети для путешествий.

Всё описанное проверенно и работает на роутерах от mikrotik моделей RBmAP2n, RB941-2nD-TC и RB751U-2HnD, но должно работать на любых роутерах mikrotik с wifi.

Я люблю консоль, поэтому все инструкции будут для нее. Аналогии в winbox или веб-интерфейсе достаточно прозрачны.

Обновление до RouterOS 6.35.

На данный момент эта версия в стадии Release Candidate, поэтому этот пункт имеет смысл. Как только 6.35 станет стабильной - данный пункт можно смело пропускать.

Штатно обновляемся до последней стабильной версии RouterOS. Далее ставим канал обновлений на release-candidate:

/system package update set channel=release-candidate

обновляемся

/system package update install

Пока роутер перезагружается, качаем отсюда архив extra packages для новой версии RouterOS. Из него нас интересует файл, содержащий в названии wireless-rep. Заливаем его на наш роутер и перезагружаем роутер еще раз.

После перезагрузки проверяем, что модуль wireless-rep появился в списке пакетов и активен:

/system package print

Flags: X - disabled 
 #   NAME - VERSION SCHEDULED
 0   routeros-mipsbe - 6.35rc45
 1   system - 6.35rc45
 2 X wireless-cm2 - 6.35rc45
 3 X ipv6 - 6.35rc45
 4 X wireless-fp - 6.35rc45
 5 X hotspot - 6.35rc45
 6   dhcp - 6.35rc45
 7   mpls - 6.35rc45
 8   routing - 6.35rc45
 9   ppp - 6.35rc45
10   security - 6.35rc45
11   advanced-tools - 6.35rc45
12 X multicast - 6.35rc45
13   wireless-rep - 6.35rc45

Настройка собственно репитера

Короткий путь для ленивых

/interface wireless setup-repeater number=wlan1 ssid=My_WIFI passphrase=TheBestPassword

Что делает эта команда?

Согласно официальной вики:

  • сбрасывает настройки мастер-интерфейса (wlan1 в нашем случае) (так же как делает reset-configuration)
  • убирает виртуальные интерфейсы, привязанные к этому мастер-интерфейсу из всех возможных бриджей (чтоб не оставлять записей об ошибочных портах бриджей)
  • удаляет все виртуальные интерфейсы данного мастер-интерфейса
  • создает security profile "interfacename-ssid-repeater", если такой security profile уже существует, то не создает новый, а обновляет настройки старого
  • настраивает мастер-интерфейс, режим работы выбирается следующим образом: если точка доступа (вышестоящая) поддерживает режим работы bridge (это проприетарный режим работы mikrotik, поэтому только с ними), используется station-bridge, иначе если точка доступа поддерживает WDS, используется station-wds, иначе используется station-pseudobridge (наш случай)
  • создает интерфейс virtual AP с таким же SSID и security profile как и мастер
  • если мастер-интерфейс не состоит ни в каком бридже, создает новый бридж и добавляет мастер-интерфейс в него
  • добавляет интерфейс virtual AP в тот же бридж, что и мастер.

Всё, можно переходить к следующему пункту - Настройка DHCP-relay.

Длинный путь для дотошных

Настраиваем security-profile для нашей wifi сети:

/interface wireless security-profiles add name=MyTestWIFI-repeater mode=dynamic-keys authentication-types=wpa2-psk unicast-ciphers=aes-ccm group-ciphers=aes-ccm wpa2-pre-shared-key="MySuperPassword"

Это настройки для WPA2. Если у Вас по каким-то причинам используется другой протокол - Вы, я надеюсь, знаете, что тут писать.

Настраиваем мастер-интерфейс для подключения к нашей wifi сети, как будто мы просто в режиме station, только указываем mode=station-pseudopridge:

/interface wireless set numbers=wlan1 ssid=MyTestWIFI security-profile=MyTestWIFI-repeater mode=station-pseudobridge

Убираем виртуальные интерфейсы, привязанные к этому мастер-интерфейсу из всех возможных бриджей (чтоб не оставлять записей об ошибочных портах бриджей). Тут, надеюсь, если Вы их настроили, Вы же знаете как их убрать.

Удаляем все виртуальные интерфейсы данного мастер-интерфейса.

Создаем интерфейс virtual AP с таким же SSID и security profile как и мастер, но режим работы указываем ap-bridge:

/interface wireless add copy-from=wlan1 name=wlan2 master-interface=wlan1 mode=ap-bridge

Если мастер-интерфейс не состоит ни в каком бридже, создаем новый бридж и добавляет мастер-интерфейс в него:

/interface bridge add name=wifibridge
/interface bridge port add bridge=wifibridge interface=wlan1

Добавляем интерфейс virtual AP в тот же бридж, что и мастер:

/interface bridge port add bridge=wifibridge interface=wlan2

Настройка DHCP-relay

К этому моменту мы должны получить усиленный сигнал нашей wifi-сети. Но у клиентов в зоне действия нашего репитера, перестанут выдаваться автоматически ip-адреса, то есть не будет работать DHCP. Почему? Это из-за того, что к главной точке доступа мы подключаемся в режиме station-pseudobridge, В этом режиме на интерфейсе происходит трансляция MAC-адресов (по аналогии с NAT, только на канальном уровне). То есть для всей остальной сети все устройства, которые подключаются к wifi через репитер имеют один MAC-адрес. Это не страшно, когда IP-адреса статические. Но для работы DHCP надо сделать следующие настройки:

Назначаем бриджу, в который входят наши беспроводные интерфейсы, адрес из основной сети (адреса из которой раздаются по DHCP).

Либо статически:

/ip address add address=192.168.1.160/24 interface=wifibridge

Или динамически, включив на нем DHCP-клиент (этот способ рекомендую только в случае, если на основном роутере для репитера прописан постоянный dhcp-lease):

/ip dhcp-client add interface=wifibridge

После включения dhcp-клиента назначенный адрес можно посмотреть так:

/ip address print

Теперь мы можем включить DHCP-relay, который в дополнение к трансляции MAC-адресов будет транслировать DHCP-запросы в основную сеть и обратно:

/ip dhcp-relay add dhcp-server=192.168.1.1 interface=wifibridge local-address=192.168.1.160

где 192.168.1.1 - адрес DHCP-сервера в нашей сети (обычно адрес основного роутера), а 192.168.1.160 - адрес назначенный нашему репитеру.

Теперь наш репитер должен полноценно заработать.

Бонус.

Как я писал выше, используя новый модуль wireless-rep мы можем настроить wifi-фильтр для путешествий. Он будет подключаться к внешней wifi-сети (в гостинице, аэропорту или метро), фильтровать трафик и отдавать во внутреннюю сеть или даже заворачивать внутренний трафик в VPN.

Подробно расписывать не буду, делается по аналогии с написанным выше:

Мастер-wifi-интерфейс (wlan1) убираем из каких-либо бриджей, назначаем ему mode=ap-bridge, ssid внутренней сети и отдельный security-profile.
Создаем дочерний wifi-интерфейс (wlan2), который подключаем к необходимой внешней сети.
Дочерний wifi-интерфейс по желанию объединяем в bridge с ethernet-портами.
Настраиваем masquerade в таблице nat фаервола из внутренней сети во внешнюю.
Настраиваем фильтры в таблице filter фаервола, исключая доступ к роутеру из внешней сети.

В результате, приезжая куда-то где есть wifi, мы подключаемся к роутеру через внутренний wifi, настраиваем на нем внешний wifi и пользуемся сетью, сидя за "каменной стеной".

Участник конкурса Иван Прокудин

Просьба всем кто читает статьи, участвующие в конкурсе, ставить оценки.