Anleitung: FlexIPs mittels Mikrotik RouterOS (CHR) über ein Interface verteilen (auch mehrere Internetanschlüsse!)

Folgendes wird benötigt:

  • Mikrotik CHR mit P1/P10 Lizenz oder Mikrotik Router mit RouterOS

Solltest du mehrere Internetanschlüsse besitzen, benötigst du zusätzlich folgendes:

  • OpenMPTCPRouter
  • KVM VPS (am besten von noez für niedrige Latenz zum GRE-Tunnel)

Solltest du keinen physischen Router von Mikrotik besitzen, musst du zuerst auf deinem Hypervisor einen Mikrotik CHR installieren.
Ich kann folgendes Tutorial empfehlen: https://www.youtube.com/watch?v=WR2j0aXUfj4

Solltest du Verbindungen bis 1G haben wollen, benötigst du eine P1 Lizenz für den CHR.
Du kannst auch 10G Verbindungen verwenden, dafür benötigst du aber die P10 Lizenz.
Die Lizenz spiegelt immer den maximalen Throughput pro Interface wieder.
Testen kannst du ohne Lizenz, da ist aber der Throughput bis auf 1Mbit limitiert.
Ich würde dir empfehlen zuerst ohne Lizenz fortzufahren, da du bei Fehlern den Router einfach zurücksetzen kannst.

Folgendes Tutorial kann ich dir für OpenMPTCPRouter empfehlen, wenn du mehrere Internetanschlüsse besitzt: https://www.youtube.com/watch?v=mYYoIDCWszo

Diese Software installierst du auf einem VPS und auf einer separaten VM, damit du die IP von dem VPS erhältst.

OpenMPTCPRouter kümmert sich dann um den rest, du hinterlegst nur deine Internetanschlüsse und schließt den CHR an die LAN-Bridge an.
Falls du eine dynamische, öffentliche IP hast, musst du deine IP immer aktuell halten.
Nutze dafür am besten Crontab auf einer VM mit dem Script von Noez.

Wenn du keine Internetabbrüche durch wechselnde IPs haben möchtest die durch die Unterbrechung zum Tunnel entstehen, würde ich dir empfehlen ebenfalls OpenMPTCPRouter zu verwenden, da es auch mit einer WAN-Schnittstelle funktioniert.

Für den Tunnel ist es grundlegend erstmal egal ob du von deinen Router als Modem verwendest oder ob du auf dem LAN-Interface sitzt. Du brauchst bei noez ausschließlich deine öffentliche IP hinterlegen.

Solltest du keine öffentlich erreichbare IP auf deinem Router haben → ab zu OpenMPTCPRouter.
Sobald der CHR installiert ist, musst du zunächst 2 Interfaces hinterlegt haben:
→ ether1 ist der Weg nach draußen
→ ether2 ist das Interface wo die IPs am Ende landen.

Die Interfaces können bei dir anders heißen, bei Proxmox ist es aber Grundlegen gleich.

Ich würde dir empfehlen eine VM mit Desktop-Enviroment aufzusetzen und an beiden Interfaces anzuschließen (am besten Windows).
Lade dir WinBox herunter: MikroTik Routers and Wireless - Software
Das ist die Software von Mikrotik, welche für RouterOS entwickelt wurde um den Router zu verwalten
Melde dich nach Ausführung der .exe an deinem Router an.

Gehe zu Interfaces und wähle den Tab „Interface“.
Klicke auf ether2 und stelle die Option „ARP“ auf „proxy-arp“ um.

Klicke auf Apply und schließe mit OK.
Damit ist der erste Schritt geschafft.

Öffne nun ein Terminal indem du links auf den Button „New Terminal“ in der Liste klickst.
Gebe nun folgende Befehle ein (Platzhalter vorher ersetzen durch Informationen von deinem GRE-Tunnel, auch <> entfernen!):

/interface gre add comment=„noez.de FlexIP GRE“ disabled=no local-address=0.0.0.0 mtu=1476 name=noezgre1 remote-address=<„Einrichtungsdaten“-> IP von „(…) remote XXX.XXX.XXX.XXX ttl 225“>
/routing table add name=routing-noezgre1 fib /ip route add dst-address=<„Dein GRE-Tunnel“ → Internes Subnet> gateway=noezgre1
/ip route add dst-address=0.0.0.0/0 gateway=<„Dein GRE-Tunnel“ → Internes Gateway mit>/30 routing-table=routing-noezgre1
/ip address add address=<„Dein GRE-Tunnel“ → Interne Client-IP>/30 interface=noezgre1

Mit dem ersten Befehl wird die Verbindung zum GRE-Tunnel aufgebaut.
Mit dem zweiten Befehl wird ein Routing-Table angelegt, welcher später die IPs beinhaltet.
Mit dem dritten Befehl wird festgelegt, dass alle IPs auf dem Routing-Table später zu dem Gateway die Verbindung aufbauen, wenn eine IP erreicht werden soll.
Mit dem vierten Befehl wird auf dem GRE-Tunnel die lokale IP festgelegt.

Der Tunnel sollte jetzt erreichbar sein - nutze zum testen den „ping “.

Sollte ein Fehler auftreten würde ich dir empfehlen die IP des Empfängers des GRE-Tunnels bei noez zu ändern und von einer anderen IP die Verbindung kurz aufzubauen. Schalte währenddessen das Interface ab und ändere nach ca. 1-2 Minuten die IP zurück auf deine öffentliche IP oder die deines VPS.
Wenn es dann noch immer nicht geht, prüfe, ob du eine Internetverbindung hast.
Im Zweifelsfall: CHR zurücksetzen und nochmal anfangen :slight_smile: (hilft tatsächlich)

Nun müssen wir die IPs hinzufügen.
Wir opfern eine IP als Gateway, da dies die einfachste Möglichkeit ist den Traffic zu Routen.
Du solltest es auch mit der ersten oder letzten IP im Subnetz versuchen können (.1 oder .254), was ich aber nicht getestet habe.

Die IPs müssen alle einzeln hinzugefügt werden.
Nutze dafür folgende Befehle:

/routing rule add dst-address=0.0.0.0/0 action=lookup-only-in-table table=routing-noezgre1 interface=ether2 src-address=< IP >/32
/ip route add dst-address=< IP >/32 gateway=ether2

Mit dem ersten Befehl wird das Ziel gesetzt, bei Anfragen an alle IPs das Gateway des Routing Tables zu benutzen, welches zuvor festgelegt wurde.
Der zweite Befehl setzt das Gateway für die IP auf das Interface wo die IPs ausgegeben werden sollen.

Die IP die du als Gateway nutzen möchtest, musst du ebenfalls mit den Befehlen versehen.
Lege die als Gateway zu nutzende IP folgend fest:

/ip address add address=< IP >/32 interface=ether2

Damit sollte deine IPs nach Einstellung der Clients erreichbar sein.

Vergebe deine IPs mit /32 an die Clients und gib das zuletzt festgelegte Interface als Gateway an.

In meinem Fall habe ich es getestet mit einem Kabel-Anschluss und 2x DSL.
Die Latenzen halten sich zwischen 28ms und 38ms von Endbenutzer zu Server mit vergebener IP. Bei hoher Auslastung steigt die Latenz pro IP auf bis zu 60ms, erholt sich aber i.d.R. wieder schnell.
Die CHR Lizenz für P1 habe ich bei mikrotik-store.eu gekauft.

Hosted by suec//dacor GmbH (Frankfurt) [143.90 km]: 37.329 ms
Testing download speed…
Download: 484.44 Mbit/s
Testing upload speed…
Upload: 43.51 Mbit/s

Testing download speed…
Download: 381.19 Mbit/s
Testing upload speed…
Upload: 48.35 Mbit/s

Getestet mit einem Internet Anschluss, kann je nach Standort und Auslastung variieren.

Zeit zur Erarbeitung dieser Lösung: ca. 18 Stunden bei 0,0 Kenntnisstand in Sachen Routing.

Solltet ihr die OpenMPTCPRouter VM neustarten, könnte es sein, dass ihr ca. 15-30 Minuten warten müsst, damit die ehemalige Verbindung abbricht, da das einfache deaktivieren des GRE-Tunnels vor dem Neustart nicht immer hilft.

Alternativ könnt ihr auch den GRE-Tunnel nach einem neustart abschalten, manuell bei Noez die IP kurz ändern, 1-2 Minuten warten und danach wieder zurücksetzen.
Nach 30 Sekunden könnt ihr den GRE-Tunnel wieder verbinden.

Es kann übrigens in dem Fall auch passieren, wenn ihr CHR selber neustartet.

Bei Tests ohne OpenMPTCPRouter sollte ein einfaches deaktivieren, kurz waren und wieder aktivieren reichen, um die Verbindung wiederherzustellen.

Es kann auch passieren, dass nach Konfiguration von CHR auf dem gleichen Netz wo die FlexIPs ausgegeben werden ebenfalls der DHCP-Server vom Internetanschluss durchkommt. Sollte dies passieren, empfehle ich in „IP → Addresses“ eine statische IP für das Interface festzulegen und danach den DHCP-Server zu deaktivieren.

Alternativ könnt ihr auch folgenden Befehl in CHR eingeben, dann sollte der DHCP nicht mehr durch kommen:

/ip firewall filter add chain=forward action=drop in-interface=ether1 out-interface=ether2 protocol=udp dst-port=67,68

Der Befehl ist bis jetzt ungetestet, sollte aber funktonieren.

Gerade festgestellt: Bei Verwendung mit OpenMPTCPRouter kann nach einiger Zeit die Verbindung langsamer werden.

Bitte darauf achten, dass in den Hardware-Optionen der VM der CPU-Typ „Host“ ausgewählt ist und zudem falls unterstützt AES auf + gesetzt ist.
Sollte das bereits so sein, könnte ein Neustart des VPS helfen.