MikroTik::Scripting

Innen: Farkas Attila Wiki
A lap korábbi változatát látod, amilyen ApelPro (vitalap | szerkesztései) 2024. május 18., 19:40-kor történt szerkesztése után volt. (→‎Backup küldés emailben és SFTP szerverre)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)
Ugrás a navigációhoz Ugrás a kereséshez

Bevezetés

A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:

  • Alap konfigurációk előállítása
    • L1-L2 konfiguráció
      • bridge
      • wireless mód (station, ap stb.)
      • VPN szerver / kliens aktiválás és alap konfiguráció
      • VLAN interfészek
    • L3 konfiguráció
      • IP címek
      • statikus route szabályok
      • routing protokollok (ospf, bgp) alap beállítások
  • Ütemezett feladatok végrehajtása
    • Backup küldése emailben
    • Watchdog / Netwatch
    • Paraméterek monitorozása

A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.

A script nyelv dokumentációját a MikroTik hivatalos oldalán itt találod.

A terminál használata

MikroTik terminál

Nyelvi alap elemek

Változók

  • Lokális változók
  • Globális változók
  • Tömbök

Elágazás

Ciklusok

  • for
  • foreach
  • do-while

Terminál alapvető eszközei

Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.

  • :put
  • :set
  • :pick
  • :delay
  • :resolv

Scriptelési lehetőségek

Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:

Komplex scriptek

Backup küldés emailben és SFTP szerverre

Az egyik legfontosabb, hogy mindig legyen mentésünk az eszközökről. A következő script segítségével biztonsági mentést hozhatunk létre, amit akár egyszerre több email címre és SFTP szerverre tölthetünk fel.

:local sendEmail {\
        "address"="email@provider.hu"\
}

:local smtp {\
       "server"="smtp.provider.hu";\
       "port"=465;\
       "tls"="yes";\
       "user"="user@provider.hu";\
       "password"="password"\
}

:local toEmails {\
             "email1@provider.hu";\
             "email2@provider.com"\
}

:local backup {\
        "prefix"="";\
        "key"="VERYSTRONGKEY";\
        "fileName"=([/system identity get name ] . "_" . \
                 [:pick [/system clock get date] 0 4] ."_". \
                 [:pick [/system clock get date] 5 7] ."_". \
                 [:pick [/system clock get date] 8 10] ."-". \
                 [:pick [/system clock get time] 0 2] ."_". \
                 [:pick [/system clock get time] 3 5] ."_". \
                 [:pick [/system clock get time] 6 8] \
                 .".backup"\
       )\
}

:local sftpServers {\
      {\
            "address"="srv1.hu";\
            "port"="22";\
            "dst-path"="/destination/path/";\
            "user"="username";\
            "password"="password"\
     };\
     {\
            "address"="srv2.hu";\
            "port"="22";\
            "dst-path"="/destination/path/";\
            "user"="user";\
            "password"="password"\
     }\
}

# sendMail function
:local sendMail do={
  :local toEmails ""
  :foreach i in $emails do={
    :if ( $toEmails != "" ) do={
       :set toEmails ($toEmails . ",")
    }
    :set toEmails ($toEmails . $i)
  }

  /tool/e-mail/send server=($smtp->"server") port=($smtp->"port") tls=($smtp->"tls") \
        user=($smtp->"user") password=($smtp->"password") \
        subject="$subject" to="$toEmails" from=($sender->"address") \
        body="$text" file="$file"
}
# end of sendMail function

# uploadSftp function
:local uploadSftp do={
  :foreach i in $servers do={
     :put (\
            "Upload ". $file . " to " . $i->"address" .":". $i->"port" \
            . ", into " . $i->"dst-path" . " folder with user: ". $i->"user" \
     )
     /tool/fetch mode=sftp upload=yes \
                 address=($i->"address") port=($i->"port") \
                 user=($i->"user") password=($i->"password") \
                 src-path="$file" dst-path=($i->"dst-path".$file)
  }
}
#end of uploadSftp function

/file remove [find where type="backup"]
/file remove [find where type="script"]

/system backup save name=(($backup->"prefix") . ($backup->"fileName")) password=($backup->"key")
/export show-sensitive file=(($backup->"prefix").($backup->"fileName"))

:delay 10000ms

$sendMail  emails=$toEmails sender=$email smtp=$smtp file=($backup->"prefix" . $backup->"fileName") \
      subject=([/system identity get name] ." ". [/system clock get date] . " " . [/system clock get time] . " backup file") \
      text="Please note that the file is transmitted encrypted. If you have forgotten the key, please contact the appropriate person."

$uploadSftp servers=$sftpServers file=($backup->"prefix" . $backup->"fileName")
$uploadSftp servers=$sftpServers file=($backup->"prefix" . $backup->"fileName".".rsc")

/file remove [find where type="script"]

A script elején található konfigurációs rész igény szerint bővíthető, vagy redukálható. Jelenlegi állapotában két email címre és két sftp szerverre került mentésre a biztonsági mentésünk. A plain text alapú RSC fájlt csak az SFTP szerverre töltjük fel. Meg kell jegyezni, hogy ha az Identity paraméter szóközöket tartalmaz, akkor az RSC fájl feltöltésével problémák adódhatnak - ez esetben érdemes a $backup->fileName paramétert úgy előállítani, hogy ne legyen benne szóköz.