Wireguard - Clients haben keine Internetzugang durch den Tunnel

  • Hallo Zusammen,

    .

    auf meinem Netcup rootserver läuft Ubuntu 18.04 lts. Darin habe ich Wireguard als Server installiert, mein Android-Smartphone soll der Client/PEER sein.


    Ich bin soweit gekommen, dass ein Tunnel zustande kommt, was ich daran sehen kann, dass Daten hin und her geschickt werden (rx/tx). Ebenfalls lassen sich die IP-adressen des Servers (192.168.123.1) und des Telefons (192.168.123.3) gegenseitig anpingen). Jedoch bekommt mein Smartphone durch den Tunnel keinen Internetzugang mehr.


    Muss da noch irgendwas auf meinem Server geroutet werden (von wg0 zu eth0)? Wie geht das?


    Vielen Dank schonmal für die Hilfe!

    der_micha

  • Muss da noch irgendwas auf meinem Server geroutet werden (von wg0 zu eth0)? Wie geht das?

    Zunächst musst du auf den Clients für den Server-Peer die Allowed-IPs von 0.0.0.0/0 einrichten.

    Dann brauchen die Clients eine Default Route zu dem Wireguard Server.


    Auf dem Server musst du dann noch ein NAT einrichten, das geht mit iptables.

    iptables -t NAT -A POSTROUTING -i wg0 -o eth0 -j MASQUERADE


    Den hier darfst du auch nicht vergessen:

    sysctl -w net.ipv4.ip_forward=1


    Das ganze hält bis zum nächsten Neustart. Danach musst du nochmal Hand anlegen.

  • Wow, vielen Dank schonmal für die schnelle Antwort!

    Auf dem Server musst du dann noch ein NAT einrichten, das geht mit iptables.

    iptables -t NAT -A POSTROUTING -i wg0 -o eth0 -j MASQUERADE

    Leider laufe ich hier in eine Fehlermeldung:

    - wenn ich "NAT" schreibe kommt als Meldung:

    iptables v1.6.1: can't initialize iptables table `NAT': Table does not exist (do you need to insmod?) Perhaps iptables or your kernel needs to be upgraded.

    - wenn ich in o.g. Befehl "nat" schreibe, dann kommt:

    iptables v1.6.1: Can't use -i with POSTROUTING Try `iptables -h' or 'iptables --help' for more information.


    Ebenfalls schreibst Du:

    Dann brauchen die Clients eine Default Route zu dem Wireguard Server.

    Was genau meinst Du?

  • Zwei zusätzliche Anmerkungen:

    1. Um die Default-Route auf Client-Seite kümmert sich beispielsweise die Android-Wireguard-App.
    2. Auf Serverseite lässt sich die vorgenannte Einstellung "net.ipv4.ip_forward = 1" in einer Datei unter /etc/sysctl.d/ unterbringen (bei Systemstart ausgeführt, d.h. im laufenden Betrieb wie von H6G beschrieben zunächst von Hand durchführen) und die iptables-Einträge lassen sich direkt über die Konfigurationsdatei (/etc/wireguard/wg0.conf o.ä.) verwalten; im Nachfolgenden ist "ens3" ggf. durch "eth0" zu ersetzen:
    Code: /etc/wireguard/wg0.conf
    1. [Interface]
    2. Address = 192.168.123.1/24
    3. SaveConfig = false
    4. #NB: Do specify all required interfaces ("-o interface") here
    5. PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
    6. PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
    7. #[...]
  • Hallo Zusammen,


    vielen Dank nochmals.


    Hab mir mit folgendem Link auf Linux Magazin selbst geholfen: Aus Linux-Magazin 01/2018 VPN mit Wireguard aufsetzen


    Folgender Befehl, hat dabei die Lösung gebracht:

    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE


    Zwei zusätzliche Anmerkungen:

    1. Um die Default-Route auf Client-Seite kümmert sich beispielsweise die Android-Wireguard-App.
    2. Auf Serverseite lässt sich die vorgenannte Einstellung "net.ipv4.ip_forward = 1" in einer Datei unter /etc/sysctl.d/ unterbringen (bei Systemstart ausgeführt, d.h. im laufenden Betrieb wie von H6G beschrieben zunächst von Hand durchführen) und die iptables-Einträge lassen sich direkt über die Konfigurationsdatei (/etc/wireguard/wg0.conf o.ä.) verwalten; im Nachfolgenden ist "ens3" ggf. durch "eth0" zu ersetzen:
    Code: /etc/wireguard/wg0.conf
    1. [Interface]
    2. Address = 192.168.123.1/24
    3. SaveConfig = false
    4. #NB: Do specify all required interfaces ("-o interface") here
    5. PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
    6. PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
    7. #[...]

    Davon habe ich auch gehört, allerdings bekomme ich immer einer Parsing Error von Wireguard, wenn ich "Postup" in der conf habe - seltsam.

  • [...] allerdings bekomme ich immer einer Parsing Error von Wireguard, wenn ich "Postup" in der conf habe - seltsam.

    Vielleicht einmal die o.g. Zeilen direkt hineinkopieren (Groß-/Kleinschreibung spielt bei meiner Wireguard-Version keine Rolle) und sicherstellen, dass eine aktuelle Version installiert ist (für ältere Debian-/Ubuntu-Distributionen sind Dritt-Repositories upstream verfügbar)?

    Code
    1. # dpkg --list wireguard | grep "^ii"
    2. ii wireguard 1.0.20200206-0ppa1~16.04 all fast, modern, secure kernel VPN tunnel (metapackage)
  • Bei AllowedIPs würde ich noch ::/0 eintragen, sonst könntest du IPv6-Leaks bekommen.


    Generell würde ich gleich auch IPv6 einrichten.

    Danke an alle für die Anmerkungen. IPv6 und DNS durch den Tunnel stehen noch auf der ToDo-Liste. Ich frage mich aktuell welchen IPv6-Berich ich unter [Interface} in der Serverconf angeben muss: Die ULA-Adressen, die mit fd.. anfangen?

  • Entweder Unique Local Addresses (ULA) nach RFC4193 (Beispiel siehe hier), oder öffentliche IPv6-Adressen nach Segmentierung (Beispiel siehe hier).

    Ah cool, das werde ich bei Gelegenheit mal ausprobieren. Mit dem Android Smartphone klappt alles super, nur der Windowslaptop hat keine Konnektivität nach außen. Eventuell haut hier eine Firewall dazwischen.


    p.s. die Befehlzeilen mit "PostUp" und "PostDown" funktionieren, wenn man: wg-quick up /etc/wireguard/wg0.conf anstattwg setconf wg0 /etc/wireguard/wg0.conf nimmt.


    Scheint ein Bug zu sein!