вторник, 8 сентября 2015 г.

Автоматическое подключение одной из двух доступных WIFI-сетей.

Есть две wifi сети. Одна открытая ssid 52, другая запаролена ssid 3G. Изначально наш роутер подключен к открытой сети. Эта сеть всегда онлайн, но бывают перебои - или ее нет, или на ней нет интернета. Есть вторая сеть - 3G, она включается с мобильного телефона. Задача, при пропадании первой сети, и появлении второй(включили на телефоне функцию "точка доступа") подключатся к сети 3G. После этого раз в час пробовать подключатся к сети 52, если она активна переходить на нее. В случае если нет ни одной сети периодически пытаться подключится в любой из этих двух бесконечно долго. Скрипт адаптирован к двум зашифрованным сетям. Скрипт выполняется только тогда, когда он закончил свою работу. Скрипт предусматривает что вы получаете адрес по dhcp и в одной и во второй сети. При проверке главного интерфейса роутер отключается от рабочего резервного, т.к. в микротике один радиомодуль. Ну и непонятно по какой причине микротик до сих пор не умеет выводит значения поиска беспроводных сетей в переменные.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#   23q RouterOS v.6.18-6.28
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 0) kidaem v sheduller na 1 minutu
# 1) proverit' nazvanie scripta "wifi_connect"
# 2) proverit' vremja dozvona na glavnuy tochku "TimeProverkaGlav" 3600
# 3) proverit' nazvanie wlan interfeisa - "wlan1"
# 4) proverit' nastroiki wlan i schifrovaniya
# 5) proverit' nastroiki dhcp-client na wlan
:if ([:len [system script job find script ="wifi_connect"]] > 1) do={} else={
# SSID glavnogo ineta
:local SSIDglav 52;
# Pass glavnogo ineta
#:local SSIDglavpass 2323wifi;
# SSID rezervnogo ineta
:local SSIDrezerv 3G;
# Pass rezervnogo ineta
:local SSIDrezervpass 12345678;
# Zaderchka mechdu popitkami pereklucheniya na glavniy inet
:local TimeProverkaGlav 3600;
:local SSID [/interface wireless get value-name=ssid number=0];
:local PingCount 3;
# YandexDNS
:local PingTarget1 77.88.8.8;
# OpenDNS
:local PingTarget2 208.67.222.222;
# GoogleDNS
:local PingTarget3 8.8.8.8;
:if ($SSID=$SSIDglav) do={
:local PingResult1 [/ping $PingTarget1 count=$PingCount];
:local PingResult2 [/ping $PingTarget2 count=$PingCount];
:local PingResult3 [/ping $PingTarget3 count=$PingCount];
:if (($PingResult1 + $PingResult2 + $PingResult3) >= (2 * $PingCount)) do={} else={
/interface wireless set [ find default-name=wlan1 ] band=2ghz-b/g/n disabled=no distance=indoors l2mtu=2290 ssid=$SSIDrezerv wireless-protocol=802.11;
/interface wireless security-profiles set [ find default=yes ] authentication-types=wpa2-psk eap-methods="" mode=dynamic-keys supplicant-identity=MikroTik wpa-pre-shared-key=$SSIDrezervpass wpa2-pre-shared-key=$SSIDrezervpass; :delay 7;
/ip dhcp-client disable [find interface=wlan1];
:delay 3;
/ip dhcp-client enable [find interface=wlan1];
:delay 10;
:local PingResult11 [/ping $PingTarget1 count=$PingCount];
:local PingResult21 [/ping $PingTarget2 count=$PingCount];
:local PingResult31 [/ping $PingTarget3 count=$PingCount];
:if (($PingResult11 + $PingResult21 + $PingResult31) >= (2 * $PingCount)) do={:log info "WiFi $SSIDrezerv active"} else={
:local GLAVworking false;
:local REZERVworking false;
:while ($GLAVworking!=true and $REZERVworking!=true) do={
/interface wireless set [ find default-name=wlan1 ] band=2ghz-b/g/n disabled=no distance=indoors frequency=2462 l2mtu=2290 ssid=$SSIDglav wireless-protocol=802.11;
/interface wireless security-profiles set [ find default=yes ] mode=none;
:delay 7;
/ip dhcp-client disable [find interface=wlan1];
:delay 3;
/ip dhcp-client enable [find interface=wlan1];
:delay 10;
:local PingResultzikl1 [/ping $PingTarget1 count=$PingCount];
:local PingResultzikl2 [/ping $PingTarget2 count=$PingCount];
:local PingResultzikl3 [/ping $PingTarget3 count=$PingCount];
:if (($PingResultzikl1 + $PingResultzikl2 + $PingResultzikl3) >= 6) do={:set GLAVworking true};
/interface wireless set [ find default-name=wlan1 ] band=2ghz-b/g/n disabled=no distance=indoors l2mtu=2290 ssid=$SSIDrezerv wireless-protocol=802.11;
/interface wireless security-profiles set [ find default=yes ] authentication-types=wpa2-psk eap-methods="" mode=dynamic-keys supplicant-identity=MikroTik wpa-pre-shared-key=$SSIDrezervpass wpa2-pre-shared-key=$SSIDrezervpass;
:delay 7;
/ip dhcp-client disable [find interface=wlan1];
:delay 3;
/ip dhcp-client enable [find interface=wlan1];
:delay 10;
:local PingResultzikl11 [/ping $PingTarget1 count=$PingCount];
:local PingResultzikl22 [/ping $PingTarget2 count=$PingCount];
:local PingResultzikl33 [/ping $PingTarget3 count=$PingCount];
:if (($PingResultzikl11 + $PingResultzikl22 + $PingResultzikl33) >= 6) do={:set REZERVworking true}};
if ($GLAVworking=true) do={
/interface wireless set [ find default-name=wlan1 ] band=2ghz-b/g/n disabled=no distance=indoors frequency=2462 l2mtu=2290 ssid=$SSIDglav wireless-protocol=802.11;
/interface wireless security-profiles set [ find default=yes ] mode=none;
:delay 7;
/ip dhcp-client disable [find interface=wlan1];
:delay 3;
/ip dhcp-client enable [find interface=wlan1]} else={:log info "WiFi $SSIDrezerv active"}}}} else={:delay $TimeProverkaGlav;
/interface wireless set [ find default-name=wlan1 ] band=2ghz-b/g/n disabled=no distance=indoors frequency=2462 l2mtu=2290 ssid=$SSIDglav wireless-protocol=802.11;
/interface wireless security-profiles set [ find default=yes ] mode=none;
:delay 7;
/ip dhcp-client disable [find interface=wlan1];
:delay 3;
/ip dhcp-client enable [find interface=wlan1];
:delay 10;
:local PingResultzikl21 [/ping $PingTarget1 count=$PingCount];
:local PingResultzikl22 [/ping $PingTarget2 count=$PingCount];
:local PingResultzikl23 [/ping $PingTarget3 count=$PingCount];
:if (($PingResultzikl21 + $PingResultzikl22 + $PingResultzikl23) >= 6) do={:log info "WiFi $SSIDglav active"} else={ /interface wireless set [ find default-name=wlan1 ] band=2ghz-b/g/n disabled=no distance=indoors l2mtu=2290 ssid=$SSIDrezerv wireless-protocol=802.11;
/interface wireless security-profiles set [ find default=yes ] authentication-types=wpa2-psk eap-methods="" mode=dynamic-keys supplicant-identity=MikroTik wpa-pre-shared-key=$SSIDrezervpass wpa2-pre-shared-key=$SSIDrezervpass;
:delay 7;
/ip dhcp-client disable [find interface=wlan1];
:delay 3;
/ip dhcp-client enable [find interface=wlan1]}}}

Подписаться на новые статьи.

Комментариев нет:

Отправить комментарий