Πίσω στο blog

English  ·  Ελληνικά

MikroTik / Automation  ·  Οδηγος  ·  Ιουλιος 2026

MikroTik
Διαχειριση ενος Fleet

Έναν router τον ρυθμίζεις με το χέρι. Είκοσι routers σε είκοσι sites τους ρυθμίζεις με το χέρι μία φορά, και μετά περνάς τη ζωή σου κάνοντας login σε αυτούς έναν-έναν για να αλλάξεις έναν server DNS. Ορίστε πώς οδηγείς ένα fleet από boxes RouterOS από ένα μέρος — το REST API, το Ansible, και ένα scripted push που παραμένει idempotent. Το post Ansible της Cisco, σε RouterOS.

MikroTik RouterOS Automation REST API Ansible

Το χειροκίνητο configuration δεν κάνει scale, και δεν παραμένει συνεπές — ολόκληρος ο λόγος που ένα fleet παρασύρεται σε είκοσι ελαφρώς-διαφορετικά snowflakes είναι ότι κάθε αλλαγή γράφτηκε με το χέρι σε όποιο box θυμήθηκε κάποιος. Το automation διορθώνει και τα δύο: μία πηγή αλήθειας, pushed παντού, επαληθεύσιμη. Το RouterOS 7 σου δίνει τρία επίπεδα αυτού. Το REST API είναι το low-level primitive — HTTP verbs πάνω σε paths /rest/…, scriptable από οτιδήποτε. Το Ansible (το collection community.routeros) είναι το declarative layer — περιέγραψε την επιθυμητή κατάσταση, άσ' το να συγκλίνει. Και το on-box scripting + scheduler (από το post scripting) χειρίζεται ό,τι είναι καλύτερο να γίνεται τοπικά.

Ο στόχος engineering σε όλο αυτό είναι η idempotency: το να τρέξεις το ίδιο push δύο φορές δεν αλλάζει τίποτα τη δεύτερη φορά. Πέτυχέ το και το automation είναι ασφαλές να τρέχει σε πρόγραμμα· χάσ' το και θα διπλασιάζεις κανόνες σε όλο το estate. Αυτό καθρεφτίζει το Cisco IOS: Managing a Fleet with Ansible — ίδια πειθαρχία, transports RouterOS.

Προαπαιτουμενα

01

Το REST API — HTTP πανω σε RouterOS

Το RouterOS 7 εκθέτει ολόκληρο το δέντρο μενού πάνω από REST. Κάθε path που ξέρεις από το CLI είναι ένα URL· το GET διαβάζει, το PUT προσθέτει, το PATCH επεξεργάζεται, το DELETE αφαιρεί. Οτιδήποτε μιλάει HTTP μπορεί τώρα να ρυθμίσει τον router.

Στον router — ενεργοποιησε REST (τρεχει πανω σε www-ssl)
> /ip service set www-ssl address=10.10.99.0/24 certificate=rest-cert disabled=no
# Χρησιμοποίησε πραγματικό cert και περιόρισέ το στο subnet mgmt — αυτό είναι πλήρης έλεγχος.
Απο τον host management — διαβασε και αλλαξε μεσω REST
# Διάβασμα: GET τον πίνακα διευθύνσεων σαν JSON.
$ curl -sk -u auto:secret https://10.10.0.1/rest/ip/address | jq .

# Αλλαγή: PATCH τον server DNS σε όλο το δέντρο με ένα call.
$ curl -sk -u auto:secret -X POST https://10.10.0.1/rest/ip/dns/set \
    -H 'Content-Type: application/json' -d '{"servers":"1.1.1.1,9.9.9.9"}'
# Τύλιξέ το σε ένα for-loop πάνω σε μια λίστα hosts και άλλαξες 20 boxes.

02

Ansible — Declarative σε Ολο το Estate

Ένα loop πάνω από curl δουλεύει αλλά δεν είναι idempotent και δεν έχει μοντέλο state. Το collection community.routeros του Ansible σου δίνει inventory, modules desired-state, και dry-run — η ενήλικη εκδοχή της ίδιας ιδέας.

playbook.yml — ορισε NTP παντου, idempotently
- hosts: mikrotiks
  gather_facts: no
  connection: ansible.netcommon.network_cli
  vars:
    ansible_network_os: community.routeros.routeros
  tasks:
    - name: Ensure NTP client config
      community.routeros.command:
        commands:
          - /system ntp client set enabled=yes servers=time.google.com
    - name: Read version (for a report)
      community.routeros.command:
        commands: [ /system resource print ]
      register: ver
$ ansible-playbook -i inventory playbook.yml --check   # dry run πρωτα
💡 Pro Tip — routeros_api εναντιον routeros_command

Το collection έχει δύο transports: το community.routeros.command (μέσω SSH, τρέχει γραμμές CLI) και το community.routeros.api (μέσω του binary API, δομημένο). Για push config, προτίμησε τα modules API όπου υπάρχουν — καταλαβαίνουν τα items με κλειδί .id του RouterOS και μπορούν πραγματικά να συγκλίνουν σε μια επιθυμητή κατάσταση, αντί να ξανατρέχουν τυφλά CLI που μπορεί να διπλασιάσει entries. Χρησιμοποίησε το command για reads και για μενού που τα modules API δεν καλύπτουν ακόμα.

03

Idempotency — Ολο το Νοημα

Το failure mode ενός αφελούς automation είναι ο διπλασιασμός: ένα push που κάνει add έναν κανόνα firewall τον προσθέτει ξανά σε κάθε τρέξιμο. Η λύση είναι find-then-set, ώστε το δεύτερο τρέξιμο να είναι no-op.

RouterOS script — pattern add-only-if-absent
# Αντί για ένα γυμνό add (που διπλασιάζει), έλεγξε πρώτα:
> :if ([:len [/ip firewall address-list find list=MGMT address=10.10.99.0/24]] = 0) do={ \
    /ip firewall address-list add list=MGMT address=10.10.99.0/24 }
# Για ρυθμίσεις, το 'set' είναι φυσικά idempotent — προτίμησέ το από add/remove:
> /ip dns set servers=1.1.1.1,9.9.9.9   # ίδιο αποτέλεσμα κάθε τρέξιμο
⚠ Παγιδα — Το Automation Ενισχυει τα Λαθη

Μια λάθος εντολή γραμμένη σε έναν router είναι ένας χαλασμένος router· η ίδια εντολή pushed σε ένα fleet είναι διακοπή σε κάθε site ταυτόχρονα — συμπεριλαμβανομένου του management path που χρησιμοποιούσες για να τα φτάσεις. Πάντα dry-run (--check), stage σε ένα canary box, και ποτέ μην κάνεις push μια αλλαγή στην input-chain του firewall σε όλο το estate χωρίς προγραμματισμένο auto-revert ή δεύτερο access path. Η συνήθεια Safe Mode δεν προστατεύει τα API pushes — αυτή την ασφάλεια πρέπει να τη χτίσεις εσύ.

Βασικα Συμπερασματα

  1. Το χειροκίνητο config δεν κάνει scale ούτε παραμένει συνεπές — τα fleets παρασύρονται σε snowflakes γιατί κάθε αλλαγή γραφόταν με το χέρι. Το automation είναι η λύση.
  2. Το REST API εκθέτει ολόκληρο το δέντρο μενού μέσω HTTP — GET/POST/PATCH/DELETE πάνω σε /rest/…, scriptable από οτιδήποτε.
  3. Το community.routeros του Ansible προσθέτει inventory, desired state, και dry-run — το declarative layer πάνω στις ίδιες λειτουργίες.
  4. Προτίμησε τα modules API από τα modules CLI-command για pushes — συγκλίνουν σε state αντί να ξανατρέχουν τυφλά.
  5. Η idempotency είναι όλο το νόημα: find-then-add, και ευνόησε το set (φυσικά idempotent) από το add. Ένα δεύτερο τρέξιμο δεν πρέπει να αλλάζει τίποτα.
  6. Το automation ενισχύει τα λάθη — dry-run, canary, και κράτα ένα δεύτερο path πριν αγγίξεις το input chain σε όλο το fleet.

Δωδεκα sites και καθε αλλαγη ειναι δωδεκα logins;

Η διαχείριση πέντε sites με το χέρι σημαίνει πέντε ελαφρώς διαφορετικά configs μέσα σε έναν χρόνο. Χτίζω fleet automation για MikroTik και Cisco με μία πηγή αλήθειας και σταδιακά pushes, ώστε κάθε site να παραμένει συνεπές αντί να παρασύρεται σιωπηλά.

Κλεισε μια Discovery Call →