Homelab [Teil 2A] - Variante 1: IPv4 und IPv6 via Tunnel von noez.de und tunnelbroker.net auf RouterOS

Veröffentlicht: / Letztes Update:
Dieser Teil 2A der Anleitungen befasst sich mit der Konfiguration eines Routers auf Basis von RouterOS. Im Teil 2B zeige ich Euch, wie Ihr die IPv4 Adressen von noez.de mit einem Raspberry PI auf locale IP Adressen 1:1 leiten könnt.

Das Homelab Projekt - Teil 2

Den Luxus einer festen IP Adresse bekommt man in seinem Homelab nicht so einfach. Ausser man hat einen Internetzugang für Geschäftskunden, bei dem dies optional gebucht werden kann. Daher muss ein Workaround her, damit wir unsere/n Server im Homelab mit statischen IP Adressen an binden können.

Diese Anleitung ist für RouterOS, pfSense und OPNSense anwendbar! Grundlegend ist es egal welches Betriebssystem Ihr nutzt. Die unterschiede sind bis auf die benötigten Ressourcen relativ gering. Jedoch bietet RouterOS einige Optimierungen, gerade wenn man Mikrotik Hardware verwendet.

Disclamer

Die Anleitung wurde mit größter Sorgfalt erstellt und kann in verschiedenen Versionen der Betriebssysteme zu unterschiedlichen Verhalten führen. Keine Haftung für Schäden, sowie keine Garantie oder Gewährleistung auf Korrektheit oder Vollständigkeit!

Die Verwendung dieser Anleitung erfolgt auf eigene Gefahr!

Der Aufbau

Wir nutzen einen Router, der uns zwei Tunnel aufbaut.Einen GRE Tunnel zu noez.de für IPv4 Adressen (Produkt: FlexIP) und einen 6in4 Tunnel zu tunnelbroker.net. So bekommen wir von noez.de eine kleine Anzahl an IPv4 Adressen und von tunnelbroker.net ein /64er IPv6-Präfix (Optional zusätzlich ein /48er Präfix). Diese IP-Adressen können wir dann inklusive reverse DNS für unsere/n Server nutzen.

In meinem Fall nutze ich als Router Betriebssystem "RouterOS", da dies etwas effizienter als pfSense usw. arbeitet und deutlich mehr Konfigurationsmöglichkeiten hat. Zudem kann man sich zu RouterOS noch verbinden, wenn man das IP Setup zerschossen hat, da es die Mglichkeit bietet, mit dem Tool Winbox auf die Konfiguration über die MAC Adresse zuzugreifen. -- Und weil ich als Hardware ein RouterBOARD von Mikrotik habe und dies zudem vom Energiebedarf sehr sparsam ist.

In meinem Fall ist die Schnittselle ether1 meiné Uplink Schnittstelle, die am Router angeschlossen ist und die Schnittstellen ether7 und ether8 sind in einer Bridge mit der Bezeichnung "svr-bridge" zusammen gefasst. Alle Parameter, die in den gezeigten Befehlen von Euch geändert werden müssen, habe ich blau gefärbt. In meinem Beispiel nutze ich die beiden Schnittstellen ether7 und ether8 als Bridge, da ich mein Servernetzwerk zu einem späteren Zeitpunkt in zwei einzelne Segmente teilen möchte. Sodass ich später ein Segment zum Basteln habe und ein Segment in dem die Server und Systeme von meinem Hofnet und der Stall- bzw. Weideüberwachung laufen.

Wenn Ihr nur einen LAN Port verwenden möchtet, müsst Ihr in den Befehlen einfach nur das Interface "svr-bridge" durch Euer Interface ersetzen, welches zu Euren Servern führt. (z.B. eth3)

RouterOS

Bei den RouterBOARD's von Mikrotik ist RouterOS vorinstalliert . Auf selbst zusammen gestellter Hardware lässt es sich aber auch Installieren.
RouterOS könnt Ihr unter https://mikrotik.com/download kostenlos herunterladen.

Nach der Installation sind alle Funktionen für 24 Stunden vollständig freigeschaltet. Danach benötigt Ihr mindestens eine Level 1 Lizenz, welche Ihr nach einer kurzen Registrierung auf der Homepage von Mikrotik kostenlos generieren könnt. Ich selbst nutze eine Lizenz im Level 5. Aber die kostenlose Testlizenz reicht für die meisten Anwendungen. Die Lizenzen sind Hardware gebunden und werde auf eine individuelle Hardware ID registriert. Diese kann man aber auch ändern lassen.

DHCP und DHCPv6

In dieser Anleitung weisen wir keine IPv4 Adressen von unseren FlexIP's via DHCP zu, sondern alle Geräte erhalten auf der Bridge "svr-bridge" eine IPv4 Adresse aus dem internen Subnetz 10.250.0.0/24 zu, welche via NAT auf das Internet zugreifen können und auch intern erreichbar sind. Die FlexIP's weisen auf jedem Geräte manuell zu. (Wir wollen die IP's ja nicht verschwenden!) IPv4 lassen wir aus unserem von tunnelbroker.net zugewiesenen /64er IPv6 Präfix in kleineren /68 Präfixen zuteilen. Alternativ kann man sich auch ein /48er Präfix zuteilen lassen und diesen dann in kleineren /64er Präfixen verteilen lassen.

Die Einrichtung der DHCP Server und des NAT erfolgt weiter unten in der Anleitung.

Dynamische IP's mit GRE und 6in4 Tunnel

Da die Tunnel nur funktionieren, solange der jeweilige Endpunkt auch die IP des anderen kennt, müssen wir jedes IP Update an die API der Tunnelanbieter weitergeben. Hierzu habe ich bereits eine Anleitung geschrieben, wie wir dies in RouterOS umsetzen können.
Die Anleitung ist >HIER< zu finden.

Da wir einen Internetzugang mit dynamischen Adressen verwenden, müssten wir bei allen Tunneln als "local-address" die Adresse "0.0.0.0" angeben!

Aber fangen wir an!

Der GRE Tunnel für FlexIP's von noez.de

Der GRE Tunnel von noez.de mit den FlexIP's ist eigentlich noch als Beta-Test anzusehen, da es immer mal wieder kleiner Ausfälle gibt und aktuell nicht für productive oder geschäftliche Systeme genutzt werden sollte. Aber für das Homelab reicht es.

Als Erstes müssen wir natürlich ein Tunnel Interface erstellen, welches ich in meinem Fall "neozgre1" benenne. Als "remote-address" verwendet Ihr die im Control Panel in dem Einrichtungsblock hinter "remote" gezeigte IP innerhalber der dortigen Befehle. In meinem Fall ist dies die IP 5.230.205.35:

/interface gre add comment="noez.de FlexIP GRE" disabled=no local-address=0.0.0.0 mtu=1476 name=noezgre1 remote-address=xxx.xxx.xxx.xxx

Als Zweites legen wir eine Routingtabelle mit dem Namen "routing-noezgre1" an:

/routing table add name=routing-noezgre1 fib

Die Routingtabelle ist schonmal angelegt und wir richten die Route für das Tunnel Subnetz ein. Trag beim Parameter ""dst-address" das unter "Internes Subnet" genannte IP Netz ein:

/ip route add dst-address=x.x.x.x/30 gateway=noezgre1

Dann richten wir das default Gateway für die Routingtabelle ein, als Gateway tragt Ihr die unter "Internes Gateway" genannte IP an:

/ip route add dst-address=0.0.0.0/0 gateway=xxx.xxx.xxx.xxx routing-table=routing-noezgre1

Danach müssen wir für jede einzelne IP eine ausgehende Route anlegen, dessen Pakete über unserer Server Bridge "svr-bridge" reinkommen und in den Tunnel sollen.
Wenn wir die FlexIP's nicht als /32er Netz erhalten, sondern z.B. als /27er, reicht es wenn wir eine Regel mit der Netzwerkadresse und der jeweiligen Netzmaske angeben:

/routing rule add dst-address=0.0.0.0/0 action=lookup-only-in-table table=routing-noezgre1 interface=svr-bridge src-address=xxx.xxx.xxx.xxx/32

Jetzt benötigen wir natürlich auch eine Route in die andere Richtung vom Tunnel zu unserem Servernetzwerk auf der Bridge: (Genau wie bei der ausgehenden Regel als einzelne IP's oder als komplettes Netz)

/ip route add dst-address=xxx.xxx.xxx.xxx/32 gateway=svr-bridge

Nun weisen wir dem Tunnel Interface die unter "Interne Client-IP" genannte IP-Adresse zu. Wichtig ist, dass dieses /30 IP Netz nicht bereits in Eurem Netzwerk vorkommt bzw. innerhalb Eurer localen IP Netze liegen darf, da es sonst zu Problemen mit dem Tunnel kommt.:

/ip address add address=xxx.xxx.xxx.xxx/30 interface=noezgre1

Jetzt fehlen noch die Routen für die FlexIP's zum Bridge Interface, damit die Pakete aus dem Tunnel wiessen, wo die IP's zu finden sind. Dies müsste Ihr wieder für jede IP einzeln anlegen oder für Euer IP Netz, wenn Ihr ein zugewiesen bekommen habt und die IP's nicht als /32 übergeben werden:

/ip route add dst-address=xxx.xxx.xxx.xxx/32 gateway=svr-bridge

Den Servern auf unserer Bridge können wir nun die FlexIP's als /32er zuweisen. Als Gateway die in "Internes Gateway" hinterlegte IP. In manchen Fällen gibt es aber beim Gateway Probleme, sodass wir dem Bridge Interface eine IP unserer FlexIP's zuweisen müssen und diese dann als Gateway angeben müssen. Dazu geben wir einfach den folgenden Befehl ein:

/ip address add address=xxx.xxx.xxx.xxx/32 interface=svr-bridge

Jetzt ist der Tunnel für unsere IPv4 Adressen eingerichtet.

Der 6in4 Tunnel für IPv6 von tunnelbroker.net

Die Einrichtung von IPv6 ist relativ einfach, da IPv6 viele Funktionen integriert hat, damit die Daten ihren Weg ohne mühselige Konfiguration finden, die bei IPv4 trotz Implementierung nicht immer zuverlässig funktionieren.

Wir legen natürlich erst wieder einen einen neuen Tunnel an, dieser trägt den Namen "sithenet1". Hier tragt Ihr hinter "remote-address=" die "Server IPv4 Address:" ein:

/interface 6to4 add comment="HE IPv6 Tunnelbroker" disabled=no local-address=0.0.0.0 mtu=1280 name=sithenet1 remote-address=xxx.xxx.xxx.xxx

Damit die IPv6 Pakete auch die richtige Route nehmen, legen wir eine IPv6 Route zur "Server IPv6 Address" als Gateway an:

/ipv6 route add comment="HE IPv6 Gateway" disabled=no distance=1 dst-address=2000::/3 gateway=2001:470:xx:xxx::1 scope=30 target-scope=10

Dem Tunnelinterface müssen wir die als "Client IPv6 Address" bezeichnete Endpunktadresse zuweisen:

/ipv6 address add address=2001:470:xx:xxx::2/64 advertise=no disabled=no eui-64=no interface=sithenet1

Jetzt weisen wir unserem Netzwerkinterface, welches zu den Servern führt (Bridge svr-bridge), eine Adresse aus unserem /64er Präfix zu (ohne Netzmaske), welches unter "Routed /64" genannt wird:

/ipv6 address add address=2001:470:xx:xxxx::/64 interface=svr-bridge advertise=yes

Nun aktivieren wir noch die Bekanntgabe der DNS via Network Discovery:

/ipv6 nd set [ find default=yes ] advertise-dns=yes

Und legen auch gleich die DNS für IPv6 fest. In diesem Beispiel nutzen wir die DNS von he.net, Cloudflare und Google:

/ip dns set allow-remote-requests=yes servers=2001:470:20::2,2606:4700:4700::1111,2001:4860:4860::8888,2001:470:20::2,2001:4860:4860::8844

Jetzt sind wir mit dem Tunnel für die IPv6 Adressen fertig. Ihr könnt Euren Servern nun IPv6 Adressen aus dem unter "Routed /64" genannten IPv6 Prafix zuweisen. Wenn Ihr Euch sogar ein zusätzliches /48er Präfix zugewiesen bekommen habt, müsst Ihr zusätzlich folgende Befehle für das "Routed /48" ausführen:

/ipv6 address add address=2001:470:xxxx::/48 interface=svr-bridge advertise=yes

Als Gateway müsst Ihr auf Euren Server/n dann die im Control Panel genannte "Server IPv6 Address" angeben.

Reverse DNS

Die PTR Records oder auch reverseDNS werden benötigt, um die IP-Adresse einem festen Hostnamen zuzuweisen. Dies ist für einige Serverdienste zwingend notwendig, damit diese optimal genutzt werden können. (z. B. Mailserver)

Reverse DNS für die IPv4 Adressen von noez.de

Im Control Panel von noez.de klickt Ihr zur die Verwaltung der PTR Recordsim linken Menü auf "Werkzeuge" und dann auf "PTR/RDNS". Dort könnt Ihr dann Eure Hostnamen im Feld "rDNS Entry" der jeweiligen IP Adresse eintragen.

Reverse DNS für die IPv6 Adressen von tunnelbroker.net:

Um reverse DNS für Eure IPv6 Adressen zu verwenden, müsst Ihr im Control Panel von Tunnelbroker.net auf der Seite "Tunnel Details" runterscrollen zum Punkt "rDNS Delegations" und klickt dort auf den Textlink "Delegate to dns.he.net" und wartet bis dies gespeichert ist.

Danach könnt Ihr Euch unter dns.he.net mit Euren Tunnelbroker Zugangsdaten einloggen und den FreeDNS Service von he.net nutzen. Eure delegierten IPv6 Präfixe findet Ihr dann bereits dort im Control Panel und könnt die PTR Records setzen.

DHCP und DHCPv6 Einrichten

DHCP (IPv4) / IPv4 NAT Setup:

Für IPv4 verwenden wir einen DHCP Server mit dem IP-Range 10.250.0.100 - 10.250.0.250, das Bridge-Interface "svr-bridge" bekommt die IP 10.250.0.01 zugewiesen, welche als Gateway dient.

Wir legen den IPv4 Adresspool an:

/ip pool add name=poolv4-svr-bridge1 ranges=10.250.0.100-10.250.0.250

Der DHCP soll natürlich den DNS und das Gateway für seinen IP-Range bekannt geben:

/ip dhcp-server network add address=10.250.0.0/24 dns-server=10.250.0.1 gateway=10.250.0.1

Nun weisen wir unserer Server Bridge die IP 10.250.0.1 zu:

/ip address add address=10.250.0.1/24 interface=svr-bridge network=10.250.0.0

Damit auch IPv4 Adressen aus unserem Netz 10.250.0.0/24 zugeteilt werden, müssen wir natürlich auch den DHCP Server einrichten:

/ip dhcp-server add address-pool=poolv4-svr-bridge1 disabled=no interface=svr-bridge name=svr-bridge-dhcpv41

Der DHCP Server für IPv4 ist nun fertig konfiguriert und wir kümmern uns um das IPv4 NAT, damit wir mit unseren Servern auch ohne die FlexIP's via IPv4 auf das Internet zugreifen können, um z. B. Updates herunter zu laden. Für NAT benötigen wir nur eine Regeln in der Firewall:

/ip firewall nat add chain=srcnat src-address=10.250.0.0/24 out-interface=ether1 action=masquerade

Nun ist IPv4 bereit und wir können uns um DHCPv6 kümmern.

DHCPv6 (IPv6) Setup:

Für IPv6 verwenden wir den Range 2001:xxx:xxxx:xxxx:x000:0000:0000:0000 - 2001:xxx:xxxx:xxxx:xfff:ffff:ffff:ffff in dem wir unser /64er Präfix in kleineren /68er Präfixen verteilen. Sollten wir ein /48er Präfix haben, können wir diesen in /56er oder /64er Präfixe aufteilen (Befehle ggf. anpassen).

Wir legen den Adresspool für IPv6 an. der Parameter "prefix-length" sagt, welche Präfixgröße vergeben werden soll und der Parameter "prefix" ist das Ecuh zugewiesene Netz von Tunnelbroker.net::

/ipv6 pool add name=poolv6-svr-bridge1 prefix-length=68 prefix=2001:xxx:xxxx:xxxx::/64

Jetzt legen wir den DHCPv6 Server an:

/ipv6 dhcp-server add name=svr-bridge-dhcpv61 interface=svr-bridge address-pool=poolv4-svr-bridge1

Da bei DHCPv6 kein direktes Gateway und keine Default Route übergeben wird, müssen wir die "router advertisements" und "Neighbour Discovery" konfigurieren:

/ipv6 nd prefix add prefix=::/64 interface=svr-bridge on-link=yes autonomous=no
/ipv6 nd add interface=svr-bridge managed-address-configuration=yes other-configuration=yes advertise-dns=yes

Fertig!

Jetzt haben wir alles grundlegende am Laufen. Sollten Euch Fehler auffallen, schreibt mir bitte eine kurze Naricht.