CAPsMAN гостевая WiFi сеть

Алгоритм

  1. Гостевой bridge
  2. Адресация
  3. DHCP сервер
  4. CAPsMAN
  5. IP Rules
  6. IP Firewall Tasttrack
  7. QoS для гостевой сети

Bridge –> New Bridge

IP –> Addresses –> New Address

IP –> DHCP Server –> DHCP Server Setup

Создаем DHCP сервер для гостевой сети, но в настройках DNS лучше указать google (8.8.8.8; 8.8.4.4)

Можно поставить галочку Add ARP For Leases, если нужен контроль этой сети.

Переходим в CAPsMAN. Создаем профиль гостевой сети

Выбираем безопасность, если она нужна.

Создаем гостевой Datapath

Создаем конфигурацию

Переходим на вкладку Provisioning и корректируем конфигурацию для 2G добавив slave конфигурацию

Далее в меню Remote CAP виделяем наши точки и нажимаем кнопку Provision

В меню CAP Interface появится наш гостевой интерфейс как sub интерфейс основной точки. Это же видно и в меню WiFi Intefaces

Запретим этим сетям общаться между собой.

IP –> Route –> Rules

Создаем два правила с Action drop

Следующий шаг – ограничим скорость гостевой сети. Для этого нужно изменить правило firewall fasttrack

и настроить очереди.

IP –> Firewall

Этим правилом мы говорим, что fasttrack будет работать только в нашей сети, но не в гостевой.

Делаем ограничения.

Queues –> Queu Types

Создаем два ограничения на download и upload

Подключаемся и проверяем.

 

 

image_pdfimage_print

Mikrotik Band Steering (костыль)

802.11r – На данный момент реализация отсутствует

Band Steering (Технология распределения между диапазонами частот обеспечивает подключение клиентов к беспроводной сети на подходящем для них диапазоне частот. режим Предпочитать 5 ГГц; режим Предпочитать 2.4 ГГц;) отсутствует, но мы можем имитировать это следующим способом:

  • уменьшив мощность на выходе с передатчика для 2.4 ГГц чтобы она была меньше на 5 Дб чем в 5 ГГц (2.4 ГГц < 5 ГГц) соответственно растет процент подключенных клиентских устройств в 5 ГГц
  • задав разные SSID для 2.4 ГГц и 5 ГГц и регулируя уровень принимаемого сигнала с помощью параметра ssid-regexp=""

Airtime Fairness (Функция равного доступа к радиоэфиру, гарантирует, что все подключенные клиенты получат равный доступ к радиоэфиру независимо от скорости передачи данных для того или иного устройства.) отсутствуют

image_pdfimage_print

Настройка CAPsMAN на двухдиапазонном роутере

Есть два роутера Hap ac^3 и Hap Lite. Первый двухдиапазонный и выступает в роли маршрутизатора, второй будем использовать как точку доступа при построении “бесшовного” роуминга.

Проверяем прошивки, они должны быть свежими и на всех устройствах одинаковые.

На первом устройстве – все отлично, а второе пришлось обновить и сбросить настройки

Алгоритм

  1. CAPs Manager
  2. Channels
  3. Datapaths
  4. Security
  5. Config
  6. Provisions
  7. CAPs на контролере (роутер в моем случае)
  8. CAPs на удаленном устройстве
  9. Access List

CAPsMAN –> CAP Interface –> Manager –> Enabled

CAPsMAN –> Channels

CAPsMAN –> Datapaths

Local Forwarding – весь трафик заворачивается на контролер

Client to Client Forwarding – возможность обмена трафиком между клиентами, т.е доступ к друг другу (сетевая шара, принтер или медиа устройство)

CAPsMAN –> Security Cfg.

CAPsMAN –> Provisioning

Это пример для 2,4 Гц модуля, то же нужно сделать и для частоты 5Гц.

Добавляем в CAPsMAN WiFi на роутере Wireless –> WiFi Interfaces –> CAP

Теперь подключаемся на удаленную точку доступа и проделываем последний пункт Wireless –> WiFi Interfaces –> CAP

 

UPD Удаленная точка доступа через некоторое время начала отваливаться с такой ошибкой в логах

CAP sent max keepalives without response

Победил ошибку убрав из bridge wlan1-интерфейс на ней, и поставил Discovery Interface – none в CAP меню Wiraless.

В меню появятся наши три созданных интерфейса

Когдая я делал в первый раз, я начинал с удаленной точки подключение к CAPsMAN и заканчивал на роутере. В этом случае у меня подымался роуминг для частоты 2,4 Гц, но не подымался для частоты 5 Гц, с ошибкой “не поддерживается канал”. Эту ошибку никак не смог победить и решил поднять сначала на роутере а потом на удаленном устройстве.

Сделаем принудительное сбрасывание клиентов с точки доступа при ухудшении сигнала

CAPsMAN –> Access List

Создаем два правила, одно для разрешения подключения если сигнал качественный, второе сбрасываем клиента если сигнал стал хуже.

Класификация сигнала

  • -35..-50 – Отличный
  • -50..-65 – Хороший
  • -65..-75 – Удовлетворительный
  • -75..-85 – Плохой

Noise Floor – уровень шума на данной частоте, нормальным считается значение от -95 dB и ниже. Если значение шума превышает -90 dB, то следует сменить частоту или уменьшить ширину канала.

Если в сети есть устройства Apple нужно выполнить рекомендации.

image_pdfimage_print

Telegram – уведомления о доступности устройства на телефон

Создание бота в telegram

  1. Находим поиском аккаунт @BotFather
  2. Запускаем бота кнопкой Start (в нижней части экрана)
  3. И пишем ему команду /newbot
  4. Бот задаст два вопроса
  • Имя создаваемого бота – можно задать любое, пусть будет Tst Info
  • Ник создаваемого бота – Tst_info_bot (должен обязательно оканчиваться на bot)

Если всё правильно сделано, бот выдаст сообщение. Нам из него надо скопировать токен бота, а именно строчку

6352145905:AAFUq2fa0DxBD0TGRcEnuV_Uqg2w9ljuNwP

  1. Теперь надо найти нашего бота в глобальном поиске по имени Tst_info_bot, и запустить кнопкой Start.
  2. После запуска бота, проверяум доступность API для вашего бота, делается это в браузере, путем открытия специального URL:
https://api.telegram.org/bot6352145905:AAFUq2fa0DxBD0TGRcEnuV_Uqg2w9ljuNwP/getMe

Система возвращает ответы в формате JSON, в коде ответа должен присутствовать параметр «ok: true», если он есть – API доступен.

Перед тем, как приступить к настройке RouterOS, необходимо узнать ID чата. При помощи мобильного приложения отправляем нашему боту команду:

/start

После чего, в браузере открываем специальный URL:

https://api.telegram.org/bot6352145905:AAFUq2fa0DxBD0TGRcEnuV_Uqg2w9ljuNwP/getUpdates

нас интересует параметр chat id 4229049755, в нем хранится уникальный идентификатор чата между вами и созданным ботом. Это наш идентификатор как пользователя, он будет идентичен для всех ботов в рамках одного аккаунта.

Проверяем отправку сообщений. Отправка сообщений осуществляется при помощи браузера, по специально сформированной ссылке, которая имеет следующий вид:

https://api.telegram.org/bot6352145905:AAFUq2fa0DxBD0TGRcEnuV_Uqg2w9ljuNwP/sendMessage?chat_id=4229049755&text=Hello%20World!

Текст сообщения может быть как на английском, так и на русском. Для сообщения на латинице, пробелы следует заменять на «%20», точно так же, как это делается в обычных URL. Для того, чтобы отправить сообщение кириллицей, предварительно текст необходимо конвертировать при помощи urlencode.

/tool fetch url="https://api.telegram.org/bot6352145905:AAFUq2fa0DxBD0TGRcEnuV_Uqg2w9ljuNwP/sendmessage\?chat_id=4229049755&text=Microtik TEST" keep-result=no

Важно! Для MicroTik в ссылке необходим “\” для экранирования знака ” ? ” в URL

И в бот нам падает сообщение, заданное в параметре chat_id=4229049755&text=Microtik TEST

Создадим проверку доступности хоста в локальной сети

Tools –> Netwatch –>Add

Указываем желаемый адрес и интервал проверки

Для состояния когда хост доступен (Up) пишем скрипт с текстом TST link up

/tool fetch url="https://api.telegram.org/6352145905:AAFUq2fa0DxBD0TGRcEnuV_Uqg2w9ljuNwP/sendmessage\?chat_id=4229049755&text=\F0\9F\9F\A2 TST link up" keep-result=no

           

и такой же с другим текстом для состояния недоступности (Down)

/tool fetch url="https://api.telegram.org/6352145905:AAFUq2fa0DxBD0TGRcEnuV_Uqg2w9ljuNwP/sendmessage\?chat_id=4229049755&text=\F0\9F\9F\A2 TST link down" keep-result=no

Отключаем сеть или питание у тестируемого устройства и ждем сообщение в телеграм.

image_pdfimage_print

Гостевой WiFi на одиночном роутере

Алгоритм действий:

  1. Virtual interface
  2. Profile key
  3. Bridge, Ports
  4. Ip Addr
  5. DHCP Server, IP pool
  6. NAT
  7. Route Rules
  8. QoS

 

Добавляем виртуальный интерфейс для гостевой сети

 

Создаем профиль

Создаем гостевой бридж интерфейс

Добавим порт

Настроим адресацию, DHCP сервер и pool для этой сети

Добавим NAT для нее

И с помощью правил запретим ей доступ в основную сеть

Настроим ограничение

image_pdfimage_print

WiFi на Apple устройствах

Рекомендации с сайта Apple

Вкратце

  • Шифрование (AES)
  • Аренда DHCP (8 часов)
  • Ширина канала (для 2,4 ГГц только 20 МГц, для 5 ГГц  все или автоматически)
  • WMM Support (включить)

Мне помогло одно включение WMM Support на WiFi интерфейсах.

Wireless--Interfaces--(выбрать нужный)--Wireless (Advanced Mode)--WMM Support Enabled
image_pdfimage_print

fail2ban

Блокировка на один час

/ip firewall filter
add chain=input protocol=tcp dst-port=22 src-address-list=ssh_blacklist action=drop \
comment="drop ssh brute forcers" disabled=no
add chain=input protocol=tcp dst-port=22 connection-state=new \
src-address-list=ssh_stage3 action=add-src-to-address-list address-list=ssh_blacklist \
address-list-timeout=1h comment="" disabled=no
add chain=input protocol=tcp dst-port=22 connection-state=new \
src-address-list=ssh_stage2 action=add-src-to-address-list address-list=ssh_stage3 \
address-list-timeout=20s comment="" disabled=no
add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh_stage1 \
action=add-src-to-address-list address-list=ssh_stage2 address-list-timeout=20s comment="" disabled=no
add chain=input protocol=tcp dst-port=22 connection-state=new action=add-src-to-address-list \
address-list=ssh_stage1 address-list-timeout=20s comment="" disabled=no

По аналогии можно защитить и другие сервисы.

image_pdfimage_print

Доступ к устройству через VPN

Если сеть VPN совпадает с диапазоном внутренней сети маршрутизатора, то доступ для управления через VPN будет заблокирован. Исправляем:

IP–Firewall–Filter Rule

Терминал:

/ip firewall add chain=input action=accept in-interface=all-ppp log=no log-prefix=""
image_pdfimage_print

Hairpin NAT

Сделав проброс портов для WEB сервера в локальной сети, все отлично работает но ровно до тех пор, пока мы не попытаемся получить доступ по внешнему адресу из внутренней сети. Вообще, таких ситуаций следует избегать, предпочтительно использовать для доступа доменные имена и двойной горизонт DNS, когда для внешних пользователей одно и тоже имя разрешается во внешний адрес, а для внутренних – во внутренний. Но это возможно не всегда. Попробовав же обратиться изнутри по внешнему адресу, мы получим ошибку соединения.

ПК отправляет запрос на внешний адрес маршрутизатора, он заменяет адрес назначения адресом внутреннего сервера и отправляет пакет к нему, адрес отправителя остается неизменным. Веб-сервер видит, что отправитель находится с ним в одной сети и отправляет ответ ему напрямую. Но отправитель направлял запрос на внешний адрес сервера и ждет ответа именно от него, поэтому ответный пакет, отправителем которого указан внутренний адрес веб-сервера будет отброшен и связь установить не удастся.

Очевидно, что нужно каким-то образом заставить веб-сервер отвечать не напрямую клиенту, а пересылать пакет обратно маршрутизатору. Здесь нам на помощь придет действие src-nat (SNAT), которое позволяет изменить адрес отправителя, находящееся в цепочке POSTROUTING. В терминах Mikrotik данная настройка носит наименование Hairpin NAT.

При такой схеме наш маршрутизатор не только изменяет адрес назначения, но и адрес источника, указывая в его качестве собственный внутренний IP. Обработав такой пакет веб-сервер отправит его обратно к маршрутизатору, который выполнит обратные преобразования (согласно таблице трансляции) и оправит его получателю.

Путь пакета от клиента к веб-серверу и обратно порядок прохождения цепочек будет следующим:

PREROUTING -> FORWARD -> POSTROUTING

IP – Firewall – NAT и добавим следующее правило: Chain – dstnat (читай PREROUTING), Dst. Address – 5.5.5.5 – внешний IP-адрес нашего роутера, Protocol – tcp – используемый протокол, если сервис может использовать несколько протоколов, скажем TCP и UDP – потребуется создать отдельное правило для каждого протокола, Dst. Port – 80 – порт, на котором маршрутизатор будет принимать внешние соединения

На закладке Action укажите: Action – dst-nat – выполняем замену адреса получателя, To Addresses – 192.168.1.41 – внутренний адрес веб-сервера, To Ports – 80 – порт, на котором веб-сервер принимает соединения. Если внешний и внутренний порт совпадают, то последний можно не указывать.

В терминале быстрее:

/ip firewall nat 
add action=dst-nat chain=dstnat dst-address=192.168.1.41 dst-port=80 protocol=tcp to-addresses=5.5.5.5 to-ports=80

Теперь переходим к настройке Hairpin NAT

IP – Firewall – NAT и добавим: Chain – src-nat (POSTROUTING), Src. Address – 192.168.1.0/24 – диапазон вашей локальной сети, Dst. Address – 192.168.1.41 – внутренний адрес веб-сервера, Protocol – tcp, Dst. Port – 80 – протокол и порт

Обратите внимание, что в качестве адреса и порта назначения мы указываем внутренние адрес и порт, так как пакет уже прошел цепочку PREROUTING, где данные получателя были изменены. К сожалению, не все это понимают, во многих инструкциях в сети в данном правиле фигурирует внешний адрес, стоит ли говорить, что такое правило работать не будет.

Затем переходим на закладку Action и указываем: Action – src-nat (SNAT), To Addresses – 192.168.1.1 – указываем внутренний адрес нашего маршрутизатора

Терминал:

/ip firewall nat
add action=src-nat chain=srcnat dst-address=192.168.1.41 dst-port=80 protocol=tcp src-address=192.168.1.0/24 to-addresses=192.168.1.1

Такие же правила нужно создать и для 443.

Иногда для данного правила используется действие masquerade, в чем же разница? В первом приближении оба действия делают одно и тоже – изменяют адрес источника пакета, но src-nat работает только со статическими адресами, зато позволяет указать в качестве источника любой адрес, masquerade работает с динамическими адресами, но в качестве адреса источника может использовать только адрес того интерфейса, с которого уходит пакет. За счет того, что masquerade при каждом запросе определяет адрес интерфейса – это действие требует больше вычислительных ресурсов, нежели src-nat.

В нашем случае все адреса статические, поэтому использование src-nat здесь будет более уместно

image_pdfimage_print