Towalink Standortvernetzung
März 2020
Motivation
Unter dem Begriff "SD-WAN" sind eine Menge Lösungen auf den Markt gekommen, die unter Nutzung von VPNs eine over-the-top Standortvernetzung ermöglichen. Mir schwebte jedoch eine freie OpenSource-Lösung vor, die auf aktuellen Technologien wie WireGuard basiert.
Beschreibung
Kern der Lösung sind WireGuard, um sichere Punkt-zu-Punkt-Verbindungen zwischen Standorten schalten, und BGP als dynamisches Routingprotokoll zur Wegefindung. Ohne weitere Konfiguration werden die einzelnen Standorte vollvermascht verbunden, es sind jedoch auch beliebige andere Topologien möglich. Eine flexible, aber auch geradlinige Lösung, die zentral vom sogenannten "Towalink Controller" administriert werden kann.
Implementierung
Der Towalink Controller, über den die Lösung zentral verwaltet wird, wird unter Nutzung von Ansible installiert. Über das "Towalink Manager"-Tool (in Python implementiert) können Standorte und "Nodes" verwaltet werden. Die Konfiguration ist hierarchisch und versioniert.
Neue "Nodes" werden mit einem generischen Bootstrap-Skript (in Bash geschrieben) vorbereitet. Dieses verbindet sich mit dem Controller und ruft von dort die Konfiguration ab. Die weitere Konfiguration erfolgt durch den Controller über ssh (rsync und Ansible) über eine WireGuard-Managementtunnel, ein NodeConfig-Tool (in Python) auf dem jeweigen "Node" aktiviert erfolgte Konfigurationsänderungen.
Auf den "Nodes" läuft ein Bird-BGP-Daemon, der für IPv4 und IPv6 konfiguriert ist. Damit werden die aktiven WireGuard-Verbindungen zu anderen "Nodes" für die Standortvernetzung nutzbar und immer die optimalen Pfade zum Ziel verwendet. Verbindungsausfälle werden unter Nutzung von BFD schnell erkannt und auf alternative Wege ausgewichen.
Detaillierte Dokumentation findet sich in der unten referenzierten Read-the-Docs-Anleitung.
Referenzen
- Anleitungsseite von Towalink (bei "Read the Docs")
- GitHub-Repository für das Towalink-Controller-Installationsskript
- GitHub-Repository für den Towalink Manager (für den Towalink Controller)
- GitHub-Repository für das Bootstrap-Skript für Towalink-Nodes
- GitHub-Repository für den Konfigurationsmanager für Towalink-Nodes
- Python-Paket für das Towalink-Controller-Installationsskript
- Python-Paket für den Konfigurationsmanager für Towalink-Nodes