Automatyczne zarządzanie RouterOS za pomocą OpenTofu
2 minute read
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 statycznedns_records.
Kolejność wdrażania (dlaczego ma znaczenie)
- Interfaces: najpierw Ethernet, potem Bonding, Bridge, VLAN – zapewnia zależności L2/L3.
- Serwery DHCP: działają na gotowych interfejsach L3, z jasno zdefiniowanymi pulami.
- Serwer DNS: centralny resolver + cache, wskazywany przez DHCP.
- 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
hostnameautomatycznie tworzy rekordy A i PTR w resolverze RouterOS. - Statyczne rekordy w
dns_recordszabezpieczają 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.