Willkommen auf Server-Verstehen!

Inhalte werden geladen...

, , , , , , , , , , , , ,

Empfohlen: WireGuard und GRETAB – Routing für Homeserver und Online via Layer 2 – Tutorial

Posted by

0
(0)

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.

Dieses Bild hat ein leeres Alt-Attribut. Der Dateiname ist jan_hill-1024x683.jpg
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

Screenshot 18 01 2025 04.39.14
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 Befehl
ip -6 neigh add proxy ipv6 dev OriginInterface

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.
ip neigh add proxy IPv4 dev OriginInterface

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 vorhanden
apt-get install ndppd -y
Bash
# Wir erstellen eine Konfiguartionsdatei für ndppd
nano /etc/ndppd.conf
Bash
# Und erstellen ein oder mehrere Einträge wie nötig
proxy he-ipv6 {
   rule 2001:470.../64 {
   iface eth0
}
   rule 2001::.../48 {
   iface br0
}

   rule 2001:470:735a.../64 {
   iface pve01-peer4host
}

}
Screenshot 18 01 2025 04.46.50
Sieht doch super aus! ndppd Dienst läuft und konfiguration ist geladen.
Bash
# Jetzt ndppd einmal in systemd aktivieren und neustarten
systemctl enable ndppd

service ndppd restart

# Jetzt status prüfen

service ndppd status

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.

Screenshot 18 01 2025 04.59.03
Für IPv4
Screenshot 18 01 2025 04.59.57
Bitte 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.

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:

  1. 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
  2. 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 Schnittstelle
systemctl enable wg-quick@tap1 --now
Bash
# Example für z.B den Client
[Interface]
## Client 2
Address = 172.17.172.2/24
PrivateKey = hidden
MTU = 1420
Table = 1024
[Peer]
PublicKey = hidden
AllowedIPs = 0.0.0.0/0
Endpoint = [ipv6 - In Klammern]:51820
# Bitte den unteren Befehl nachträglich einfügen
PersistentKeepalive = 25
Bash
# Jetzt prüfen ob ein Ping zustande kommt
# Hier pingen wir den Master "Transpoding" WireGuard Server an.
ping -c 1 172.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 -c 1 172.17.172.2

Pingen beide Seiten reibungslos, so sind die Verbindungen erfolgreich hergestellt.

5. GRETAP über WireGuard aufbauen

Bash
#!/bin/bash

# Funktion zur IP-Adressvalidierung
is_valid_ip() {
    local ip="$1"
    local stat=1

    # Prüfe, ob die IP-Adresse im richtigen Format ist
    if [[ "$ip" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
        # Stelle sicher, dass jede Oktette zwischen 0 und 255 liegt
        local IFS="."
        local -a octets=($ip)
        if [[ ${octets[0]} -ge 0 && ${octets[0]} -le 255 && \
              ${octets[1]} -ge 0 && ${octets[1]} -le 255 && \
              ${octets[2]} -ge 0 && ${octets[2]} -le 255 && \
              ${octets[3]} -ge 0 && ${octets[3]} -le 255 ]]; then
            stat=0
        fi
    fi
    return $stat
}

# Schleife, um Tunnel zu erstellen
while true; do
    # Abfrage der lokalen und entfernten IP-Adresse
    read -p "Gib die lokale IP-Adresse für den GRE-Tunnel ein: " local_ip
    read -p "Gib die entfernte IP-Adresse für den GRE-Tunnel ein: " remote_ip

    # Validierung der IP-Adressen
    if ! is_valid_ip "$local_ip" || ! is_valid_ip "$remote_ip"; then
        echo "Ungültige IP-Adresse(n), bitte versuche es erneut."
        continue
    fi

    # Tunnelname abfragen
    read -p "Gib den Namen für das GRE-Interface ein (z.B. gre1): " tunnel_name

    # Tunnel erstellen
    echo "Erstelle GRE-Tunnel $tunnel_name mit lokaler IP $local_ip und entfernter IP $remote_ip..."
    ip link add "$tunnel_name" type gretap local "$local_ip" remote "$remote_ip"
    ip link set "$tunnel_name" up

    echo "GRE-Tunnel $tunnel_name wurde erstellt."

    # Frage, ob ein weiterer Tunnel erstellt werden soll
    read -p "Möchtest du einen weiteren Tunnel erstellen? (y/n): " choice
    if [[ "$choice" != "y" ]]; then
        break
    fi
done

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 vorhanden
apt-get install bridge-utils -y
Bash
# tap{} => Die GRETAPs, 172.26.x.x ist eine Beispiel Lokale GW Addresse
auto br0
iface br0 inet static
        address 172.26.0.1/24
        bridge_ports tap1 tap2 tap3

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 Addresse
auto br0
iface br0 inet6 static
        address fdd8:3f3d:a69c:df03::1/64

Diesen Example wenn gebraucht, einfach mit darunter einfügen.

Bash
# In Proxmox
ifreload -a
# Auf Debian ohne Proxmox
service networking restart

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ügen

net.ipv4.conf.all.proxy_arp=1
net.ipv6.conf.all.proxy_ndp=1

net.ipv4.ip_forward=1

net.ipv6.conf.all.forwarding=1

# Übernehmen mit
sysctl -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 - Example
ip route add 5.230.x.x/32 dev br0
Bash
# Und für IPv6 - Temporär - Example
ip -6 route add fe80::/64 dev br0

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:

  1. Discord Nick: rawnetworks
  2. E-Mail: privat@janhill.email

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert