Router <> Wireguard <> Client

  • Hallo in die Runde.

    Ich liede unter ständigem Kabelinternetausfall; ist nix neues in Deutschland...

    Als Ausfallschutz fungiert Mobilfunk.

    CGNAT ist aber natürlich ein Problem, wenn ich paar Dienste (Zuhause) trotzdem unterwegs erreichen möchte.

    Ich betreibe eigene DNS-Server und habe somit DynDNS bereits eingerichtet.

    Als Gateway möchte ich einen Wireguard Server benutzen.

    Der Server dafür ist via. IPv4 und IPv6 ständig erreichbar und innerhalb des Tunnels wird nur IPv4 gesprochen.


    Schema:

    FRITZ!Box <> Wireguard Server <> iPhone (oder jegliches andere Gerät)

    Ich habe Probleme mit dem Routing.

    wg show

    Die Verbindung zu beiden Peers steht und funktioniert.

    Vom iPhone aus kann ich aber keinen Dienst im Heimnetzwerk erreichen.

    tcpdump -i wg0 (Wireguard Server)

    Code
    18:21:49.363383 IP 10.0.0.2.51741 > 192.168.1.25.http: Flags [S], seq 312869043, win 65535, options [mss 1240,nop,wscale 6,nop,nop,TS val 135182193 ecr 0,sackOK,eol], length 0
    18:21:57.363623 IP 10.0.0.2.51741 > 192.168.1.25.http: Flags [S], seq 312869043, win 65535, options [mss 1240,nop,wscale 6,nop,nop,TS val 135190198 ecr 0,sackOK,eol], length 0

    Hinter 192.168.1.25 steht ein Server auf dem ein Webserver läuft, zu Testzwecken mit offener Firewall.

    Der Webserver erhält keine Anfrage.

    Was ist denn falsch?

    Das iPhone soll Zugriff auf das (gesamte) Heimnetz bekommen. Dies kann ich später noch einschränken... AllowedIPs = 10.0.0.2/32, 192.168.1.0/24

  • Der Fehler ist in den Ausgaben nicht zu sehen, da sie nur die Konfiguration des Server zeigen. Ziemlich sicher hast du dem iPhone als AllowedIPs des Peers nur die IP-Adressen des WG-Servers angegeben. Dann wird auf dem iPhone auch nur dafür eine Route angelegt, und die umfasst dann nicht die Adressen in deinem Heimnetz. Das iPhone weiß also nicht, dass dein Heimnetz über den WG-Tunnel erreichbar sein soll. Umgekehrt wird das gleiche Problem auch bei der Fritzbox bestehen.

    Die AllowedIPs eines Peers sind nicht die Adressen, die der Peer ansprechen darf, sondern die, die er selbst verwenden darf, die also als Source-Adresse in Paketen vom Peer durch den Tunnel kommen dürfen. Was der Peer diesseits des Tunnels ansprechen darf, begrenzt Wireguard nicht. Das musst du mit einer Firewall machen.

    3 Mal editiert, zuletzt von NaN (18. September 2025 um 19:01)

  • Ohne einen Überblick über die Netzwerk-Konfiguration zu haben, wird es schwierig. Dennoch fallen hier direkt einige Dinge auf, die so eigentlich nicht sein können.

    1. Wofür brauchst du die MASQURADE Regel? Es geht doch um einen Heimnetz-Zugang. Dafür brauchst du eigentlich gar kein NAT.
    2. Zur Fritzbox erlaubst du nur eine IP mit /32. Gehen wir davon aus, dass das die IP der Fritzbox ist, dann kannst du nur auf die Fritzbox zugreifen, aber nicht aufs Heimnetz
    3. Dafür steht das Subentz der Fritzbox im iPhone Eintrag. Da hat es wirklich gar nichts zu suchen, denn damit leitest du den Traffic, der eigentlich ins Frirtzbox Netz gehen sollte, zum iPhone.

    Grundsätzlich: Mach dir klar, welche Daten wohin fließen müssen. In wg Konfigurationen gibt man immer nur an, welche Daten in Senderichtung fließen dürfen, aber nie, welche Daten von einem Partner empfangen werden dürfen. Das Fritzbox-Subnetz müsstest du also im iPhone und im Fritzbox-Block auf dem Server eintragen, aber nicht im iPhone Block auf dem Server. Mach dir darüber hinaus klar, was eine NAT Regel auf einem VPN Server macht. Da dein VPN Server in der "Mitte" der Verbindung sitzt, kannst du damit einen Heimnetz-Zugriff auch zuverlässig unterbinden. Nicht zuletzt: Schau dir die AVM Dokus an. LAN-LAN Konfigurationen über Fritzboxen sind speziell, vor allem im Zusammenspiel mit anderen WG Servern, da die Boxen kein Transport-Netz benutzen (Reminder: Dein MASQURADE EIntrag!). Und nicht zu vergessen: ip_forward ist an auf dem Server?

    Wenn du weitere Hilfe benötigst, brauchen wir als Erstes eine exakte Übersicht über deine Netzwerkkonfiguration, also welche Sub-Netze sind wo im Einsatz. Danach dann die Konfigurationen aller beteiligten wg Partner.

  • Anbei die Konfiguration des Peers (iPhone):

    IMG_2986.png

    Anbei die Konfiguration des Peers (FRITZ!Box):

    Code
    [Peer]
    PublicKey = ...
    PresharedKey = ...
    AllowedIPs = 10.0.0.0/24
    Endpoint = ...
    PersistentKeepalive = 5

    Die AllowedIPs eines Peers sind nicht die Adressen, die der Peer ansprechen darf, sondern die, die er selbst verwenden darf, die also als Source-Adresse in Paketen vom Peer durch den Tunnel kommen dürfen.

    Wie müssten demnach die AllowedIPs der Geräte so aussehen?

  • In wg Konfigurationen gibt man immer nur an, welche Daten in Senderichtung fließen dürfen, aber nie, welche Daten von einem Partner empfangen werden dürfen.

    Das ist genau falschrum erklärt. Wireguard überprüft nur die Source-Adressen ankommender Pakete, also was vom Peer empfangen wird. Was du meinst ist, dass der Tunnel anhand der Peer-Adressen ausgewählt wird, also effektiv nur das durch den Tunnel gesendet wird, was eine Target-Adresse in den AllowedIPs des Peers hat. Das prüft der empfangende Peer aber nicht, weil er die Information, die er dazu bräuchte, gar nicht hat.

  • Die AllowedIPs des Servers als Peer des iPhone müssen die Adressen umfassen, die du vom iPhone aus über den Tunnel erreichen willst (Fritzbox, Heimnetz, ggf. Server). Umgekehrt müssen die AllowedIPs des Servers als Peer der Fritzbox die Adressen umfassen, die du von der Fritzbox bzw. aus dem Heimnetz erreichen möchtest (iPhone und ggf Server. Erreichen ist auch im Sinne von Antwortpaketen gemeint, nicht nur, wer eine Verbindung wohin aufbauen darf).

    Die AllowedIPs der Peers des Servers sind für das iPhone die Adresse des iPhones und für die Fritzbox die Adresse der Fritzbox und des Heimnetzes. Dann stimmt das Routing.

    Ich wiederhole nochmal: Dann stimmt das Routing, aber nichts hindert das iPhone daran, andere Adressen über den Tunnel anzusprechen. Wenn du den Zugang des iPhones einschränken möchtest, musst du das auf dem Server oder im Heimnetz machen, und das geht nicht mit Wireguard selbst.

    2 Mal editiert, zuletzt von NaN (18. September 2025 um 19:36)

  • Das ist genau falschrum erklärt. Wireguard überprüft nur die Source-Adressen ankommender Pakete, also was vom Peer empfangen wird. Was du meinst ist, dass der Tunnel anhand der Peer-Adressen ausgewählt wird, also effektiv nur das durch den Tunnel gesendet wird, was eine Target-Adresse in den AllowedIPs des Peers hat. Das prüft der empfangende Peer aber nicht, weil er die Information, die er dazu bräuchte, gar nicht hat.

    Das ist doch genau das, was ich beschrieben habe. Wen interessiert, was der empfangende Client überprüft, wenn er eh nichts damit macht oder ihm Informationen fehlen? Und genau wie du schreibst: Die Allowed IPs entscheiden darüber, wohin die Daten fließen. Und da wg auch direkt die Routen dafür anlegt, kann man sich da über falsche Einträge auch mal schnell vom Zugang oder vom Internet aussperren. Hier sorgt der Eintrag dafür, dass die Pakete fürs Fritzbox Netz zum iPhone gesendet werden.

    @00philip Die Konfigurationen der Endgeräte sehen soweit gut aus. Wenn du jetzt noch die Server-Konfiguration so anpasst, wie ich es oben beschrieben habe, dann könnte es schon klappen,

  • Umgekehrt müssen die AllowedIPs des Servers als Peer der Fritzbox die Adressen umfassen, die du von der Fritzbox bzw. aus dem Heimnetz erreichen möchtest (iPhone und ggf Server. Erreichen ist auch im Sinne von Antwortpaketen gemeint, nicht nur, wer eine Verbindung wohin aufbauen darf).

    Ahh natürlich, da liegt der Fehler.

    Die FRITZ!Box antwortet und sendet ein Paket an 10.0.0.2 (iPhone).

    Das Paket wird aber verworfen, da der Tunnel für den Peer nur allowed ips: 192.168.1.1/32 gesetzt hat.

    Ich habe für den Peer (FRITZ!Box) jetzt allowed ips: 192.168.1.1/32, 10.0.0.0/24 gesetzt.
    Damit kann sie ihre Antworten ins Netz 10.0.0.0/24 senden und folglich 10.0.0.2 erreichen.

    Funktioniert!

    Ich danke euch beiden...  :thumbup:

  • 00philip 18. September 2025 um 19:46

    Hat einen Beitrag als hilfreichste Antwort ausgewählt.
    1. Wofür brauchst du die MASQURADE Regel? Es geht doch um einen Heimnetz-Zugang. Dafür brauchst du eigentlich gar kein NAT.
    2. Zur Fritzbox erlaubst du nur eine IP mit /32. Gehen wir davon aus, dass das die IP der Fritzbox ist, dann kannst du nur auf die Fritzbox zugreifen, aber nicht aufs Heimnetz

    Ich maskiere die IP damit, um nicht die öffentliche IP des Peers (als Source IP) im Tunnel zu haben.

    Das erleichert mir nachgelagerte Firewall Regeln, auf den Servern der Dienste.

    2. Genau - das war der Fehler.

  • Ich maskiere die IP damit, um nicht die öffentliche IP des Peers im Tunnel zu haben.

    Das entscheidet aber nicht die MASQURADE Regel auf dem Server, sondern in dem Fall der Client, also das iPhone. Und das kann in wg nur die IP des Transportnetzes nutzen.

    Deine Konfiguration ist immer noch ziemlich komisch, aber wenn es funktioniert, seis drum.

  • Die Allowed IPs entscheiden darüber, wohin die Daten fließen.

    Der Name des Parameters sollte eigentlich selbsterklärend sein: Das sind die Adressen, die der Peer als Source-Adresse benutzen darf. Das ist die wesentliche Funktion. Das Routing in die einzelnen Tunnel ist eine Eigenschaft der Wireguard-Implementation. Das Routing in das WG-Interface anhand dieser Adressen ist sogar optional.

    In wg Konfigurationen gibt man immer nur an, welche Daten in Senderichtung fließen dürfen, aber nie, welche Daten von einem Partner empfangen werden dürfen.

    Das ist schlicht falsch. "Welche Daten von einem Partner empfangen werden dürfen" ist das einzige, was in Wireguard überprüft wird, und das wird mit dem Parameter AllowedIPs angegeben. Das sind die Adressen, die der Peer als Source-Adresse senden darf.

  • Kommando zurück... funktioniert nicht - das Telefon war versehentlich im WLAN :pinch:

    Zitat

    The AllowedIPs entry means what IP addresses do we accept from this Peer (client)- if a network packet arrives from this peer via the wg0 interface the source IP address is checked- if it is not in this list it is dropped

    AllowedIPs im Wireguard Server ist tatsächlich die Source IP des Peer.

    Demnach müsste ja die Server-Config richtig sein.

    Code
    # FRITZ!Box
    [Peer]
    AllowedIPs = 192.168.1.1/32
    
    # iPhone
    [Peer]
    AllowedIPs = 10.0.0.2/32


    Das Subnetz der FRITZ!Box ist 192.168.1.0/24.

    Jetzt hat das iPhone folgende AllowedIPs = 10.0.0.0/24, 192.168.1.0/24
    Die FRITZ!Box hingegen folgende AllowedIPs = 10.0.0.0/24

    Das iPhone spricht in den Tunnel in ins private Netz der FRITZ!Box.
    Die FRITZ!Box spricht natürlich nur in den Tunnel.

    Habe ich das jetzt bis hier hin richtig verstanden?

    Dann liegt der Fehler in Firewall-Regeln?

  • Kommando zurück... funktioniert nicht - das Telefon war versehentlich im WLAN :pinch:

    Ja, das hab ich erwartet.

    AllowedIPs im Wireguard Server ist tatsächlich ein Source IP des Peer.

    Demnach müsste ja die Server-Config richtig sein.

    Nein, die Server Config ist nicht richtig.

    In den Fritzbox-Block muss ein 192.168.1.0/24 mit rein. Vergiss den Unsinn, den NaN da schreibt, in der Praxis entscheidet der AllowedIPs Eintrag darüber, welche Pakete in den Tunnel geleitet werden. In deinem iPhone steht die 192.168.1.0/24 drin, weil das iPhone die Pakete zum VPN Server schicken muss. In die Server-Config muss 192.168.1.0/24 in den Frtzbox Block rein, damit der Server weiß, dass er die Pakete vom iPhone mit Ziel Fritzbox zur Fritzbox schicken muss, Entsprechend muss 192.168.1.0/24 aus dem iPhone Eintrag raus: Dahin dürfen die Pakete mit Ziel Fritzbox nicht geschickt werden.

    Dazu nimm alle MASQUERADE Einträge raus. Die sind in deinem Szenario vor allem im Zusammenspiel mit einer Fritzbox kontraproduktiv.

  • Ich nehme mal an, der Server soll 10.0.0.1 sein, das iPhone 10.0.0.2, die Fritzbox 192.168.1.1 und das LAN 192.168.1.0/24.

    Auf dem Server:

    Code
    # FRITZ!Box
    [Peer]
    AllowedIPs = 192.168.1.0/24
    
    # iPhone
    [Peer]
    AllowedIPs = 10.0.0.2/32

    Auf dem iPhone:

    Code
    # WG-Server
    [Peer]
    AllowedIPs = 192.168.1.0/24, 10.0.0.1/32

    Auf der Fritzbox:

    Code
    # WG-Server
    [Peer]
    AllowedIPs = 10.0.0.1/32, 10.0.0.2/32

    oder, wenn später noch mehr Clients im 10.0.0.0/24 Netz dazukommen sollen:

    Code
    # WG-Server
    [Peer]
    AllowedIPs = 10.0.0.0/24

    Wenn du den Server gar nicht ansprechen möchtest, kannst du die 10.0.0.1/32 beim iPhone oder bei der Fritzbox oder bei beiden weglassen.

    Wie Frank schreibt, werden anhand dieser Parameter normalerweise Routingeinträge erzeugt. Die eigentliche Funktion dieser Parameter ist aber eine andere, wie schon mehrfach beschrieben, und das ist wichtig für das Verständnis der Sicherheitssituation. Was du schon im ersten Kommentar angedeutet hast, kann man nicht in Wireguard konfigurieren. Was die Peers erreichen können, schränkt Wireguard ganz und gar nicht ein. Dafür gibt es einfach keinen Parameter. Es wird nur überprüft, was der AllowedIPs Parameter für den Peer festlegt: Von welchen Adressen Pakete kommen dürfen.

    Vergiss den Unsinn, den NaN da schreibt

    Ja, so kenn ich dich. :thumbdown:

  • Jawohl, jetzt funktioniert die Verbindung wie erwartet.

    Tja... wenn sich zwei "streiten", ist der Dritte überfordert. :S

    wg server config

    FRITZ!Box config

    Code
    [Interface]
    Address = 192.168.1.1/24
    
    # wg server
    [Peer]
    AllowedIPs = 10.0.0.0/24

    iPhone config

    Code
    [Interface]
    Address = 10.0.0.2/32
    
    # wg server
    [Peer]
    AllowedIPs = 192.168.1.0/24
  • 00philip 18. September 2025 um 21:18

    Hat einen Beitrag als hilfreichste Antwort ausgewählt.
  • Wenn es nur das ist

    Es ist nicht nur das, aber das ist die wesentliche Funktion, wonach der Parameter auch benannt ist, aber mit Lesen hast du ja so deine Schwierigkeiten, wenn du sonst zugeben müsstest, dass du was falsch erklärt hast.

    In wg Konfigurationen gibt man immer nur an, welche Daten in Senderichtung fließen dürfen, aber nie, welche Daten von einem Partner empfangen werden dürfen.

    Gib zu, dass das verkehrt ist. Kannst du nicht, oder?

  • Wenn es nur das ist: Wie sagst du dem VPN Server denn, dass er die Pakete für die Fritzbox zur Fritzbox schicken soll, und nicht zu einem seiner anderen VPN Peers?

    Ja, kein Zweifel du hattest schon Rest.

    Eure Antworten überschneiden sich nur immer, mit dem was ich gerade schreibe - da sehe ich die Antwort noch nicht.

    Das ist doppelt gemoppelt, schadet aber auch nicht.

    Ja, es ging nur darum den Tunnel zum Laufen zu bringen.

    Die Clients von außen sind dann sowieso in einem anderen Subnetz, nämlich 172.16.0.0/24.

    Ich musste jetzt nur in der FRITZ!Box die Verbindung nochmal neu anlegen.

    Angepasst wurde AllowedIPs = 172.16.0.0/24 und passt nun zum Subnetz der Clients.

    ---

    Mal noch nebenbei eine Frage.

    Ausgehend davon, dass es mehrere Client gibt...

    Ist es in der Server Config relevant für die Peers die genaue Adresse zu bestimmen?

    Code
    [Peer]
    AllowedIPs = 172.16.0.1/32
    
    [Peer]
    AllowedIPs = 172.16.0.2/32
    
    [Peer]
    AllowedIPs = 172.16.0.3/32

    Oder soll ich bei den Peers 172.16.0.x/24 festlegen?

    Die FRITZ!Box schreibt ja in ihre eigene Interface Adresse auch 192.168.1.1/24 statt /32 Subnetzmaske.