Організувати на Mikrotik гостьовий wifi це справа добра, але, як загальновідомо, шара об'єму не має то завжди окрім мобільних пристроїв (проти яких ніхто особливо нічого не має) з'являються халявщики з ноутбуками, які вважають, що торенти на гостьовому це норма. Ні, не норма.
Тобто, мета, залишити доступ для будь-яких Android, iPhone, WindowsPhone і, по можливості, блокувати будь-яких інших "абонентів".
Все це робимо на Mikrotik 2011UiAS-2HnD, хоча певно без зайвих зусиль перенесеться та підійде до будь-яких інших моделей.
Рецепт, у скриптах.
Скрипт dhcp-make-static-guest:
Скрипт dhcp-make-static-guest варто запускати за розкладом, але не рідше ніж виділено lease time.
Далі, для статичних гостьових записів у dhcp lease проводимо регламентну обробку, а саме:
На додаток, також можна спробувати додати деяких "незручностей" халявщикам, що бажають тягати великі файли через гостьове підключення. Скажемо у reglament додати:
Тобто, мета, залишити доступ для будь-яких Android, iPhone, WindowsPhone і, по можливості, блокувати будь-яких інших "абонентів".
Все це робимо на Mikrotik 2011UiAS-2HnD, хоча певно без зайвих зусиль перенесеться та підійде до будь-яких інших моделей.
Рецепт, у скриптах.
Скрипт dhcp-make-static-guest:
Тобто для dhcp серверу, який обслуговує guest підключення, всі підключення у lease робляться статичними. Другим кроком, всім їм замість статичної адреси призначається адресний пул, в який розрахований для гостьових підключень. Таким чином при кожному наступному підключення гість має можливість отримати будь-яку іншу адресу з пулу і не конфліктувати з іншими. Якби адреса була статичною то велика вірогідність, що адреси б, наприклад, збігалися./ip dhcp-server lease make-static [ find server="guest" and address!="guest-dhcp" ]; /ip dhcp-server lease set [ find server="guest" and address!="guest-dhcp" ] address="guest-dhcp" always-broadcast=no;
Скрипт dhcp-make-static-guest варто запускати за розкладом, але не рідше ніж виділено lease time.
Далі, для статичних гостьових записів у dhcp lease проводимо регламентну обробку, а саме:
- блокуємо доступ для записів у яких hostname є пустим;
- блокуємо доступ для записів у яких запис не відповідає певним ознакам (наприклад всі Android пристрої мають hostname який починається з android).
Скрипт reglament:
Додаємо виклик цих скриптів у розклад::foreach i in=[/ip dhcp-server lease find server="guest"] do={ :local mac [/ip dhcp-server lease get $i mac-address]; :local hostname [/ip dhcp-server lease get $i host-name]; :local blockaccess [/ip dhcp-server lease get $i block-access]; :local lenhostname [ :len $hostname ]; :if ($lenhostname<1) do={ # Block Access for Hosts whith empty hostname. /ip dhcp-server lease set [ find mac-address=$mac ] block-access=yes } else={ # Block Access for another categories. :local hn; :local illegal true; if ($illegal) do={ :set hn [ :pick $hostname 0 7 ]; if ([ :find $hn "android" -1 ]=0) do={ :set illegal false; } } if ($illegal) do={ :set hn [ :pick $hostname 0 7 ]; if ([ :find $hn "Windows" -1 ]=0) do={ :set illegal false; } } if ($illegal) do={ :set hn [ :pick $hostname 0 6 ]; if ([ :find $hn "iPhone" -1 ]=0) do={ :set illegal false; } } if ($illegal) do={ :set hn [ :pick $hostname 0 4 ]; if ([ :find $hn "iPad" -1 ]=0) do={ :set illegal false; } } if ($illegal) do={ :set hn [ :pick $hostname 0 9 ]; if ([ :find $hn "Microsoft" -1 ]=0) do={ :set illegal false; } } if ($illegal) do={ :set hn [ :pick $hostname 0 10 ]; if ([ :find $hn "BLACKBERRY" -1 ]=0) do={ :set illegal false; } } if ($illegal && !$blockaccess) do={ :put "Block-Access: $mac $blockaccess"; /ip dhcp-server lease set [ find mac-address=$mac ] block-access=yes } } }
/system scheduler add interval=2m30s name=reglament on-event="/system script run dhcp-make-static-guest ;\r\ \n/system script run reglament ;\r\ \n" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=jan/01/1970 start-time=00:00:00
На додаток, також можна спробувати додати деяких "незручностей" халявщикам, що бажають тягати великі файли через гостьове підключення. Скажемо у reglament додати:
Тут ми "рубаємо" всі wifi-підключення по яким пройшло/прийнято більше 20 мільйонів байт. Повірте, що жодна web-сторінка за одну сесію не віддасть такий обсяг інформації. Ну, а кому треба то той перепідключиться до гостьового доступу. Принаймні більша частина сучасних пристроїв та операційних систем це робить автоматично.# Disable guest subscribers who exceed the limit for a single connection. :foreach wirelessClient in [/interface wireless registration-table find interface="wlan2-guest" ] do={ :local macAddress [/interface wireless registration-table get [ find .id=$wirelessClient ] value-name=mac-address]; :local bytes [/interface wireless registration-table get [ find .id=$wirelessClient ] value-name=bytes]; :local posComma [ :find $bytes "," -1]; :local RXbytes [:pick $bytes 0 $posComma]; :local deregister false; :if ($RXbytes > 20000000) do={ :set deregister true; } if (deregister) do={ :put "Deregistration: $macAddress $bytes $RXbytes"; /interface wireless registration-table remove [ find mac-address=$macAddress ] } }