Організувати на 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 додати:
# 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 ]
}
}
Тут ми "рубаємо" всі wifi-підключення по яким пройшло/прийнято більше 20 мільйонів байт. Повірте, що жодна web-сторінка за одну сесію не віддасть такий обсяг інформації. Ну, а кому треба то той перепідключиться до гостьового доступу. Принаймні більша частина сучасних пристроїв та операційних систем це робить автоматично.
Немає коментарів:
Дописати коментар