Automatyczne zarządzanie RouterOS za pomocą OpenTofu

IAC do zarządzania konfiguracją Mikrotika

W tym wpisie dzielę się praktycznym podejściem do Infrastructure as Code dla routerów MikroTik (RouterOS). Projekt iac-mikrotik to zestaw modułów OpenTofu (API RouterOS), który pozwala w pełni deklaratywnie zarządzać routerem bez klikania w GUI. Całość jest wersjonowana w Git, dzięki czemu łatwo zrobić review, audyt i rollback.

Co automatyzuje iac-mikrotik

  • Interfaces: Ethernet, Bonding (LACP), Bridge, VLAN – każdy typ w osobnym module i katalogu.
  • Serwery DHCP: sieci, pule, instancje serwerów, statyczne leases, a całość spójnie spięta z DNS.
  • Serwer DNS: centralny resolver z cache, serwerami upstream i kontrolą bezpieczeństwa.
  • Rekordy DNS: statyczne wpisy A/AAAA/CNAME/TXT/MX/NS w mapie dns_records – dla krytycznych usług.

Struktura repozytorium

router.rachuna-net.pl/
├── interfaces/         # ethernet, bonding, bridge, vlan (*.tf)
├── dhcp-servers/       # każdy serwer DHCP w osobnym pliku
├── dns-server/         # main.tf z konfiguracją resolvera
└── dns-records/        # mapa statycznych rekordów DNS

Moduły OpenTofu w użyciu

  • routeros-ethernet, routeros-bonding, routeros-bridge, routeros-vlan – warstwa L2/L3 interfejsów.
  • routeros-dhcp-server – sieci, pule, serwery DHCP oraz statyczne leases.
  • routeros-dns – resolver, cache, upstream oraz statyczne dns_records.

Kolejność wdrażania (dlaczego ma znaczenie)

  1. Interfaces: najpierw Ethernet, potem Bonding, Bridge, VLAN – zapewnia zależności L2/L3.
  2. Serwery DHCP: działają na gotowych interfejsach L3, z jasno zdefiniowanymi pulami.
  3. Serwer DNS: centralny resolver + cache, wskazywany przez DHCP.
  4. Rekordy DNS: statyczne wpisy dla usług krytycznych (routery, klastry, proxy).

Przykładowy moduł VLAN

module "vlan_vms_internal" {
  source     = "git@gitlab.rachuna-net.pl:pl.rachuna-net/infrastructure/opentofu/modules/routeros-vlan.git?ref=v1.0.0"
  name       = "vlan-vms-int"
  interface  = "bond-storage"
  vlan_id    = 20
  arp        = "enabled"
  mtu        = 1500
  comment    = "VLAN VMs internal"
}

Dlaczego tak? Każdy element (np. VLAN) żyje w osobnym pliku – można go przetestować, zreviewować i wycofać bez dotykania reszty konfiguracji.

Integracja DHCP ↔ DNS

  • Lease z hostname automatycznie tworzy rekordy A i PTR w resolverze RouterOS.
  • Statyczne rekordy w dns_records zabezpieczają krytyczne hosty (routery, proxmoxy, load balancery).
  • DHCP zawsze wskazuje lokalny DNS, co eliminuje problemy z nazwami, TLS i monitoringiem.

Zasady projektowe, które się sprawdziły

  • Zero konfiguracji w GUI – tylko IaC.
  • Jeden moduł = jedna funkcja; bez „kombajnów” w jednym pliku.
  • Krytyczne hosty zawsze mają statyczne rekordy DNS; DHCP dla urządzeń dynamicznych.
  • Wszystko przez Git: review, audyt, rollback.

Efekt

Projekt iac-mikrotik upraszcza życie przy RouterOS: wgrywam moduły OpenTofu, a router buduje się sam – z kompletnymi interfejsami, DHCP, DNS i statycznymi rekordami. Jeśli coś pójdzie nie tak, rollback to kwestia jednego commita.

Last modified December 19, 2025: docs: Update (72bba37)