Wir haben unsere Beiträge auf diesem ggf. umgeleitet. Dies hat den Vorteil, ältere Beiträge automatisch auf den neusten zu verweisen. Zudem ist diese Methode gerade für Homeserver und WireGuard besonders nützlich, da diese nicht mehr mit komplexeren Vorgängen zu handhaben ist.
Alles hier läuft vom IP-Router zu dem nächsten direkten Endpunkt.
Vorwort:
Herzlich willkommen zu diesem Tutorial! 🙂
Was ich heute euch erklären möchte, ist eine besonders gute und robuste Routing Methode, wo ich selbst intensiv daran geforscht habe.
WireGuard dient hier als Transponder der sogenannten Layer 2 Brücke.
Es kann für online gehostete Server sowie für das eigene Homelab genutzt werden.
Durch die angepassten MTU’s, werden Fragmentierungen zwischen den Layer 3 (WireGuard) und Layer 2 (GRETAP) ausgeschlossen.
Am besten könnt Ihr für die jeweiligen MTU’s einen MTU Rechner nutzen. Ich empfehle diesen Rechner, da ich diesen auch häufiger hierfür nutze.
Mein Name ist Jan und bin Technik begeistert, ich gebe mein Wissen zur Forschung und allgemeinen Zwecks kostenlos frei für die Internetgemeinschaft.
Für einen guten Zweck, zur Förderung von Vereinen und Communitys.
Seit vielen Jahren beschäftige ich mich mit den Themen Netzwerk, Server sowie deren Systemadministration.
Jan H. – Autor
1. Vorteile
Die folgenden Vorteile sind mit dem normalen Layer 3 verfahren zu beachten:
Keine Komplexeren IP Rules oder Tables notwendig
Layer 2 ermöglicht das direkte Verbinden des gewünschten IP-Routers
Keine Limits
Füge so viele IP-Router oder Endgeräte in die Bridge hinzu, wie nötig.
BR0
So ist beispielsweise der Start der Linux Brücke und kann für zahl und zahl, pro WireGuard Server hochgezählt und somit getrennt werden.
Das sind so die drei wichtigsten Punkte, die es so gibt und da geht immer noch mehr.
2. Proxy Arp und Proxy NDP
Hier ein Beispeil wie Proxy_NDP dies auflistet
Um später nach Abschluss alles am richtigen Ort von MAC zu IP aufzulösen, hier vorab die Commands die wir brauchen, falls keine indirekte Verbindung aufgebaut werden kann.
Bash
# Für IPv6 - Temporärer Befehlip-6neighaddproxyipv6devOriginInterface
Die Bezeichnung des OriginInterface bedeutet im Endeffekt das ursprünglich Original Interface, wo wirklich die IPv6 stammte.
Proxy_NDP ist dann hierfür zuständig.
Bash
# Für IPv4 - Temporärer Befehl - Nicht zwingend notwendig, aber hier dokumentiert.ipneighaddproxyIPv4devOriginInterface
Bei IPv4 merkte ich keine indirekten Probleme, jedoch zur Sicherheit hier aufgelistet.
3. NDPPD – Proxy_NDP Daemon als Lösung für IPv6 Netze
Um ganze IPv6 Netze z. B. /64 oder /48, /56 etc. hier direkt einzutragen und automatisiert aufzulösen, kann man mittels NDPPD arbeiten.
Es ist ein automatischer Service, der die Netze korrekt zuordnet.
Bash
# Wir installieren das Paket ndppd wenn noch nicht vorhandenapt-getinstallndppd-y
Bash
# Wir erstellen eine Konfiguartionsdatei für ndppdnano/etc/ndppd.conf
Bash
# Und erstellen ein oder mehrere Einträge wie nötigproxyhe-ipv6{rule2001:470.../64{ifaceeth0}rule2001::.../48{ifacebr0}rule2001:470:735a.../64{ifacepve01-peer4host}}
Sieht doch super aus! ndppd Dienst läuft und konfiguration ist geladen.
Bash
# Jetzt ndppd einmal in systemd aktivieren und neustartensystemctlenablendppdservicendppdrestart# Jetzt status prüfenservicendppdstatus
4. WireGuard Konfiguration erstellen für „Transponder“
Wir wollen also erstmal auch ein eigenes virtuelles Netzwerk schaffen für IP-Router und Clients.
Dazu nutzen wir WireGuard, um auch Homeserver einzubeziehen und ggf. äußere Einflüsse zu vermeiden.
Bei manchen DDoS-Protection Lösungen wird empfohlen, über ipv6 Adressen den Tunnel aufzubauen, wie bei z.B Realtoxmedia Hosting, Tube-Hosting oder auch Dataforest DDoS Protection, um starke Filterung des Traffics zu meiden.
Zwar könnte man auch das ganze über IPv4 versuchen, da wir aber einiges an Traffic später verknüpfen kann ich die Filterungen hierbei nicht genau einschätzen, ob sich dann noch die Geschwindigkeit halten würde.
Zu Hause ist das überhaupt kein Problem, da die meisten Anbieter hierfür keinen strengen Filter einsetzen.
Ich habe hier für euch mal einen WireGuard Konfiguration erstell Werkzeug herausgesucht, damit Ihr die ganzen Clients oder Server Interfaces generieren lassen könnt.
Tragt hierzu euren Endpunkt, Port oder auch weitere wichtige Tunnelverbindungen ein.
Für IPv4Bitte für IPv6 Adressen in […IPV6…] Klammern versehen
Nach der Erstellung den [Interface] Bereich so kopieren und bei dem Haupt-Transponding Server einfügen z.B in /etc/wireguard/tap1.conf und aktivieren.
Wichtig:
Bitte beachtet, dass für den WireGuard Server immer einen Master Server geben muss, der alles weiterleitet.
Fällt dieser aus, ist auch der externe IP-Router mitbetroffen. Denn, wenn der IP-Router sich darauf mit verbindet, kann es dann zu downtime kommen.
Ich gebe euch ein paar Tipps:
erstellt einfach eine sub-domain z.B vpn1-peer.example.com und hinterlegt dort die Master Peering IPv4 und IPv6 Adressen
IPv4: A Record
IPv6: AAAA Record
Sobald dieser ausfallen würde, dann müsste man halt schauen, ob man nicht einen zweiten Master Relay einträgt:
Eine sub-domain z.B vpn2-peer.example.com und hinterlegt dort die Master Peering IPv4 und IPv6 Adressen
Hier könnte man dann Automatisierte Skripte erstellen, die dann bei einem Ausfall die Konfigurationen umschreiben auf den Ausfall peer.
Bash
# Zum aktivieren der jeweiligen Server / Client Schnittstellesystemctlenablewg-quick@tap1--now
Bash
# Example für z.B den Client[Interface]## Client 2Address=172.17.172.2/24PrivateKey=hiddenMTU=1420Table=1024[Peer]PublicKey=hiddenAllowedIPs=0.0.0.0/0Endpoint= [ipv6 -InKlammern]:51820# Bitte den unteren Befehl nachträglich einfügenPersistentKeepalive=25
Bash
# Jetzt prüfen ob ein Ping zustande kommt# Hier pingen wir den Master "Transpoding" WireGuard Server an.ping-c1172.17.172.1
Bash
# Jetzt prüfen ob ein Ping zustande kommt# Und hier pingen wir den Client via den "Transpoding" WireGuard Server an.ping-c1172.17.172.2
Pingen beide Seiten reibungslos, so sind die Verbindungen erfolgreich hergestellt.
5. GRETAP über WireGuard aufbauen
Bash
#!/bin/bash# Funktion zur IP-Adressvalidierungis_valid_ip(){local ip="$1"local stat=1# Prüfe, ob die IP-Adresse im richtigen Format istif[["$ip"=~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]];then# Stelle sicher, dass jede Oktette zwischen 0 und 255 liegtlocal IFS="."local-aoctets=($ip)if[[${octets[0]}-ge0&&${octets[0]}-le255&& \${octets[1]}-ge0&&${octets[1]}-le255&& \${octets[2]}-ge0&&${octets[2]}-le255&& \${octets[3]}-ge0&&${octets[3]}-le255]];then stat=0fifireturn $stat}# Schleife, um Tunnel zu erstellenwhiletrue;do# Abfrage der lokalen und entfernten IP-Adresseread-p"Gib die lokale IP-Adresse für den GRE-Tunnel ein: "local_ipread-p"Gib die entfernte IP-Adresse für den GRE-Tunnel ein: "remote_ip# Validierung der IP-Adressenif!is_valid_ip"$local_ip"||!is_valid_ip"$remote_ip";thenecho"Ungültige IP-Adresse(n), bitte versuche es erneut."continuefi# Tunnelname abfragenread-p"Gib den Namen für das GRE-Interface ein (z.B. gre1): "tunnel_name# Tunnel erstellenecho"Erstelle GRE-Tunnel $tunnel_name mit lokaler IP $local_ip und entfernter IP $remote_ip..."iplinkadd"$tunnel_name"typegretaplocal"$local_ip"remote"$remote_ip"iplinkset"$tunnel_name"upecho"GRE-Tunnel $tunnel_name wurde erstellt."# Frage, ob ein weiterer Tunnel erstellt werden sollread-p"Möchtest du einen weiteren Tunnel erstellen? (y/n): "choiceif[["$choice"!="y"]];thenbreakfidone
Dieses fogende Skript macht den Aufbau einzelner GRETAP Verbindungen schneller und einfacher.
Gibt die Lokale und die Entfernten Endpunkt jeweils unterschiedlich ein also im Endeffekt einmal der WireGuard Server „Transponder“ => .1 und der Client z.B mit der Endung => .2 und wieder auf der anderen Seite andersrum.
6. BR0 Linux Brücke – GRETAPs verbinden in einer ganzen Brücke
Bash
# Zuvor bitte folgendes Paket nachinstallieren falls nicht vorhandenapt-getinstallbridge-utils-y
Bash
# tap{} => Die GRETAPs, 172.26.x.x ist eine Beispiel Lokale GW Addresseautobr0ifacebr0inetstaticaddress172.26.0.1/24bridge_portstap1tap2tap3
Für IPv6 – Ein Beispiel für den Lokalen Gateway zum austauschen der IPv6 Pakete
Bash
# fdd8:3f3d:a69c:df03::1 ist eine Beispiel Lokale GW Addresseautobr0ifacebr0inet6staticaddressfdd8:3f3d:a69c:df03::1/64
Diesen Example wenn gebraucht, einfach mit darunter einfügen.
Bash
# In Proxmoxifreload-a# Auf Debian ohne Proxmoxservicenetworkingrestart
Jetzt sind zum Beispiel tap1, tap2 und tap3 in einer einheitlichen Linux Brücke und können jeweils einheitlich angesprochen werden.
7. Linux Kernel freigaben sind notwendig
Bash
nano/etc/sysctl.conf# Hier einfügennet.ipv4.conf.all.proxy_arp=1net.ipv6.conf.all.proxy_ndp=1net.ipv4.ip_forward=1net.ipv6.conf.all.forwarding=1# Übernehmen mitsysctl-p
Hier ist gerade bei IP-Routern besonders wichtig das Proxy ARP und Proxy NDP aktiviert sind damit die Auflösung von MAC zu IP und andersrum klappt.
Für Proxmox zu den VMs oder Containern ist hierfür nur das IPv4 oder ggf. IPv6 Forwading vollkommen ausreichend.
8. Statisches IP-Routing auf den IP-Routern
Bash
# Für IPv4 - Temporär Befehl - Exampleiprouteadd5.230.x.x/32devbr0
Bash
# Und für IPv6 - Temporär - Exampleip-6routeaddfe80::/64devbr0
Sollte noch keine Connection funktionieren so bitte Punkt 3. im Beitrag beachten.
Danke!
Vielen Dank für das Lesen meines Beitrags 🙂
Ich hoffe ich konnte Dir damit weiterhelfen und würde mich über einen kurzen Kommentar oder generellen Feedback freuen.
Das hilft mir und auch der Community für generelle Problemlösungen oder auch mir beim verbessern der Inhalte.
Für Fragen oder Meetings, gerne mich hierüber kontaktieren:
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional
Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt.Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Schreibe einen Kommentar