Schritt-Liste um "Vorhandene Netzwerke" erweitert (jetzt 11 Schritte), neuen Abschnitt zur Funktion ergänzt, Architektur-Diagramm um den neuen Schritt und ein Nodify/NetworkAnalysisService-Flowdiagramm erweitert, Nodify in "Verwendete Bibliotheken" aufgenommen und die Roadmap-Tabelle um den neuen Milestone ergänzt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
MikroTik Installer
Ein Windows-Programm, mit dem sich MikroTik-Router/-Switches in wenigen, klar geführten Schritten einrichten lassen – auch ohne Netzwerk-Vorkenntnisse. Statt WinBox-Menüs und RouterOS-Fachbegriffen gibt es ein Interview: Verbindung herstellen, ein paar verständliche Fragen beantworten, fertig.
Hinweis: Dies ist ein unabhängiges, privates Open-Source-Projekt ohne jede kommerzielle Absicht. Es steht in keiner Verbindung zu MikroTik und wird nicht von MikroTik unterstützt, gesponsert oder geprüft. Siehe Markenrechte & Haftungsausschluss.
Was der Assistent einrichtet
Schritt für Schritt, mit Erklär-Tooltips (ⓘ) bei jedem Fachbegriff:
- Verbindung – IP-Adresse, Benutzername, Passwort
- Geräte-Erkennung – liest Modell, RouterOS-Version und Schnittstellen aus
- Vorhandene Netzwerke – bei einem Bestandsgerät: anklickbare Grafik der bereits eingerichteten Bridges, VLANs, IP-Adressen, DHCP-Server, Routen und WLANs (siehe unten); bei werksneuen Geräten erscheint nur ein kurzer Hinweis
- Modus wählen – geführter Assistent (Standard) oder Experten-Modus: Letzterer blendet in den folgenden Schritten zusätzliche, technischere RouterOS-Optionen ein (siehe unten)
- Internet-Zugang – WAN-Schnittstelle, DHCP oder feste IP, NAT
- Heimnetzwerk (DHCP) – Bridge, IP-Bereich, DHCP-Server, DNS
- VLANs (optional) – zusätzliche, getrennte Netzwerke (z. B. Gäste, IoT)
- WLAN (übersprungen, wenn nicht vorhanden – oder bewusst abwählbar, z. B. bei einem reinen Switch)
- Firewall – sichere Basisregeln, optionale Portfreigaben
- Zusammenfassung – alle geplanten Änderungen im Klartext, automatisches Backup auf dem Gerät vor dem Anwenden, PDF-Export mit allen Zugangsdaten inkl. WLAN-QR-Code zum Ausdrucken/Aufbewahren
- RouterOS-Update (optional) – prüft auf eine neuere RouterOS-Version und kann sie mit deutlicher Warnung starten
Nichts wird am Gerät verändert, bevor der Nutzer in der Zusammenfassung ausdrücklich auf „Jetzt einrichten“ klickt.
Vorhandene Netzwerke (IST-Zustand-Analyse)
Bei einem bereits konfigurierten Bestandsgerät liest der dritte Schritt automatisch aus, was dort schon eingerichtet ist, und zeichnet es als Diagramm: jeder Knoten ist eine Bridge, ein VLAN, eine IP-Adresse, ein DHCP-Server, ein WLAN oder der Internet-Zugang. Ein Klick auf einen Knoten hebt seinen kompletten Weg („Hops") bis zum Internet-Zugang hervor. Rein informativ — verändert nichts am Gerät und fließt nicht in die vom Assistenten geplante Konfiguration ein. Bei einem werksneuen Gerät ohne bestehende Konfiguration erscheint statt der Grafik nur ein kurzer Hinweis.
Experten-Modus
Wer RouterOS kennt, kann im vierten Schritt den Experten-Modus wählen. Die Schritte 5–9 zeigen dann zusätzlich (Laien-Modus bleibt exakt wie zuvor, Defaults entsprechen dem bisherigen Verhalten):
- Internet-Zugang: DHCP-Standardroute/-DNS an/aus, feste MTU, NAT nur für ein bestimmtes Subnetz
- Heimnetzwerk: DHCP-Lease-Zeit, Domainname, NTP-Server
- VLANs: frei wählbares Adress-Präfix, eigener DNS-Server, Lease-Zeit, „Von Heimnetz isolieren“ (automatische Trennregel)
- WLAN: WPA2/WPA3/gemischt, SSID verstecken, Band/Kanal festlegen
- Firewall: Portfreigabe auf eine Quell-IP beschränken, Portbereiche statt Einzelport, Zugriffe protokollieren, IP-/Subnetz-Sperrliste
Für Nutzer
- Windows 10/11, keine Installation nötig
- Einfach
MikroTik-Installer.exeherunterladen und starten – eine einzelne, eigenständige Datei (~67 MB), kein separates .NET muss installiert werden - Portable: läuft von jedem Ordner/USB-Stick, schreibt nichts in Registry oder AppData
Ist die Datei vertrauenswürdig?
Jede Version wird nicht lokal, sondern öffentlich nachvollziehbar per GitHub Actions direkt aus diesem Quellcode gebaut (siehe .github/workflows/release.yml) – niemand fügt der exe manuell etwas hinzu. Bei jedem Release findest du zusätzlich:
- eine
.sha256-Prüfsumme neben der exe, mit der du die Integrität deines Downloads überprüfen kannst (Get-FileHash MikroTik-Installer.exe -Algorithm SHA256unter PowerShell) - einen VirusTotal-Scan-Link in den Release-Notizen, der die exakt gebaute Datei durch 70+ Antiviren-Engines prüft
Die exe ist nicht mit einem kostenpflichtigen Code-Signing-Zertifikat signiert – Windows SmartScreen zeigt daher beim ersten Start ggf. „Unbekannter Herausgeber" an. Das ist bei kostenlosen Open-Source-Projekten ohne Firmenhintergrund normal und kein Hinweis auf Schadsoftware; über „Weitere Informationen" → „Trotzdem ausführen" lässt sich der Hinweis bestätigen.
Für Entwickler
Voraussetzungen
Bauen & Testen
dotnet build
dotnet test src/MikrotikInstaller.Core.Tests/MikrotikInstaller.Core.Tests.csproj
dotnet run --project src/MikrotikInstaller.App
Release-Build (eine einzelne .exe)
.\build-release.ps1
Erzeugt src/MikrotikInstaller.App/bin/Release/net8.0-windows/win-x64/publish/MikroTik-Installer.exe – self-contained, single-file, ohne .NET-Runtime-Installation beim Nutzer.
Es gibt außerdem einen Gitea-Actions-Workflow (.gitea/workflows/build.yml), der das bei jedem Push automatisch übernimmt – vorausgesetzt, ein passender Runner ist auf der Gitea-Instanz registriert.
Interner Testzugang (nur Debug-Builds)
Im Verbindungs-Schritt aktiviert die Kombination 127.127.127.127 / admin / admin einen komplett simulierten Router (kein echtes Gerät nötig, keine Netzwerkverbindung) – damit lässt sich der gesamte Assistent gefahrlos durchklicken. Dieser Zugang ist per #if DEBUG ausgeschlossen und existiert in veröffentlichten Release-Builds nicht.
Projektstruktur
src/
MikrotikInstaller.App/ WPF-UI (Views, ViewModels, Wizard-Shell)
MikrotikInstaller.Core/ RouterOS-Clients, Konfigurationslogik, PDF-Export
MikrotikInstaller.Core.Tests/ Unit-Tests für Core (xUnit)
Core kapselt die gesamte RouterOS-Kommunikation hinter IRouterOsClient – wahlweise über die REST-API (RouterOS 7+) oder die binäre API (Port 8728/8729, ältere Geräte), mit automatischem Fallback. Jede Konfigurations-Funktion (WAN, LAN, VLAN, WLAN, Firewall) erzeugt sowohl die auszuführenden RouterOS-Befehle als auch eine laienverständliche Klartext-Zusammenfassung.
App ist reines MVVM: Ein generischer Wizard-Shell (MainViewModel) navigiert durch eine Liste von Schritt-ViewModels; Schritte ohne Inhalt für das jeweilige Gerät (z. B. WLAN ohne WLAN-Hardware) werden automatisch übersprungen.
Architektur
flowchart TB
subgraph App["MikrotikInstaller.App (WPF, MVVM)"]
MainVM["MainViewModel<br/>Wizard-Navigation"]
Steps["Step-ViewModels<br/>Connection - DeviceOverview - NetworkAnalysis - ModeSelection -<br/>Wan - Lan - Vlan - Wlan - Firewall - Summary - Update"]
Session["WizardSession<br/>geteilter Zustand über alle Schritte"]
MainVM --> Steps --> Session
end
subgraph Core["MikrotikInstaller.Core"]
Configurators["*Configurator<br/>Wan / Lan / Vlan / Wireless / Firewall<br/>erzeugen ConfigurationAction + Klartext-Zusammenfassung"]
Factory["RouterOsClientFactory<br/>waehlt REST / Binary / Demo"]
IClient(["IRouterOsClient"])
Rest["RestRouterOsClient<br/>RouterOS 7+, Port 443/80"]
Binary["BinaryRouterOsClient<br/>Port 8728/8729"]
Demo["DemoRouterOsClient<br/>nur #if DEBUG, kein echtes Geraet"]
Discovery["DeviceDiscoveryService"]
Backup["RouterBackupService"]
Updates["RouterOsUpdateService"]
Export["SummaryPdfExporter + WifiQrCodeGenerator"]
Factory --> Rest & Binary & Demo
Rest -.-> IClient
Binary -.-> IClient
Demo -.-> IClient
end
Device[("MikroTik-Geraet<br/>RouterOS")]
Session --> Factory
Steps --> Configurators --> IClient
Steps --> Discovery & Backup & Updates & Export
Discovery --> IClient
Backup --> IClient
Updates --> IClient
Rest --> Device
Binary --> Device
Verbindungsaufbau läuft immer über RouterOsClientFactory: REST-API zuerst, bei Fehlschlag Fallback auf die binäre API; nur bei den Test-Zugangsdaten 127.127.127.127 (und nur in Debug-Builds) wird stattdessen der DemoRouterOsClient verwendet. Alle Configurators, DeviceDiscoveryService, RouterBackupService und RouterOsUpdateService sprechen ausschließlich gegen die Abstraktion IRouterOsClient, nie gegen eine konkrete Implementierung.
Der ModeSelectionStepViewModel-Schritt setzt lediglich WizardSession.IsExpertMode (bool). Jeder folgende Step-ViewModel liest dieses Flag als Passthrough-Property; die zugehörige View blendet damit zusätzliche Eingabefelder ein oder aus (Visibility-Binding auf denselben BoolToVisibilityConverter, der auch sonst im Wizard verwendet wird). Es gibt keine zweite Steps-Liste und keinen separaten Codepfad — bei nicht gesetzten Experten-Feldern (Default) erzeugen die Configurators exakt dieselben RouterOS-Befehle wie im reinen Laien-Modus.
IST-Zustand-Analyse
flowchart LR
Service["NetworkAnalysisService<br/>Core/Analysis"]
Facts["Existing*-Records<br/>Bridge-Ports, VLANs, IP-Adressen,<br/>DHCP-Server, Routen, WLANs"]
StepVM["NetworkAnalysisStepViewModel<br/>App"]
Graph["TopologyNodeViewModel / TopologyConnectionViewModel<br/>Spalten-Layout, IsHighlighted"]
Editor["nodify:NodifyEditor<br/>Klick -> SelectedItem -> Pfad-Hervorhebung"]
Service --> Facts --> StepVM --> Graph --> Editor
NetworkAnalysisService fragt (fehlertolerant pro Endpunkt) /interface/bridge/port, /interface/vlan, /ip/address, /ip/pool, /ip/dhcp-server, /ip/route und /interface/wireless ab und liefert reine Fakten — keine Positions-/Grafik-Konzepte, Core bleibt UI-frei. Der Step-ViewModel (App) baut daraus einen Baum: jeder Knoten hat höchstens einen ParentNodeId (Bridge-Port → Bridge, VLAN → Eltern-Interface, IP/DHCP → ihr Interface, WAN-Interface → synthetischer „Internet"-Knoten anhand der Standardroute). Das macht Pfad-Hervorhebung trivial (Eltern-Kette hochlaufen) und ein eigenes Auto-Layout überflüssig (Spalte = Tiefe im Baum). Die Grafik selbst nutzt Nodify (reines, abhängigkeitsfreies WPF-Steuerelement für MVVM-Node-Editoren) — Klicks laufen über dessen eingebautes SelectedItem-Binding, nicht über eigene Maus-Behandlung.
Datenstruktur
Die wichtigsten Records, die während eines Assistenten-Durchlaufs entstehen und durch WizardSession zusammengehalten werden:
classDiagram
class WizardSession {
+IRouterOsClient Client
+RouterDevice Device
+bool IsExpertMode
+string WanInterfaceName
+string LanBridgeName
+WanSettings WanSettings
+LanSettings LanSettings
+VlanDefinition[] VlanDefinitions
+WirelessSettings WirelessSettings
+FirewallSettings FirewallSettings
+ConfigurationAction[] WanActions
+ConfigurationAction[] LanActions
+ConfigurationAction[] VlanActions
+ConfigurationAction[] WirelessActions
+ConfigurationAction[] FirewallActions
+RouterOsUpdateInfo UpdateInfo
}
class RouterOsCredentials {
<<record>>
+string Host
+string Username
+string Password
+int? RestPort
+int? BinaryPort
+bool UseEncryption
+bool AllowUntrustedCertificate
}
class RouterDevice {
<<record>>
+string IdentityName
+string BoardModel
+string RouterOsVersion
+string Architecture
+bool HasWireless
+InterfaceInfo[] Interfaces
}
class InterfaceInfo {
<<record>>
+string Name
+InterfaceKind Kind
+bool IsRunning
+bool IsDisabled
+string? Comment
}
class InterfaceKind {
<<enum>>
Ethernet
Bridge
Vlan
Wireless
Other
}
class WanSettings {
<<record>>
+string InterfaceName
+WanAddressMode Mode
+string? StaticAddressCidr
+string? StaticGateway
+bool UseDhcpDefaultRoute
+bool UseDhcpDns
+int? Mtu
+string? NatSourceAddress
}
class LanSettings {
<<record>>
+string BridgeName
+string[] MemberInterfaces
+string RouterAddressCidr
+string DhcpPoolStart
+string DhcpPoolEnd
+string PrimaryDnsServer
+string? SecondaryDnsServer
+string? DhcpLeaseTime
+string? DomainName
+string? NtpServer
}
class VlanDefinition {
<<record>>
+int VlanId
+string Name
+string RouterAddressCidr
+string DhcpPoolStart
+string DhcpPoolEnd
+bool IsolateFromLan
+string? DnsServerOverride
+string? DhcpLeaseTime
}
class WirelessSettings {
<<record>>
+string InterfaceName
+string Ssid
+string Password
+WirelessSecurityMode SecurityMode
+bool HideSsid
+string? Band
}
class WirelessSecurityMode {
<<enum>>
Wpa2
Wpa3
Wpa2Wpa3Mixed
}
class FirewallSettings {
<<record>>
+string WanInterfaceName
+string LanBridgeName
+PortForward[] PortForwards
+string[]? BlockedAddresses
}
class PortForward {
<<record>>
+string Name
+string Protocol
+int ExternalPort
+string TargetAddress
+int InternalPort
+string? AllowedSourceAddress
+bool LogRule
+int? ExternalPortRangeEnd
+int? InternalPortRangeEnd
}
class ConfigurationAction {
<<record>>
+string Description
+ApplyAsync(IRouterOsClient, CancellationToken) Task
}
class RouterOsUpdateInfo {
<<record>>
+bool IsCheckSuccessful
+string InstalledVersion
+string? LatestVersion
+bool IsUpdateAvailable
}
class SummaryDocumentData {
<<record>>
+string DeviceIdentityName
+string DeviceModel
+WanSettings? Wan
+LanSettings? Lan
+VlanDefinition[] Vlans
+WirelessSettings? Wireless
+FirewallSettings? Firewall
+string? BackupName
}
WizardSession --> RouterDevice
WizardSession --> WanSettings
WizardSession --> LanSettings
WizardSession --> VlanDefinition
WizardSession --> WirelessSettings
WizardSession --> FirewallSettings
WizardSession --> ConfigurationAction
WizardSession --> RouterOsUpdateInfo
RouterDevice --> InterfaceInfo
InterfaceInfo --> InterfaceKind
WirelessSettings --> WirelessSecurityMode
FirewallSettings --> PortForward
SummaryDocumentData --> WanSettings
SummaryDocumentData --> LanSettings
SummaryDocumentData --> VlanDefinition
SummaryDocumentData --> WirelessSettings
SummaryDocumentData --> FirewallSettings
WanSettings, LanSettings, VlanDefinition[], WirelessSettings und FirewallSettings dienen doppelt: als Eingabe für die *Configurator-Klassen (die daraus ConfigurationActions bauen) und – gebündelt in SummaryDocumentData – als Grundlage für den PDF-Export.
Verwendete Bibliotheken
- WPF-UI – modernes Fluent-Design für WPF
- CommunityToolkit.Mvvm – MVVM-Grundgerüst
- Nodify – anklickbare Netzwerk-Grafik im Schritt „Vorhandene Netzwerke"
- PDFsharp – PDF-Erzeugung
- QRCoder – WLAN-QR-Code
Die MikroTik-Markenfarbe (#009245) wurde aus der offiziellen Website übernommen; das App-Icon ist ein eigenes, neutrales Netzwerk-Symbol (kein MikroTik-Logo).
Roadmap
Die Weiterentwicklung wird als Milestones mit zugehörigen Issues im internen Gitea-Dev-Repository getrackt (nicht auf GitHub, siehe Für Entwickler zur Remote-Aufteilung):
| Milestone | Fokus |
|---|---|
| v1.0 – Realgerät-Validierung | Kompletter Wizard-Durchlauf inkl. „Jetzt einrichten" (RouterOS-Befehle, Backup, PDF-Export, Update-Prüfung) gegen ein echtes physisches Gerät verifizieren – größter offener Validierungs-Gap |
| v1.1 – Release-Housekeeping | v1.0.0-Tag-Strategie klären, Copyright-Name in LICENSE bestätigen, Trennung Gitea (laufendes Dev) / GitHub (nur Releases) wiederherstellen |
| v1.2 – Eingabevalidierung | Rest von Phase 7: Live-Fehlermeldungen bei ungültigen Eingaben (z. B. IP-/Subnetz-Format) direkt im jeweiligen Wizard-Schritt |
| v1.3 – SFTP-Backup-Download | Backup-Download aufs PC per SFTP nachrüsten (bisher liegt das Backup nur auf dem Gerät selbst) |
| IST-Zustand-Analyse | Route-zu-Interface-Zuordnung und Gesamt-Layout der Netzwerk-Grafik gegen ein echtes Bestandsgerät verifizieren (Route→Interface-Auflösung ist derzeit best-effort, RouterOS-versionsabhängig) |
| CI/CD – Gitea-Actions-Runner | Runner registrieren und .gitea/workflows/build.yml erstmals scharf testen |
Lizenz
Dieses Projekt steht unter der MIT-Lizenz. Der Quellcode darf frei verwendet, verändert und weiterverbreitet werden – auch in eigenen (auch kommerziellen) Projekten –, solange der Lizenz- und Copyright-Hinweis erhalten bleibt. Die Software wird ohne jede Gewährleistung bereitgestellt („as is").
Markenrechte & Haftungsausschluss
- Kein offizielles MikroTik-Produkt. Dieses Projekt ist eine unabhängige, private Entwicklung und steht in keiner Verbindung zu MikroTikls SIA. Es wird nicht von MikroTik entwickelt, geprüft, unterstützt, gesponsert oder in irgendeiner Form autorisiert.
- Markenrechte bleiben unangetastet. „MikroTik", „RouterOS", „WinBox" und alle weiteren genannten Produkt- und Markennamen sind Marken bzw. eingetragene Marken von MikroTikls SIA. Sie werden hier ausschließlich zur sachlichen Beschreibung der Kompatibilität verwendet (nominativer Gebrauch), nicht um eine Verbindung, Zusammenarbeit oder Billigung durch MikroTik zu suggerieren. Das App-Icon ist ein eigens erstelltes, neutrales Symbol – kein MikroTik-Logo.
- Nicht-kommerzielles Hobbyprojekt. Der Autor verfolgt mit diesem Projekt keinerlei finanzielle Absicht. Es wird kostenlos und ohne Gewinnerzielungsabsicht als Open Source zur Verfügung gestellt, in der Hoffnung, dass es anderen Nutzern beim Einrichten ihrer Geräte hilft.
- Nutzung auf eigene Verantwortung. Wer den Installer einsetzt, ändert Konfigurationen auf eigenen Netzwerkgeräten in eigener Verantwortung. Es wird keine Haftung für Schäden, Datenverlust oder Fehlkonfigurationen übernommen, die durch die Nutzung dieser Software entstehen (siehe auch Gewährleistungsausschluss in der LICENSE).
Sollte MikroTikls SIA Einwände gegen Inhalte dieses Repositories haben, bitte über die Kontaktmöglichkeiten dieses GitHub-Profils melden – entsprechende Inhalte werden umgehend angepasst oder entfernt.
