altermann
Goto Top

Wireguard Client und Server simultan auf VPS. Netzwerke verbinden

Hallo zusammen,

da ich neu bin kurz zu mir. Ich bin Bj. 64 und nicht mehr ganz neu, was die Netzwerktechnik betrifft. Mein Metier ist eigentlich die SPS-Programmierung und die Antriebstechnik. Da kann ich in den einschlägigen Foren helfen. Mit Netzwerktechnik habe ich dadurch auch nur begrenzt zu tun und für alles Mögliche in dem Thema hat die Industrie wunderbare Tools, die das Leben erleichtern.
Ich bin also nur rudimentär mit Linux und dem damit verbundenen Networking unterwegs. Ich hätte mein Problem auch von unserem Dienstleister lösen lassen können. Da es sich aber um eine private Sache handelt packt mich hier allerdings der Ehrgeiz und ich möchte, trotz meines Alters, noch was lernen. Außerdem ist das Problem immer noch brandaktuell und das Netz ist voll von mehr oder weniger sinnvollen Lösungsansätzen. Bitte verzeiht mir, wenn ich diverse Fachbegriffe u.U. durcheinander bringe.

Folgendes Problem versuche ich zu lösen. Ich habe seit etwa 3 Monaten einen Glasfaseranschluss hinter einem CGNAT (DG). Bisher hatte ich auf meinem kleinen Linux-Fileserver (DietPi auf einem Odroid XU4 mit redundanten Platten) OpenVPN laufen. Das ist seit CGNAT leider so nicht mehr möglich. Die neue Fritze 7590AX von DG unterstützt Wireguard, was auch super funktioniert. Jedenfalls solange man eine IPv6 Verbindung aufbauen kann. Das ist mit dem Handy als Hotspot auch kein Problem und geht wie schnuff. Blöd wird es, wenn nur eine IPv4 Verbindung zur Verfügung steht. Das ist der Fall, wenn ich von meiner Hobbywerkstatt aus auf meine CNC-Daten zugreifen will. Mein Remotezugriff besteht im Moment also nur unidirektional durch einen USB-Stick. Das ist leider beliebig blöd. Ich habe mir dann bei IONOS einen VPS angelacht, der IPv4 und IPv6 unterstützt.

Auf dem VPS läuft also ein Wireguard Server für die IPv4 Werkstatt- und Externverbindung und ein Wireguard Client für die IPv6 Fritzbox-Anbindung. Der WG-Server läuft auf dem Interface 10.0.0.0/24 der Fritz- Client auf dem Interface 192.168.20.0/24.

Auf beides kann ich zugreifen und über SSH eine Terminalsitzung auf dem VPS initiieren. Ping geht logischerweise auch.

Hier mal der "wg show" vom VPS:
root@ubuntu:~# wg show
interface: WGFritzClient
  public key: LVI=
  private key: (hidden)
  listening port: 49262

peer: KxY=
  preshared key: (hidden)
  endpoint: [IPv6]:51569
  allowed ips: 192.168.20.0/24
  latest handshake: 1 minute, 31 seconds ago
  transfer: 8.26 KiB received, 22.65 KiB sent
  persistent keepalive: every 25 seconds

interface: WGServerVPS
  public key: Thk=
  private key: (hidden)
  listening port: 51820

peer: CkU=
  preshared key: (hidden)
  allowed ips: 10.0.0.2/32
  persistent keepalive: every 25 seconds

peer: Dmk=
  preshared key: (hidden)
  allowed ips: 10.0.0.3/32
  persistent keepalive: every 25 seconds

peer: UUw=
  preshared key: (hidden)
  allowed ips: 10.0.0.4/32
  persistent keepalive: every 25 seconds

peer: GWc=
  preshared key: (hidden)
  allowed ips: 10.0.0.5/32
  persistent keepalive: every 25 seconds

peer: d3Y=
  preshared key: (hidden)
  allowed ips: 10.0.0.6/32
  persistent keepalive: every 25 seconds

peer: lUg=
  preshared key: (hidden)
  allowed ips: 10.0.0.7/32
  persistent keepalive: every 25 seconds

Die "WGFritzClient.conf" sieht fogendermaßen aus:
[Interface]
PrivateKey = c10=
Address = 192.168.20.205/24
DNS = 192.168.20.1
DNS = fritz.box

[Peer]
PublicKey = QxY=
PresharedKey = 1c4=
AllowedIPs = 192.168.20.0/24
Endpoint = haruetzelgruempf.myfritz.net:51569
PersistentKeepalive = 25

Hier noch die "WGServerVPS.conf"
[Interface]
Address = 10.0.0.1/24
PrivateKey = +HA=
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT

[Peer]
#Peer = Werkstatt
PublicKey = Dmk=
PresharedKey = NXY=
AllowedIPs = 10.0.0.3/32
PersistentKeepalive = 25

[Peer]
#Peer Firma
PublicKey = GWc=
PresharedKey = NXY=
AllowedIPs = 10.0.0.5/32
PersistentKeepalive = 25

[Peer]
#Peer Laptop
PublicKey = d3Y=
PresharedKey = NXY=
AllowedIPs = 10.0.0.6/32
PersistentKeepalive = 25

Um die Sache noch zu vervollständigen hier die Routingtabelle vom VPS.
root@ubuntu:/etc/wireguard# ip r
default via 5.6.7.8 dev ens6 proto dhcp src 1.2.3.4 metric 100 
10.0.0.0/24 dev WGServerVPS proto kernel scope link src 10.0.0.1 
5.6.7.8 dev ens6 proto dhcp scope link src 1.2.3.4 metric 100 
prohibit 169.254.169.254 
192.168.20.0/24 dev WGFritzClient proto kernel scope link src 192.168.20.205 
212.227.123.16 via 5.6.7.8 dev ens6 proto dhcp src 1.2.3.4 metric 100 
212.227.123.17 via 5.6.7.8 dev ens6 proto dhcp src 1.2.3.4 metric 100 

Also ich sehe hier keinen Routingeintrag zwischen den Netzen. Allerdings und das ist auch logisch, findet zwischen den Netzen ohne Routing kein Datenaustausch statt. Soweit ich das aus dem Nebel meines Gedächtnisses hervor hole braucht es doch ein Gateway und Routingeinträge???? Hier stehe ich vor einem großen schwarzen Loch und hoffe auf Eure Hilfe.

Gruß Thomas

Content-ID: 669055

Url: https://administrator.de/contentid/669055

Ausgedruckt am: 28.10.2024 um 09:10 Uhr

catrell
catrell 27.10.2024 aktualisiert um 17:19:13 Uhr
Goto Top
Moin.
Du musst dir jeweilig gegenüber liegenden Netze auch in die AllowedIPs eintragen.
D.h. die Fritze muss in ihrer Clientconfig in den AllowedIPs stehen haben
AllowedIPs = 10.0.0.0/24

Und die Clients die im 10.0.0.0/24 angekoppelt sind müssen in Ihrem Client-Configs ihrerseits auch das Netz der Fritzbox stehen haben.
AllowedIPs = 192.168.20.0/24,10.0.0.1/32

Denn die AllowedIPs bestimmen was überhaupt über die jeweiligen Tunnelendpunkte akzeptiert wird, wenn darin nämlich Netze nicht aufgeführt sind von denen man Traffic erwartet wird der ohne Meldung einfach gedroppt. Eine Route auf dem Server ist auch nicht nötig denn der kennt ja bereits alle Netze und kennt die Wege dorthin.

Des weiteren sind die KeepAlive Einträge auf der Serverseite für die DialIn Clients ebenfalls Unsinn, die gehören ausschließlich in die Config der Client-Seite.

Btw. Ich hätte ja die Fritze sich am vServer als Client einwählen lassen und nicht umgekehrt, ...

Mehr Infos dazu auch hier
Merkzettel: VPN Installation mit Wireguard

Gruß catrell
AlterMann
AlterMann 27.10.2024 um 19:44:46 Uhr
Goto Top
Gude catrell,

danke für die schnelle Antwort. Ich habe die Configs beider Interfaces mal nach Deinem Vorschlag angepasst. Die Fritze hat das ohne Meckern gemacht und eine Route angelegt. WG-Quick meldet folgendes:
root@ubuntu:/etc/wireguard# wg-quick up WGFritzClient 
ip link add WGFritzClient type wireguard
wg setconf WGFritzClient /dev/fd/63
ip -4 address add 192.168.20.205/24 dev WGFritzClient
ip link set mtu 1420 up dev WGFritzClient
resolvconf -a WGFritzClient -m 0 -x
ip -4 route add 10.0.0.0/24 dev WGFritzClient

Soweit so gut. Beim Server sieht das anders aus:
root@ubuntu:/etc/wireguard# wg-quick up WGServerVPS 
ip link add WGServerVPS type wireguard
wg setconf WGServerVPS /dev/fd/63
ip -4 address add 10.0.0.1/24 dev WGServerVPS
ip link set mtu 1420 up dev WGServerVPS
ip -4 route add 192.168.20.0/24 dev WGServerVPS
RTNETLINK answers: File exists
ip link delete dev WGServerVPS

Hier gibt es Mecker beim Anlegen der Route. Da beißt sich die Katze auch in den Schwanz.
Je nachdem welches WG Interface als erstes gestartet wird entsteht der Fehler beim Start des zweiten Interfaces. Starte ich also den WGServerVPS als erstes entsteht der Fehler dann beim Starten des WGFritzClient.

Btw. Ich hätte ja die Fritze sich am vServer als Client einwählen lassen und nicht umgekehrt, ...

Ja, da gebe ich Dir Recht. Vielleicht bleibt am Ende nichts anderes übrig. Die angestrebte Lösung hat aber den Charme, dass ich bei Verlust des VPS immer noch an mein Netz komme. Vorausgesetzt es ist überhaupt möglich mit meiner Konfiguration so ein VPN aufzusetzen. Außerdem ist die AVM-Lösung wohl leider und bekanntermaßen, nicht ganz kompatibel mit WG-Standard.

Gruß Thomas
catrell
catrell 27.10.2024 aktualisiert um 22:28:15 Uhr
Goto Top
ip -4 route add 10.0.0.0/24 dev WGFritzClient
Du hast das offensichtlich missverstanden. Das 10.0.0.0/24 käme nicht auf den Server sondern muss auf die Fritze für den Peer. Klar das dann nicht klappt wenn du das am Server einträgst, denn dann gäbe es das Netz ja doppelt 😉, und das lehnt er natürlich ab.
Also wie ich schon gesagt habe, setze es gleich besser so um das die Fritze als Client den vServer anspricht, das gibt weniger Ärger mit der Fritze.
Vorausgesetzt es ist überhaupt möglich mit meiner Konfiguration so ein VPN aufzusetzen. Außerdem ist die AVM-Lösung wohl leider und bekanntermaßen, nicht ganz kompatibel mit WG-Standard.
Ja natürlich geht das, läuft bei einem Kollegen absolut problemlos und ist im o.g Link auch geschildert wenn du ihn noch mal eingehend liest. Einfach die Fritze als Peer im bestehenden WG Server auf dem vServer hinzufügen, und den jetzigen Client am Server komplett weglöschen und auf der Fritze einen Client zum vServer einrichten schon klappt das auch wunderbar.

Hier nochmal zum nachlesen

vServer Config mit zus. Fritzbox Peer
[Interface]
Address = 10.0.0.1/24
PrivateKey = +HA=
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT

[Peer]
#Peer = Werkstatt
PublicKey = Dmk=
PresharedKey = NXY=
AllowedIPs = 10.0.0.3/32

[Peer]
#Peer Firma
PublicKey = GWc=
PresharedKey = NXY=
AllowedIPs = 10.0.0.5/32

[Peer]
#Peer Laptop
PublicKey = d3Y=
PresharedKey = NXY=
AllowedIPs = 10.0.0.6/32

[Peer]
# Peer Fritzbox
PublicKey = XXXXXXX
AllowedIPs = 192.168.20.0/24


Fritzbox zus. als Client mit folgender Config einrichten. (Aber bitte auf der Fritzbox selbst, nicht am Server!!)
[Interface]
PrivateKey = <PRIVKEY-Fritzbox>
Address = 192.168.20.1/24

[Peer]
PublicKey = <PUBKEY-vServer>
Endpoint = vserver.domain.tld:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25

Die angestrebte Lösung hat aber den Charme, dass ich bei Verlust des VPS immer noch an mein Netz komme.
Das kommst du auch noch, wenn die Fritze den Client spielt, die macht auch beides parallel!
Also sich als Client in den vServer einwählen als auch separate Clients für die Einwahl einbinden, das ist ja gerade einer der Vorteile von Wireguard, da sind das alles nur "peers"
AlterMann
AlterMann 27.10.2024 um 23:30:23 Uhr
Goto Top
Das kommst du auch noch, wenn die Fritze den Client spielt, die macht auch beides parallel!
Also sich als Client in den vServer einwählen als auch separate Clients für die Einwahl einbinden, das ist ja gerade einer der Vorteile von Wireguard, da sind das alles nur "peers"

Danke Dir für den Hinweis. Ich sehe, genau da habe ich eine gewaltige Verständnislücke und das ändert natürlich einiges. Ich komme erst im Laufe der Woche dazu das auszuprobieren.
Die Konfig habe ich verstanden und der Link, um das ganze auf die Reihe zu bekommen, ist auch äußerst hilfreich. Ich folge erst einmal Deinem Rat und studiere den Thread noch mal ausführlich. Ein Berichte folgt sobald ich neue Erkenntnisse habe. Insgesamt denke ich wohl zu kompliziert. "Keep it simple stupid" scheint zielführend zu sein.😊

Anfänglich hatte ich mit der Lösung schon experimentiert, aber immer eine Fehlermeldung von der Fritze beim Erstellen
des Tunnels erhalten. Wahrscheinlich Mist gebaut bei der Konfig. Wenn ich mir die IP's in Deinem Beispiel anschaue glaube ich auch zu wissen warum.

Gruß Thomas