„MikroTik::Scripting” változatai közötti eltérés

Innen: Farkas Attila Wiki
Ugrás a navigációhoz Ugrás a kereséshez
(Új oldal, tartalma: „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 * Ütemezett feladatok végrehajtása ** Backup kü…”)
 
 
(17 közbenső módosítás ugyanattól a szerkesztőtől nincs mutatva)
1. sor: 1. sor:
[[category:MikroTik]]
= 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:
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
* Alap konfigurációk előállítása
9. sor: 11. sor:
*** IP címek
*** IP címek
*** statikus route szabályok
*** statikus route szabályok
*** routing protokollok (ospf, bgp) alap beállítások
* Ütemezett feladatok végrehajtása
* Ütemezett feladatok végrehajtása
** Backup küldése emailben
** Backup küldése emailben
15. sor: 18. sor:


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 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 [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.


= A terminál használata =
= A terminál használata =
[[Fájl:MikroTik terminál.png|keretnélküli|középre|alt=MikroTik terminál|MikroTik terminál]]
= Nyelvi alap elemek =
= 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 =
= 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:
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:
* /system/script
* [https://help.mikrotik.com/docs/display/ROS/Scripting /system/script]
* /system/scheduler
* [https://help.mikrotik.com/docs/display/ROS/Scheduler /system/scheduler]
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]
** bound
** bound
59. sor: 83. sor:
** $msgData  
** $msgData  
** $msgTopic
** $msgTopic
= Komplex scriptek =
= Komplex scriptek =
[[category:Backup]]
[[category:Biztonsági mentés]]
== 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.
<syntaxhighlight lang="bash">
: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"]
</syntaxhighlight>
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.

A lap jelenlegi, 2024. május 18., 19:40-kori változata

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.