Site to Site Wireguard VPN mit zwei Raspi's

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Zusammen,

    das ist mein erster Eintrag hier im Forum.

    Ich hab schon seit einiger Zeit einen Raspi als Pihole in meinem lokalen Netzwerk in Betrieb.

    Zusätzlich habe ich einen VPN Verbindung zwischen zwei Netzen über zwei Fritzbox gespannt. Das läuft auch relativ stabil aber sehr langsam.

    Seit langem möchte ich die VPN-Verbindung der Fritzbox auf einen Raspi mit Wireguard umziehen. Ich bin allerdings sehr lange daran gescheitert, da ich die Raspi Konfiguration mit Wireguard an meinem IPv6-Anschluss nichts ans rennen bekommen habe. Irgendwie war ich zu doof dazu die Routen passenden zu bekommen.

    Nun ja die Raspian-Entwicklung geht ja auch weiter so das es Wireguard nun in den Standard geschafft hat. Damit habe ich es geschafft auf meinem lokalen PI Wireguard zu installieren und zu konfigurieren. Damit ich von aussen drauf komme nutze ich Dynv6 wo mir die Fritzbox den Prefix liefert und ich den per AAAA-Record den lokalen Teil festeingetragen habe. Nun können alle meine Geräte (Iphone, Macbook usw.) ganz einfach von aussen in mein LAN zu Hause. Läuft schnell und stabil...Top

    Nun möchte ich die VPN-Verbindung zwischen den Fritzboxen durch eine Verbindung zwischen den PI's ablösen. So das bei beistehenden Verbindung die Gerät des jeweils lokalen Lan mittels IP-Adresse auf die Geräte im entfernten LAN zugreifen können.

    Der Aufbau ist damit so:

    Raspi-Home --> Fritzbox-Home <-- Internet --> Fritzbox-entfernt --> Raspi-entfernt

    Ich hatte nun gedacht das ich wie bei meinen Geräten (Iphone usw.) mittels PiVPN auf jedem PI eine conf-Datei erzeuge diese zwischen den beiden Pi's austausche.

    Danach auf jeder Fritzbox eine Route in das andere Netz anlege und die Kiste läuft das ist aber nicht so.

    Ich kann auf Raspi-entfernt eine Conf-Datei so anlegen das die mir als neues Interface (nicht wg0) angelegt wird. Dann kann ich von Raspi-entfernt an meine Geräte im Netz des Raspi-Home. Aber die Geräte aus dem Netz des Raspi-entfernt kommen trotz Route nicht an die Geräte aus dem Netz Raspi-Home. Der umgekehrte Weg funktioniert allerdings nicht.

    Was mache ich falsch bzw. wo ist mein Denkfehler?

    Ich habe im ersten Schritt davon abgesehen hier alle meine Konfig-Files einzustellen. Würde das aber falls benötigt jederzeit tuen.

    Vorab möchte ich mich für Eure Hilfe bedanken.

    Viele Grüße

    isch83

  • Der Aufbau ist damit so:

    Raspi-Home --> Fritzbox-Home <-- Internet --> Fritzbox-entfernt --> Raspi-entfernt

    Sind deine PIs jetzt per WG verbunden bzw. können deine PIs per WG kommunizieren?

    EDIT:

    D. h. Du hast mit WG ein Peer-to-Peer-Netzwerk hergestellt?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Ich wollte das meine beiden PI's eine VPN Verbindung zwischen den beiden Standorten herstellen.

    Das einzige was ich bisher geschafft habe ist das der entferne PI auf das Netzwerk des lokalen PI's zugreifen kann.

    Ich kannte das von OpenVPN bisher so nur so das es einen Server und viele Clients gibt.

    Gelernt habe ich das Wireguard nur Peers kennt. Falls Du das mit Peer to Peer-Netzwerk meinst dann ist das mein Ziel.

  • Jeder peer kann auch einen Port öffnen, damit sich andere peers mit ihm verbinden können.

    D.h. du musst mindestens bei einer Fritz!Box den UDP-Port weiterleiten und bei der Fritz!Box DynDNS einrichten oder hast du eine feste öffentliche IP?

  • Also lokale Fritzbox nur IPv6 ist per Dyndns erreichbar und der UDP ist der Port 51820 ist geöffnet.

    Die entfernte Fritzbox ist per IPv4 und IPv6 ist per Dyndns erreichbar. Auch hier ist ebenfalls der Port 51820 geöffnet.

    Von den Iphone‘s usw. sind beide PI‘s und die dahinterliegenden Netze erreichbar.

  • Dann muss die entfernte Fritz!Box (ipv4/ipv6) sich via IPv6 mit der Lokalen Fritz!Box (IPv6 only) verbinden.

    Von deinem Provider wird normalerweise ein /64er Präfix zugewiesen. Dieser, sofern die Firewall nicht blockiert, sollte im Internet erreichbar sein.

    Kannst du übers Internet den entfernten Raspberry Pi anpingen?

  • Ja das verbinden ist nicht mehr Problem. Ich hab es ja bereits geschafft das ich den entfernten Pi mit meinem lokalen Pi verbinden konnte. Ich konnte dann auch vom entfernten Pi aus Geräte im lokalen Netzwerk anpingen. Ein andere Gerät im entfernten Netzwerk konnte dann über den entfernten Pi nicht auf den lokalen Pi zugreifen und auch nicht auf das dahinterliegende Netz.

    Ich habe denke ich eher ein Routing Problem oder das Problem das dass entfernte Routing über die Iptables nicht funktioniert weil ich die Verbindung nur über ein weiteres Interface hinbekommen habe. Es ging nicht das ich die Verbindung ins wg0.conf eintragen konnte sondern nur wenn xyz .conf erstellt habe und diese parallel zum wg0 Interface gestartet habe.

    Das ist aber dann scheinbar eine Grundsätzlich andere Konfiguration als die über wg0 mit iPhones usw.

    Einmal editiert, zuletzt von isch83 (18. Juni 2020 um 19:38)

  • Ich kannte das von OpenVPN bisher so nur so das es einen Server und viele Clients gibt.

    Gelernt habe ich das Wireguard nur Peers kennt. Falls Du das mit Peer to Peer-Netzwerk meinst dann ist das mein Ziel.

    Bei WG gibt es die Peer-to-Peer-Konfiguration oder die Client-Server-Konfiguration. Siehe z. B.: https://wiki.ubuntuusers.de/WireGuard/#Konfiguration

    Da Du einen Intentanschluss mit nativem IPv4 und einen mit DS-lite hast, wäre für deinen Anwendungsfall, m. E. die Client-Server-Konfiguration die richtige. WG-Server am nativen IPv4-Internet-Anschluss. Server und Client sind dann das VPN-gateway in das jeweilige LAN.

    Zitat


    Es ging nicht das ich die Verbindung ins wg0.conf eintragen konnte sondern nur wenn xyz .conf erstellt habe und diese parallel zum wg0 Interface gestartet habe.

    Für die Konfiguration brauchst Du keine wg*.conf-Dateien. Das geht viel schöner mit systemd-networkd im Buster.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Ich habe denke ich eher ein Routing Problem oder das Problem das dass entfernte Routing über die Iptables nicht funktioniert weil ich die Verbindung nur über ein weiteres Interface hinbekommen habe.


    Mit der Vermutung liegst du wahrscheinlich richtig.
    Mit IPv6 konnte ich leider selbst noch nicht viel experimentieren, da ich kein IPv6 bei meinem Provider habe.

    Poste mal einfach den Inhalt von beiden Dateien. Den privaten Key bitte vorher entfernen oder verfälschen.

    Die IPv6-Adresse auch.

    Das wg0 bzw. xzy Interface scheint Pakete nicht vom Lokalen Netzwerk in den Tunnel weiter zu leiten.

    Andersherum, also aus dem Tunnel ins Lokale Netz geht aber?

  • Da Du einen Intentanschluss mit nativem IPv4 und einen mit DS-lite hast, wäre für deinen Anwendungsfall, m. E. die Client-Server-Konfiguration die richtige.

    Ich dachte, er hat jetzt doch auf beiden Seiten echtes IPv6.

    Ich brauche ☕

  • Ich dachte, er hat jetzt doch auf beiden Seiten echtes IPv6.

    Ja:

    Zitat

    Also lokale Fritzbox nur IPv6 ist per Dyndns erreichbar und der UDP ist der Port 51820 ist geöffnet.

    Die entfernte Fritzbox ist per IPv4 und IPv6 ist per Dyndns erreichbar.

    Aber er kann auch IPv4 verwenden, weil er an der entfernten FB natives IPv4 hat und an der lokalen FB DS-lite. D. h., er kann von der lokalen FB die entfernte FB per IPv4 erreichen.

    Wenn man das nicht will, kann man auch IPv6 auf beiden Seiten, für eine Peer-to-Peer-Verbindung benutzen. Durch diese WG-VPN-Gateways sollten dann IPv4-Verbindungen ins jeweils andere LAN möglich sein.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Guten Abend Zusammen,

    sorry das ich erst jetzt antworten konnte aber leider musste ich heute ein bisschen Arbeiten und hatte erst heute Abend etwas Zeit zu basteln. Ich habe es nun geschafft das die beiden PI's sich gegenseitig sehen können und auch die Geräte im Netzwerk dahinter sehen können.

    Das Problem war eigentlich ganz einfach der richtige Tipp führte mich ins Ubuntu-Wiki. Gelernt habe ich das wenn man PiVPN für die Wireguardkonfiguration verwendet das man dann immer eine Client-Server Konfiguration aufbaut. Das bedeutet das ich auf jedem Pi ein neues Interface mit einer eigenen Konfigdatei benötigt habe um die Verbindung aufzubauen. In der empfangenden wg0.conf musste ich dann nur noch eine eindeutige IP-Adresse für die Verbindung eintragen.

    Ganz fertig bin ich damit allerdings noch nicht.

    Ich muss es jetzt noch schaffen das alle Geräte aus meinen jeweiligen Netzwerken den jeweiligen PI vor Ort als Gateway verwenden. Hierzu habe ich in den Fritzboxen jeweils eine Statische Route eingetragen diese sorgt dafür das alle Anfragen für ein bestimmtes Netz an den PI weitergeleitet werden.

    Leider Route der PI dann aber nicht zum entfernten Netz weiter. Hat jemand eine Idee wie ich dem PI bei bringe Anfragen von aussen auf eth0 über Wireguard weiterzuleiten? Muss ich dafür das Gateway des PI's verbiegen?

  • Leider Route der PI dann aber nicht zum entfernten Netz weiter. Hat jemand eine Idee wie ich dem PI bei bringe Anfragen von aussen auf eth0 über Wireguard weiterzuleiten? Muss ich dafür das Gateway des PI's verbiegen?

    Wie sind auf deinem PI, die Ausgaben von:

    Code
    sysctl net.ipv4.ip_forward
    sudo iptables -nvx -L -t nat
    route -n
    ip a
    cat /etc/wireguard/wg0.conf | grep -i allowedips

    ?

    EDIT:

    BTW: Als Alternative siehe auch: https://wiki.debian.org/WireGuard#Step…ive_C_-_systemd

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    Einmal editiert, zuletzt von rpi444 (19. Juni 2020 um 21:23)

  • Hi, vielen Dank für die schnelle Antwort.

    Meine Verbindung geht nicht über das wg0-Interface raus sondern über das Interface "allrath".

    Das wg0-Interface nutze ich nur für Client wie Handy usw. Das Interface "allrath" möchte ich für die Verbindung der Netze nutzen. Möchte ist vielleicht etwas übertrieben. Ich habe es anders einfach nicht hinbekommen.

    Hier meine Ausgaben:

    zu1:

    pi@tuspi:~ $ sysctl net.ipv4.ip_forward

    net.ipv4.ip_forward = 1


    zu2:

    pi@tuspi:~ $ sudo iptables -nvx -L -t nat

    Chain PREROUTING (policy ACCEPT 56 packets, 4194 bytes)

    pkts bytes target prot opt in out source destination

    Chain INPUT (policy ACCEPT 46 packets, 3519 bytes)

    pkts bytes target prot opt in out source destination

    Chain POSTROUTING (policy ACCEPT 93 packets, 7496 bytes)

    pkts bytes target prot opt in out source destination

    5 320 MASQUERADE all -- * eth0 10.6.0.0/24 0.0.0.0/0 /* wireguard-nat-rule */

    Chain OUTPUT (policy ACCEPT 93 packets, 7496 bytes)

    pkts bytes target prot opt in out source destination

    zu3:

    pi@tuspi:~ $ route -n

    Kernel IP routing table

    Destination Gateway Genmask Flags Metric Ref Use Iface

    0.0.0.0 192.168.1.1 0.0.0.0 UG 202 0 0 eth0

    10.6.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0

    10.6.0.0 0.0.0.0 255.255.255.0 U 0 0 0 allrath

    192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0

    192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 allrath

    zu4: Hier hab ich meine IPv6 Adresse unkenntlich gemacht.

    pi@tuspi:~ $ ip a

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host

    valid_lft forever preferred_lft forever

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

    link/ether dc:a6:32:7b:d6:f9 brd ff:ff:ff:ff:ff:ff

    inet 192.168.1.40/24 brd 192.168.1.255 scope global noprefixroute eth0

    valid_lft forever preferred_lft forever

    inet6 unkenntlich/64 scope global dynamic noprefixroute

    valid_lft 7064sec preferred_lft 3464sec

    inet6 fe80::unkenntlich/64 scope link

    valid_lft forever preferred_lft forever

    3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000

    link/ether dc:a6:32:7b:d6:fa brd ff:ff:ff:ff:ff:ff

    4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000

    link/none

    inet 10.6.0.1/24 scope global wg0

    valid_lft forever preferred_lft forever

    5: allrath: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1412 qdisc noqueue state UNKNOWN group default qlen 1000

    link/none

    inet 10.6.0.100/24 scope global allrath

    valid_lft forever preferred_lft forever

    zu5:

    pi@tuspi:~ $ sudo cat /etc/wireguard/wg0.conf | grep -i allowedips

    AllowedIPs = 10.6.0.200/32

    AllowedIPs = 10.6.0.3/32

    AllowedIPs = 10.6.0.4/32

    AllowedIPs = 10.6.0.5/32

    pi@tuspi:~ $ sudo cat /etc/wireguard/allrath.conf | grep -i allowedips

    AllowedIPs = 10.6.0.0/24, 192.168.10.0/24

    #AllowedIPs = 10.6.0.0/24, 192.168.10.0/24, fe80:0:0:0:0:0:a06:0, fe80:0:0:0:0:0:c0a8:a00

  • Meine Verbindung geht nicht über das wg0-Interface raus sondern über das Interface "allrath".

    Code
    5      320 MASQUERADE  all  --  *      eth0    10.6.0.0/24          0.0.0.0/0            /* wireguard-nat-rule */
    Code
    10.6.0.0        0.0.0.0         255.255.255.0   U     0      0        0 wg0
    10.6.0.0        0.0.0.0         255.255.255.0   U     0      0        0 allrath

    Ich verstehe deine Konstellation mit dem (zusätzlichen) allrath-Interface nicht. Kannst Du evtl. beschreiben, warum Du das so benutzt?

    Es gibt 2 identische definierte Routen in das Subnetz 10.6.0.0/24 mit der metric 0.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Ok ich versuche das mal zu erklären.

    Ich habe heute zwei Netzwerke an zwei Standorten mit Windows Client‘s, Nas, Drucker usw. Heute sind die beiden Standorte über das VPN der Fritzboxen miteinander verbunden. Man kann von jedem Client in das Netz des jeweils entfernten Standortes.

    Das wollte ich nun über zwei Raspi realisieren.

    Zur Konfiguration hab ich PiVPN verwendet. Das unterstützt nun auch WireGuard. Wenn man das nutzt legt das Skript die Keys, eine wg0.conf und Files für die Clients an. Bei IPhones usw. generiert man dann einen QR-Code, scannt den und schwups ist man per VPN eingeloggt.

    Ich hab es aber nicht geschafft ohne ein zweite Interface anzulegen die beiden Pi‘s miteinander zu verbinden.

    Wenn ich es schaffe nehme ich aber gerne das wg0 Interface.

  • Ich hab es aber nicht geschafft ohne ein zweite Interface anzulegen die beiden Pi‘s miteinander zu verbinden.

    Wenn ich es schaffe nehme ich aber gerne das wg0 Interface.

    Lassen wir mal Windows, FB-VPN und iPhone weg.

    Wie hast Du versucht die 2 PIs per WG zu verbinden? Per IPv6 und als Endpoint hast Du die jeweilige externe IPv6-Adresse verwendet? Haben die IPv6-Adressen eine statische Interface-ID und funktioniert die Portfreigabe in der v6-Firewall der Router?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Die beiden Endpoints habe ich mit Dyndns realisiert.

    Standort 1 ist ein Deutsche Glasfaser Anschluss mit DS Lite

    Standort 2 ist eine Telekom Anschluss mit Double Stack

    Für Standort 1 bedeutete das ich habe in der Fritzbox eine Account für Dynv6 angelegt. Im zweiten Schritt habe einen AAAA Record bei Dynv6 angelegt und wo aus Prefix die die Fritzbox liefert und dem festen Teil des Pi zusammen gebaut wird.

    Für Standort 2 nutze ich einen Synology DynDNS hier werden die beiden Public IP-Adressen der Telekom genutzt.

  • Für Standort 1 bedeutete das ich habe in der Fritzbox eine Account für Dynv6 angelegt. Im zweiten Schritt habe einen AAAA Record bei Dynv6 angelegt und wo aus Prefix die die Fritzbox liefert und dem festen Teil des Pi zusammen gebaut wird.

    Für Standort 2 nutze ich einen Synology DynDNS hier werden die beiden Public IP-Adressen der Telekom genutzt.

    Das verstehe ich jetzt nicht. Was hat die externe IPv6-Adresse des PI mit "Fritzbox eine Account für Dynv6 angelegt." oder mit "Synology DynDNS" zu tun?

    Die PIs sind (mit ihren externen IPv6-Adressen) border devices. Du musst lediglich in den v6-Firewalls der Router, eine Portfreigabe konfigurieren. Den v6-dyndns-Client musst Du auf deinem PI installieren und verwenden und nicht auf dem Router.

    EDIT:

    BTW: Je nach ddns-Provider, ist ddclient ein guter und v6-fähiger ddns-Client für den PI:

    Code
    apt-cache show ddclient
    sudo apt-get install ddclient
    sudo dpkg --configure -a

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    Einmal editiert, zuletzt von rpi444 (20. Juni 2020 um 09:10)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!