adminandClaude Sonnet 5 669e653cf4
Build / build (push) Canceled after 0s
README: IST-Zustand-Analyse dokumentieren
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>
2026-09-15 18:47:19 +02:00
2026-09-11 22:12:31 +02:00

MikroTik Installer

License: MIT Scanned by VirusTotal

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.

Zusammenfassungs-Schritt des Assistenten

Was der Assistent einrichtet

Schritt für Schritt, mit Erklär-Tooltips (ⓘ) bei jedem Fachbegriff:

  1. Verbindung – IP-Adresse, Benutzername, Passwort
  2. Geräte-Erkennung – liest Modell, RouterOS-Version und Schnittstellen aus
  3. 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
  4. Modus wählen – geführter Assistent (Standard) oder Experten-Modus: Letzterer blendet in den folgenden Schritten zusätzliche, technischere RouterOS-Optionen ein (siehe unten)
  5. Internet-Zugang – WAN-Schnittstelle, DHCP oder feste IP, NAT
  6. Heimnetzwerk (DHCP) – Bridge, IP-Bereich, DHCP-Server, DNS
  7. VLANs (optional) – zusätzliche, getrennte Netzwerke (z. B. Gäste, IoT)
  8. WLAN (übersprungen, wenn nicht vorhanden – oder bewusst abwählbar, z. B. bei einem reinen Switch)
  9. Firewall – sichere Basisregeln, optionale Portfreigaben
  10. 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
  11. 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.exe herunterladen 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 SHA256 unter 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 -&gt; SelectedItem -&gt; 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

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.

S
Description
No description provided
Readme MIT
1.1 MiB
0 Stars 1 Watchers 0 Forks
Languages
C# 99.8%
PowerShell 0.2%