Redirect web during network failure

Z Wiki UnArt Slavičín
Skočit na navigaciSkočit na vyhledávání
Verze k tisku již není podporovaná a může obsahovat chyby s vykreslováním. Aktualizujte si prosím záložky ve svém prohlížeči a použijte prosím zabudovanou funkci prohlížeče pro tisknutí.

Nová verze

Instalace

# Seznam vsech rozhrani, na ktere chceme aplikovat presmerovani
:global interfaces [:toarray "\"bridge1\""]

# Adresa brany - pri vypadku pingu na ni aktivujeme presmerovani
:global remote "192.168.128.1"

# Libovolna adresa routeru, na kterou budeme presmerovavat DNS pozadavky
:global local "192.168.128.10"

/ip dns static

# Pridame pravidlo pro presmerovani vsech pozadavku sam na sebe
add name=".*" address=$local disabled=yes

# Pravidlo presuneme uplne nejvyse
move [find name=".*"] 0

# Pridame profil pro hotspot
/ip hotspot profile add dns-name="" hotspot-address=0.0.0.0 html-directory=malfunction\
   http-cookie-lifetime=3d http-proxy=0.0.0.0:0 login-by=cookie,http-chap name=malfunction\
   rate-limit="" smtp-server=0.0.0.0 split-user-domain=no use-radius=no

# Pro kazde rozhrani vytvorime vlastni hotspot
:foreach i in=$interfaces do={
/ip hotspot add disabled=yes idle-timeout=5m interface=$i keepalive-timeout=none profile=malfunction
}

/system script

# Pridame skript pro aktivaci presmerovani
add name=malfunction-on policy=ftp,reboot,read,write,test,winbox,password,sniff,api source="/ip dns set all\
   ow-remote-requests=yes\r\
   \n/ip dns cache flush\r\
   \n\r\
   \n/ip hotspot\r\
   \n:foreach server in=[find profile=\"malfunction\"] do={\r\
   \nenable \$server\r\
   \n}\r\
   \n\r\
   \n/ip dns static enable 0"

# Pridame skript pro deaktivaci presmerovani
add name=malfunction-off policy=ftp,reboot,read,write,test,winbox,password,sniff,api source=\
   "/ip hotspot\r\
   \n:foreach server in=[find profile=\"malfunction\"] do={\r\
   \ndisable \$server\r\
   \n}\r\
   \n\r\
   \n/ip dns set allow-remote-requests=no\r\
   \n/ip dns cache flush\r\
   \n/ip dns static disable 0"

# Nakonec pridame pingatko na adresu brany
/tool netwatch add comment=malfunction disabled=no down-script="/system script\r\
   \nrun [find name=\"malfunction-on\"]" host=$remote interval=15s timeout=1s up-script="/system script\r\
   \nrun [find name=\"malfunction-off\"]"

Odinstalace

# Smazeme pingatko na adresu brany
/tool netwatch remove [/tool netwatch find comment="malfunction"]

# Smazeme pravidlo pro presmerovani vsech pozadavku sam na sebe
/ip dns static remove [/ip dns static find name=".*"]

# Smazeme hotspoty
/ip hotspot remove [find profile=malfunction]

# Smazeme profil pro hotspot
/ip hotspot profile remove [find name=malfunction]

/system script

# Smazeme skript pro aktivaci presmerovani
remove malfunction-on

# Smazeme skript pro deaktivaci presmerovani
remove malfunction-off

Stará verze

#Skript na přesměrování webu při výpadku spoje dál do sítě
# pro MikroTik 2.9.X
# Autor: Roman Ševčík
# Poznámka (Tomáš Dulík): Skript pingá na adresu zadanou v proměnné "ip"
# Pokud je brána nedostupná, aktivuje:
# 1. pravidlo v tabulce NAT, které má v komentáři označení "redirectDNS"
#    Toto pravidlo zde není uvedeno, námět pro vylepšení: pokud pravidlo nenajde,
#    skript by si jej mohl sám vytvořit
# 2. V modulu "Hotspot" aktivuje položku "malfunction". Hotspot obsahuje jednoduchý
#    web server, který lze využít pro zobrazení stránky o výpadku. Romane,
#    hoď sem ještě návod, jak v Hotspotu vytvořit "malfunction"
:local time-on
:local time-gw
#:local end
# IP adresa dalšího bodu sítě, ke kterému je toto AP připojeno (uvádějte v uvozovkach)
:local ip "10.143.18.1"
#
# pocet pingu
:local count 5
#
#
#Cas po který budu zobrazovat hlasku o nedostupnosti
:set time-on 1m
#
#Cas za jak dlouho se bude testovat dostupnost brany
:set time-gw 1m
#
#Při použití skriptu po spuštìní doporuèuju nechat nìjaký èas Routeru na nabìhnutí -  upravte dle vlastní vùle
:delay 10s
#------------------------------------------------------
#
:while true do {
:if ([/ping $ip count=$count] = 0) \  do {
/ip hotspot enable malfunction
/ip firewall nat enable [find comment=redirectDNS]
:delay $time-on
} \ 
else {
/ip hotspot disable malfunction
/ip firewall nat disable [find comment=redirectDNS]
:delay $time-gw
}
}