воскресенье, 19 апреля 2015 г.

Генератор паролей

Взято отсюда
# MikroTik Random Password Generator
# with random start offset delay for use with /System Scheduler
# Author: Bob Burley - April 25, 2011
#
:local minRtt
:local maxRtt
:local random 0
:local siteAddress
:local charStrNum 1
:local p1
:local var1
:local var2
:local var3
:local newPassword ""
# set password length here
:local newPassLength 8
# Total characters to choose from is 73
# Eliminated confusing characters
# '0' (zero) and Upper Case 'O'
# '1' (one) and Upper Case 'I' and Lower Case 'l' (L)
:local charStr1 "23456789ABCDEFGHJKLMNPQRSTUVWXYZ23456789abcdefghijkmnopqrstuvwxyz23456789"
:local charStr2 "cN47iKd2bLn8sQz4JAu2PD6Vm5RjTG4UrFY78XewHE3W9gMq62v7a9Z5yf5pC3k6xt9Bh8S3o"
:local charStr3 "uYswW92z6M5fJynQp6hGm5VSr4oR8k7A2bKq5U3FiZvc8gHP2tdL9E4jBT3X7xC6N4D8e7a93"
# google.ca (74.125.95.147) - google.com (74.125.95.99) - yahoo.ca (68.180.206.184) - yahoo.com (209.191.122.70)
:local arraySiteList [:toarray ("74.125.95.147","74.125.95.99","68.180.206.184","209.191.122.70")]
:foreach siteAddress in=($arraySiteList) do={
  /tool flood-ping $siteAddress count=4 do={
    :if ($sent=4) do={
      :set minRtt $"min-rtt"
      :set maxRtt $"max-rtt"
    }
    :set random ($random + minRtt)
    :while ($random > 59) do={
      :set random ($random -60)
    }
    :set random ($random + maxRtt)
    :while ($random > 59) do={
      :set random ($random -60)
    }
  }
}
:delay $random
:for char from=1 to=$newPassLength step=1 do={
#  Generate number between 0 and 72
  :set var1 ([:pick [/system clock get time] 6 8])
  :set p1 ([:len [/system resource get uptime]])
  :set var2 ([:pick [/system resource get uptime] ($p1-2) $p1])
  :set var3 (($var1 * $var2) / 48)
#  pick next character to add to the new password
  :if ($charStrNum=1) do={
    :set newPassword ($newPassword . [:pick $charStr1 $var3])
  }
  :if ($charStrNum=2) do={
    :set newPassword ($newPassword . [:pick $charStr2 $var3])
  }
  :if ($charStrNum=3) do={
    :set newPassword ($newPassword . [:pick $charStr3 $var3])
  }
  :set charStrNum ($charStrNum + 1)
  :if ($charStrNum = 4) do={
    :set charStrNum 1
  }
  :delay (($var1 + $var2 + $var3) / 5)
}
:log info $newPassword
Скрипт выполняется не сразу. IP можно заменить  на свои.

Проверка активности интерфейса. Тупой метод.

Много лет назад нарыгал два скрипта, рабочая но очень тупая проверка интерфейса(можно было обойтись одним.)
local status [ip route get value-name=active [find comment=EKSTROTEL]]
if ($status=true) do={/system script run e-mail_to_sms_off; /system scheduler disable mudrim_velton_off_bez_chapaeva; /system scheduler enable mudrim_velton_on_bez_chapaeva} else={}
local status [ip route get value-name=active [find comment=VELTON]]
if ($status=true) do={/system script run e-mail_to_sms_on; /system scheduler disable mudrim_velton_on_bez_chapaeva; /system scheduler enable mudrim_velton_off_bez_chapaeva} else={}
Проверяют активность интерфейса, в случае не активности главного маршрута отправляет смс и друг друга рекурсивно выключают, что б больше не выполнялся до переключения главного маршрута в active.  =) 

noip

Есть два маршрута на разные провайдеры, когда один активен(WAN1), второй нет.

# The RB interface global ddnsinterface
local status [ip route get value-name=active [find comment=WAN1]]
if ($status=true) do={:global ddnsinterface "wan1"} else={:global ddnsinterface "wan2"}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# EDIT YOUR DETAILS / CONFIGURATION HERE
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Define DDNS Accounts for RB Interfaces, one per interface.
# The RB interface
:global ddnsinterface
# The DDNS Provider (Choice of NOIP, DYNDNS or EVERYDNS)
:global ddnsprovider "NOIP"
# The Hostname to update.
:global ddnshost "1.sytes.net"
# Your Account Username
:global ddnsuser "user"
# Your Account Password
:global ddnspass "pass"

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# END OF USER DEFINED CONFIGURATION
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Define Global Variables
:global ddnssystem ("mt-" . [/system package get system version] )
:global ddnsip
:global ddnslastip
:if ([ :typeof $ddnslastip;] = "nil" ) do={ :set ddnslastip "0" }
:global ddnsprovname
:global str
:global ddnsprovaddress
:if ($ddnsprovider="NOIP") do={
  :set ddnsprovname "NoIP"
  :set str "/nic/update?hostname=$ddnshost&myip=$ddnsip"
  :set ddnsprovaddress "dynupdate.no-ip.com"
}
if ($ddnsprovider="DYNDNS") do={
  :set ddnsprovname "DynDNS"
  :set str "/nic/update?hostname=$ddnshost&myip=$ddnsip&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"
  :set ddnsprovaddress "members.dyndns.org"
}
if ($ddnsprovider="EVERYDNS") do={
  :set ddnsprovname "EveryDNS"
  :set str "/index.php?ver=0.1&ip=$ddnsip&domain=$ddnshost"
  :set ddnsprovaddress "dyn.everydns.net"
}

# Grab the current IP address on that interface.
:global ddnsip2 [/ip address get [/ip address find interface=$ddnsinterface ] address];
:set ddnsip [:pick $ddnsip2 0 [:find $ddnsip2 "/"]];
# Did we get an IP address to compare?
:if ([ :typeof $ddnsip;] = "nil" ) do={
   :log info ("NoIP: No ip address present on " . $ddnsinterface . ", please check.")
} else={
  :if ($ddnsip != $ddnslastip) do={
        :log info "$ddnsprovname: Sending UPDATE!"
         /tool fetch address=$ddnsprovaddress src-path=$str mode=http user=$ddnsuser password=$ddnspass dst-path=("/DDNS-".$ddnsprovname.".".$ddnshost)
  }
  :delay 1
  :set str [/file find name="DDNS-$ddnsprovname.$ddnshost"];
  /file remove $str
  :set ddnslastip $ddnsip
}
#:log info "DDNS Update script executed successfully."

суббота, 18 апреля 2015 г.

Экспорт в файл, дописать в файл.

Экспорт в файл:
/ip dhcp-server lease export file=lease
 Дописать в файл:
ip dhcp-server lease print terse file="arp.txt" append

Сбрасываем connection.

ip firewall connection remove [find protocol=icmp]
Можно использовать при failover (при переключении сбрасывать установленные UDP-соединения):
:foreach i in=[/ip firewall connection find dst-address~":2227" protocol~"udp"] do={ /ip firewall connection remove $i }
 При ненадобности номер порта можно и не упоминать. 

backup RouterOS на e-mail

:local backupfile ("router-" . [:pick [/system clock get date] 7 11] ."-" . [:pick [/system clock get date] 0 3] ."-" . [:pick [/system clock get date] 4 6] . ".backup");
/system backup save dont-encrypt=yes name=$backupfile;
:delay 5;
:local date [/system clock get date];
:local body "$date ROUTER backup";
:local smtpserv [:resolve "smtp.yandex.ru"];
:local email "23@yandex.ru";
:local pass 23;
/tool e-mail send server=$smtpserv port=587 user=$email password=$pass start-tls=yes to="admin@23.ua"  from=$email subject="$body" body="$body" file=$backupfile;
:delay 5;
/file remove $backupfile;
:log info "backup e-mail finished";

Заглушка для клиентов при пропадании интернета.

Создаем правило:
add action=redirect chain=dstnat comment=zagluchka disabled=yes protocol=tcp \
    src-address=192.168.23.0/24 to-ports=8080

Включаем на порту 8080 web-proxy.
/ip proxy access
add action=deny