Mikrotik HotSpot

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску

Mikrotik HotSpot

Задача: Хочу настроить гостевую сетьт с лимитом по скорости и показывать рекламу/свою страничку раз в N минут

Базовая настройка сети (VirtualAP или Multi SSID)

У меня 2 SSID - для меня и гостевой (sirmax и FreeWiFi)

[sirmax@MikroTik] > /interface wireless print 
Flags: X - disabled, R - running 
 0 R  name="FreeWiFi" mtu=1500 mac-address=D6:CA:6D:7C:A6:66 arp=enabled interface-type=virtual-AP master-interface=wlan1 ssid="CloudTechMeetup" wds-mode=disabled wds-default-bridge=none wds-ignore-ssid=no bridge-mode=enabled 
      default-authentication=yes default-forwarding=yes default-ap-tx-limit=0 default-client-tx-limit=0 hide-ssid=no security-profile=default 

 1  R name="sirmax1" mtu=1500 mac-address=D6:CA:6D:7C:A6:65 arp=enabled interface-type=virtual-AP master-interface=wlan1 ssid="sirmax1" wds-mode=disabled wds-default-bridge=none wds-ignore-ssid=no bridge-mode=enabled 
      default-authentication=yes default-forwarding=yes default-ap-tx-limit=0 default-client-tx-limit=0 hide-ssid=no security-profile=WPA_SPK_2 
  • mode=ap-bridge — работа в качестве точки доступа. Так же может быть bridge и wifi-клиентом.
  • frequency=2412 — ровно то же, что и «каналы» в SOHO-роутерах. Предварительно сканируем и выбираем самый незанятый
  • band=2ghz-b/g/n — режим работы. Можно, например, цеплять только g-клиентов
  • channel-width=20/40mhz-ht-above — ширина канала. Для дома можно оставить только 20mhz
  • bridge-mode=enabled — бриджевать пакеты, что нам и требуется
  • hide-ssid=no — не скрывать SSID, чтобы к ней было проще подключиться.

На своей сети:

/interface wireless security-profiles print 
name="WPA_SPK_2" mode=dynamic-keys authentication-types=wpa-psk,wpa2-psk unicast-ciphers=aes-ccm group-ciphers=aes-ccm wpa-pre-shared-key="Key2" wpa2-pre-shared-key="Key2" supplicant-identity="MikroTik" 
     eap-methods=passthrough tls-mode=no-certificates tls-certificate=none mschapv2-username="" mschapv2-password="" static-algo-0=none static-key-0="" static-algo-1=none static-key-1="" static-algo-2=none static-key-2="" 
     static-algo-3=none static-key-3="" static-transmit-key=key-0 static-sta-private-algo=none static-sta-private-key="" radius-mac-authentication=no radius-mac-accounting=no radius-eap-accounting=no interim-update=0s 
     radius-mac-format=XX:XX:XX:XX:XX:XX radius-mac-mode=as-username radius-mac-caching=disabled group-key-update=5m management-protection=disabled management-protection-key="" 
  • mode=dynamic-keys — включаем WPA-режим.
  • authentication-types=wpa-psk,wpa2-psk,wpa-eap,wpa2-eap — поддерживаемые методы авторизации
  • unicast-ciphers=aes-ccm — шифрование
  • wpa-pre-shared-key=Key1 — WPA-ключ
  • wpa2-pre-shared-key=Key2 — WPA2-ключ

Обратить внимание на authentication-types=wpa-psk,wpa2-psk - тут не надо писать лишнего, если это не корпоративная сеть.
Так же возможна RADIUS-авторизация, но в рамках пока не настраивал. Хотя использовать OpenWRT в качестве радиуса скорее всего возможно.

Перенаправлени на страничку с "рекламой"

Теперь задача - всем клиентам кто ходит через "безплатную" сеть показать рекламу.
Т.к. у нас нет вебсервера то используем страничку ошибки встроенного в кикротик сквида:

  • Включаем Web Proxy без кеша
/ip proxy set enabled=yes port=8080
  • Редактируем страничку с ошибкой
/file print               
 # NAME                                                                                                  TYPE                                                                                                       SIZE CREATION-TIME       
 1 um-before-migration.tar                                                         .tar file 16.5KiB jan/02/1970 02:00:30
...
 3 webproxy                                                                        directory         jan/02/1970 06:35:41
 4 webproxy/error.html                                                             .html file 783    jan/02/1970 02:40:51
[sirmax@MikroTik] > /file edit  
number: 4

И пишем то что сичтаем нужным.
Настройку DHCP сервера я опускаю, она тривиальна. Отмечу только что у меня клиентская сеть - 192.168.100.0/24

Собственно перенаправление

Правила такие:

/ip firewall nat> print 
Flags: X - disabled, I - invalid, D - dynamic 
0   chain=srcnat action=masquerade src-address=192.168.100.0/24 src-address-list=FreeWiFi_Notification out-interface=ether1-gateway 
1   chain=dstnat action=redirect to-addresses=192.168.100.254 to-ports=8080 protocol=tcp src-address=192.168.100.0/24 src-address-list=!FreeWiFi_Notification dst-port=80
/ip firewall filter print 
Flags: X - disabled, I - invalid, D - dynamic 
 0   chain=input action=add-src-to-address-list protocol=tcp src-address=192.168.100.0/24 address-list=FreeWiFi_Notification address-list-timeout=20m dst-port=8080 

Логика работы:

  • Клиент пытается зайти на любой сайт
  • NAT смотрит что его нет в address-list под именем "FreeWiFi_Notification" и его запрос редиректит на прокси
  • Прокси его не пускает и выдает error.html с ообщением. Не пускает потому что никого не пускает - такая полиси настроена.
  • При этом когда NAT отредиректил юзера на прокси, сработало правило в filter и добавило его ip в address-list "FreeWiFi_Notification".
  • При обновлении странички никакого редиректа не произойдет так как пользователь уже в address-list FreeWiFi_Notification
  • Записи из FreeWiFi_Notification удаляются address-list-timeout=20m через 20 минут

О безпроводных сетях

Ссылки