WireGuard VPN Server mit Web Interface einrichten

Hallo zusammen,
erstmal vielen Dank für die Anleitung ich habe nur ein Problem ich bekomme irgendwie keine aktive Verbindung mit einem Gerät her ob Iphone oder Windows.
Ich habe zwar den QR Code bekommen aber es zeigt dann leider keine Aktive Verbindung.
und ich sitz da schon zwei Tage dran :smiley:

Vielen Dank und einen schönen Tag noch

Hi,

oh jetzt musst du glaube ich ein wenig mehr ausholen.
Du hast im WG Webinterface unter Status keine aktive Verbindung richtig?

Fragen:

  1. Hast du eine Firewall, wenn ja ist der Port offen?
  2. Hast du IP Forwarding aktiviert?
  3. Hat der WG Dienst wirklich neugestartet nachdem du die Config angelegt hast?
  4. Wie schaut deine Server (wg0.conf) und deine Client Config aus?

IP Adressen kannst du ruhig zensieren.

Gruß

leider bin ich in dem Thema auch nicht so fortgeschritten.
Ja genau ich bekomm keine aktive verbindung her und auch wenn ich meine IP und Passwort ändere und mich dann versuch neu anzumelden kommt keine Verbindung.

Ich weiß nicht ob dass das richtige ist was ich da angefügt habe

Gruß

Hi,

ja die Firewall-Regeln sehen gut aus. Jedoch brauche ich um zu helfen etwas mehr Infos s.o.

Gruß
dominion

Leider kenn ich mich nicht so aus. :disappointed:
wo muss ich das eingeben?
beim Server unter Iptabels?

Ich habe das einfach so übernommen

#!/bin/bash

Version: 0.1

Datum : 14.02.2022

Dieses Skript lädt die Regeln für die Firewall des VPS
IONOS
INTDEV="wg0 "
#Variable für den Wireguard - Tunnel
EXTDEV="ens192 "

ens192 ist die NW-Schnittstelle bei IONOS. Auf anderen

Systemen ggf. ändern. Mit Befehl ip a kann die NW
angezeigt werden
MANGOADR=„10.252.1.2“
#VPN-interne Adresse des Mango ANPASSEN!!!

Ketten leeren

iptables -F
iptables -X

Verwerfe erstmal alles, indem die Default-Policy auf DROP

gesetzt wird
iptables -P INPUT DROP
#iptables -P OUTPUT DROP #Bleibt offen
iptables -P FORWARD DROP

Die NAT-Tabelle muss extra geleert werden

iptables -t nat -F

Ports freigeben

#Bestehende Verbindungen zulassen, Wer anfragt bekommt auch
eine Antwort
iptables -A INPUT -i $EXTDEV -m state --state
ESTABLISHED,RELATED -j ACCEPT
#SSH erlauben
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
############################################################
#############
#Helium
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS
–set-mss 1240
iptables -A INPUT -p tcp --dport 44158 -j ACCEPT
iptables -A FORWARD -i $EXTDEV -o $INTDEV -p tcp --syn
–dport 44158 -m conntrack --ctstate NEW -j ACCEPT
#Port intern natten / routen
iptables -t nat -A PREROUTING -i $EXTDEV -p tcp --dport
44158 -j DNAT --to-destination $MANGOADR
############################################################
#############
#Wireguard VPN – Port freigeben
iptables -A INPUT -p udp --dport 51820 -j ACCEPT
#Wireguard GUI aus Tunnel erlauben
iptables -A INPUT -i $INTDEV-p tcp --dport 5000 -j ACCEPT
#Ports ablehnen
iptables -A INPUT -i $EXTDEV -p tcp --dport 113 -j REJECT

localhost darf alles

iptables -A INPUT -i lo -j ACCEPT

Akzeptiere Verbindungsaufbauten von innen

iptables -A FORWARD -i $INTDEV -j ACCEPT
iptables -A FORWARD -i $INTDEV -o $EXTDEV -m state --state
NEW -j ACCEPT

Akzeptiere bestehende Verbindungen

iptables -A FORWARD -i $INTDEV -o $EXTDEV -m conntrack
–ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $EXTDEV -o $INTDEV -m conntrack
–ctstate RELATED,ESTABLISHED -j ACCEPT

„Natte“ alle Pakete bei der Weiterleitung nach außen

iptables -t nat -A POSTROUTING -o $EXTDEV -j MASQUERADE

Aktiviere das Forwarding

sysctl -w net.ipv4.ip_forward=1
sudo sysctl -p
#Wireguard neu starten
systemctl restart wgui-web.service

Grüße

Du musst dem Client die Route zum Router Netzwerk mitteilen. Also dein VPN Client muss wissen das er das Netz/Subnetz erreichen kann.

Trag mal das Netzwerk des Routers unter „AllowedIPs“ ein und versuche es.

Gruß
dominion

Erst mal danke für diese wunderbare Anleitung.

Ich komme so weit, dass die Verbindung von Clients zu Servern klappt, jedoch das Aufrufen von externen Seiten nicht funktioniert. Ich nutze auf dem Systemd firewalld und habe probiert, die pre und post commands entsprechend anzupassen (habe es auch schon mit den iptables commands probiert):

firewall-cmd --zone=public --add-masquerade; firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i %i -o eno1 -j ACCEPT; firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eno1 -j MASQUERADE

firewall-cmd --zone=public --remove-masquerade; firewall-cmd --direct --remove-rule ipv4 filter FORWARD 0 -i %i -o eno1 -j ACCEPT; firewall-cmd --direct --remove-rule ipv4 nat POSTROUTING 0 -o eno1 -j MASQUERADE

Die Portfreigabe via firewalld hat imo geklappt, da:

# tcpdump -i wg0
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on wg0, link-type RAW (Raw IP), snapshot length 262144 bytes
10:19:43.968380 IP 10.252.1.1.32319 > dnsforge.de.domain: 14216+ A? chat.signal.org. (33)

Im anderen Interface eno1 sehe ich jedoch nichts. Auch der Versuch via wg0 vom Hostsystem einen curl abzusetzen, schlägt fehl:

# curl --interface wg0 http://httpbin.org/ip
curl: (7) Failed to connect to httpbin.org port 80: No route to host

Der Forward output der iptables:

# iptables -vnL FORWARD
Chain FORWARD (policy DROP 1018 packets, 62703 bytes)
 pkts bytes target     prot opt in     out     source               destination
   58  3455 ACCEPT     all  --  wg0    eno1    0.0.0.0/0            0.0.0.0/0

Habt ihr noch Ideen, was ich verpeilt haben könnte? Danke im Voraus!

EDIT: Hier der postrouting output:

Chain POSTROUTING (policy ACCEPT 6662 packets, 405K bytes)
 pkts bytes target     prot opt in     out     source               destination
 2506  153K MASQUERADE  all  --  *      eno1    0.0.0.0/0            0.0.0.0/0

hast du das Forwarding aktiviert?

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
sysctl -p
1 „Gefällt mir“

Ja, die Einstellungen sind geladen (bestätigt durch sysctl -a).

Ich weiß nicht, ob es problematisch ist, aber der wireguard debug wirft folgendes ab:

Mar 01 08:50:37 host kernel: wireguard: wg0: Packet has unallowed src IP (192.168.xx.xx) from peer 21 (84.xx.xx.xx:46130)

Die src IP ist dabei die interne IP im Heimnetz und die peer IP ist die externe IP. Soll das so?

Es gibt einfach Probleme, wenn auf dem System Docker installiert ist. Docker fügt einfach eine CHAIN hinzu, die gewissermaßen alles abfängt. Habe die Anleitung um die PostUps von hier ergänzt und jetzt funktionieren sie. Danke noch mal für deine Hilfe @dominion !

ach ist nicht wahr … super das du es debugged hast und es nun läuft :+1:

1 „Gefällt mir“

Hallo zusammen,

ich habe auch nach der Anleitung den Wireguard Server aufgesetzt. Basis ist Debian 11 als virtuelle Maschine auf einem proxmox Host. Router ist ein Lancom, auf diesem habe ich das Portforwarding UDP 51820 zum wireguard server aktiviert. Am Android Handy habe ich dann die Verbindung per QR Code eingerichtet. Wenn ich auf Verbinden drücke, wird bzw. ist die Verbindung angeblich hergestellt, aber die Wireguard gui zeigt unter Status keinen Eintrag an. Ich kann am Handy mit aktiviertem VPN keine internen Adressen erreichen.
Wie könnte ich den Fehler weiter eingrenzen? Mein Verdacht ist eher der Router, daher die Frage: kann ich am Wireguard Server in irgendeinem Log sehen, ob überhaupt eine Verbindungsanfrage stattfindet?

Wird bestimmt ein Routingproblem sein. Hier wird beschrieben wie du Wireguard Logs auslesen kannst:

Ich hab jetzt versucht, aus dem internen Netz eine Verbindung herzustellen. Also WLAN an und die IP des Wireguard Servers in der Config am Handy angegeben. Ergebnis das selbige! Keine Verbindung und der WG-Server zeigt auch nirgends Einträge! Die Konsole mit watch wg0 zeigt keinerlei Verbindungsversuche. So als ob der auf der falschen Schnittstelle laufen würde…
Also stimmt hier was in der Grundkonfig schon nicht. Die ufw-Firewall habe ich auch deaktiviert.
Wieso baut der nicht mal lokal eine Verbindung auf?
Ich denke auch nicht, dass der Router das Problem ist. Dessen Log zeigt den Verbindungsversuch bzw. die Weiterleitung an:

[IP-Router] 2023/10/01 10:10:43,801  Devicetime: 2023/10/01 10:10:44,773
IP-Router Rx (INTERNET, RtgTag: 0):
DstIP: 10.1*****, SrcIP: ********, Len: 176, DSCP: CS0/BE (0x00), ECT: 0, CE: 0
Prot.: UDP (17), DstPort: 51820, SrcPort: 26413
Route: LAN-1 Tx (INTRANET)

Problem gelöst: Ursache war das fehlende wg0 Interface! Die config dazu wurde zwar erzeugt aber dann kein Interface angelegt. Warum hab ich nicht rausgefunden, aber ein manuelles Anlegen half natürlich. Sofort war ein connect möglich.
Danke für die sehr gelungene Anleitung :+1:

1 „Gefällt mir“

Heyho,
erstmal vorweg die Anleitung ist echt super einfach und gelingt auch perfekt, Ich habe sie befolgt (mit kleinen änderungen zur Netzwerk schnitstelle diese heißt bei mir nicht eth0 und die VPN interne IP habe ich auch abgeändert zur konfliktvermeidung) Ich bekomme zwischen den CLienten 1+2 eine verbindung zum server, sowie auch eine ins Internet durch den server selbst. für mich ist es nun aber auch erforderlich das client1 sowie client2 untereinander „reden“ können ich bekomme hier aber weder einen ping noch weiteres durch zwischen den clienten. muss hier nochmal etwas speziell hinzugefügt werden in die client oder server configs damit dies funktioniert? (ähnlich wie bei openVPN)

greets

Thh

hat er bei dir eine route angelegt für den traffic des netztes? schau mal mit „ip r“ auf einem client?

der server routed das dann eigentlich…

Oh schnelle antwort damit habe ich jetzt nicht gerechnet

  • ip r
    default via 1.1.1.1 dev ethx
    1.1.1.0/24 dev ethx proto kernel scope link src 1.1.1.2

so sieht die ausgabe aus (habe IP sowie die schnitstelle abgeändert) denke mal da fehlt dann wohl tatsächlich die route im client?
wie kann ich diese nachlegen?

greets

Thh

auf dem server musst du das netz angeben unter „allowed ips“, diese routen werden dann aufm client gesetzt.