Wireguard/VPN in der SymBox

Wir evaluieren gerade, wie wir Wireguard für euch sinnvoll in die SymBox integrieren können. Zum nächsten 7.1er Update werden die Kernel Module und die Wireguard Userspace Tools (wg) schon einmal integriert sein. nf_tables ist dann ebenfalls mit an Board.

Zusätzlich überlegen wir zwei passende PHP-Modul zu erstellen:
a) Ein Tailscale Modul, welches Tailscale herunterlädt und beim Symcon start auch passend „tailscale up“ aufruft. Dadurch kann entweder Tailscale direkt starten, oder per Variable vom Kunden aktiviert-/deaktiviert werden. Das ist quasi ein simples Zero-Conf VPN bei dem man nur einen AuthCode benötigt. Zusätzlich kann dies als Startpunkt dienen, falls Ihr Anbieter XY integrieren wollt.
b) Im SymOS würden wir die WireGuard Konfiguration hinterlegen mit der Option den WireGuard VPN Tunnel direkt zu „starten“. Alternativ kann man dort alles vorbereiten und dann per PHP-Modul Kundenseitig den Tunnel bei Bedarf öffnen/schließen. Dadurch kann der Kunde immer volle Kontrolle behalten, ob der Integrator zugreifen darf. (Optional kann es auch immer aktiv sein, wenn gewünscht)

Da meine Wireguard Kenntnisse noch etwas rudimentär sind, wollte ich euch fragen, wie Ihr euch die GUI Integration in SymOS vorstellen würdet und welche Optionen/Parameter ihr für sinnvoll erachtet.

Ich tagge mal @demel42 und @ubittner die im Wünsche Ticket aktiv waren :slight_smile:

paresy

1 „Gefällt mir“

@paresy

Das hört sich viel versprechend an.

Auf jeden fall solle WireGuard sowohl als Client, als auch als Server agieren können.
Für die, welche die SymBox hinter einem CGNAT sich befinden, macht es Sinn, dass sich die Symbol auf einen externen WireGuard Server (Bounce Server) verbinden kann. Somit kann der Road Warrior über diesen Bounce Server (Jump Server) sich mit der SymBox und dem entsprechenden Subnetz(e) verbinden.

Wenn WG als Server, dann sollte es eine Liste geben, in der die Clients angelegt werden können.

generell w#re es schön, wenn die Config heruntergeladen werden könnte oder auch als QR Code angezeigt werden kann.

Sofern es meine Zeit zulässt unterstütze ich gerne. Komm einfach auf mich zu.

Uli

Ich selbst verwende Tailscale. Wobei ich es auf meinem Win-Server installiert habe, der quasi als Gateway fungiert was aber auch z.b. auf einer Symbox möglich wäre. Somit komme ich von unterwegs mit den „normalen“ IP Adressen auf alles drauf. Ich bin davon wirklich angetan.

Ja, Tailscale ist wirklich extrem einfach. Das war vorhin ein Kommando auf der SymBox und zack hatte ich eine Verbindung von meinem Rechner :slight_smile:

paresy

Ich kann @ubittner nur zustimmen - derzeit habe ich es genau so für mich eingerichtet. (RaspPI mit IPS & WG, ein vServer bei Hetzner mit WG und dann alle Fanilienmitglieder mit WG Client).
Wenn man das noch etwas clever macht kann man so sehr schön mehrere Netze/Häuser verbinden!

Als Oberfläche nutze ich GitHub - ngoduykhanh/wireguard-ui: Wireguard web interface. Das Interface ist simple aber effektiv!

Gruß Heiko

ei prima, das ist ja super!

Zu Tailscale bin ich via RaspberryMatic gekommen; da ist das ein Haken um das grundsätzlich zu aktivieren und eine Schaltfläche, um die Authentifizierung durchzuführen. Das ruft dann einfach die Login-Seite von Tailscale auf, dort anmelden und fertig. Darüber hinaus war nichts zwingend erforderlich (also keinen AuthCode oder so) - natürlich ein Konto bei Tailscale.
Und ich habe dann im Tailscale-Konto „Disable expire key“ gemacht, damit der Eintrag erhalten bleibt.

Ist schon wirklich extrem einfach und schnell.

Die Möglichkeit das (auch durch den Benutzer) Aus/Ein zu schalten ist sicherlich nicht falsch.

Von WireGuard habe ich überhaupt keine Erfahrung, nur ein bisschen eingelesen und fand ich auch schon komplizierter.

Finde ich toll und freue mich darauf!

zeroTier ist fast noch einfacher als tailscale und kann sogar selbst gehosted werden als mesh vpn
just my 2 cents

Super liebe Symcons :+1:, lange gewünscht und nun freue ich mich, dass auszuprobieren.

Moin,

Tailscale habe ich gleich ausprobiert. Funktioniert wie beschreiben.

Bin sehr zufrieden :+1:

vg Dieter

1 „Gefällt mir“

hallo @ubittner,

hast Du ggf. eine Beispiel Doku, wie man Du den Jumpserver aufgesetzt hast?
Danke!

Muss ich mal raus suchen… und zusammen stellen.

Ist allerdings im Moment nur auf ipv4 Basis.

Uli

Die nachfolgende Anleitung beschreibt die Einrichtung von WireGuard mittels eines Bounce Servers, wenn euer Heimnetz z.B. hinter einem CGNAT Netz liegt und ihr keine öffentliche IPv4 Adresse besitzt.

Was diese Anleitung nicht berücksichtigt ist:

  • IPv6
  • Eigener DNS Server
  • Firewall-Einstellungen
  • Vollständigkeit und Richtigkeit der Anleitung

Szenario:
Road Warrior (Client) <----------> Bounce Server <----------> Homebase (Client)

Für den Bounce Server benötigt ihr einen Server mit statischer IPv4 Adresse. Je nach dem was ihr alles über den VPN laufen lassen wollt, müsst ihr den Server dementsprechend dimensionieren.
Ich nutze es nur zur Administration von Systemen, daher reicht ein kleiner vServer, Cloud Sever, VPS Server aus, den es bereits bei einigen Hostern ab 1,00 € im Monat gibt.

Eine Basis-Konfiguration von WireGuard kann hier erstellt werden oder man erstellt sie gemäß der WireGuard Homepage.
Die Basis-Konfiguration muss noch um weitere Parameter ergänzt werden, was im Laufe dieser Anleitung beschrieben wird.

Diese Anleitung umfasst die Installation auf Linux Systemen. Sollte es anderes System bevorzugt werden, so ist die entsprechende Installation für das entsprechende System zu nutzen.

Fangen wir mit der Installation von WireGUard auf dem Bounce Server an:

Bounce Server (Ubuntu VPS Server):

ssh <username>@<server ip address> -p<port>

sudo -i

apt install wireguard

cd /etc/wireguard

nano wg0.conf

-> Konfiguration des Bounce Servers einfügen (siehe unten)

chown -v root:root /etc/wireguard/wg0.conf

chmod -v 600 /etc/wireguard/wg0.conf

perl -pi -e 's/#{1,}?net.ipv4.ip_forward ?= ?(0|1)/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf

sysctl -p

sysctl net.ipv4.ip_forward

wg-quick up wg0

systemctl enable wg-quick@wg0.service

systemctl stop wg-quick@wg0.service

systemctl start wg-quick@wg0.service

wg

reboot

Diese Konfiguration ist für den Bounce Server zu verwenden:

# WireGuard Bounce Server
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = oERIsTFWPAFUElIxSARcEV9rIkB82VhW34r/2Pn1Png=
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
MTU = 1420

# Homebase Client
[Peer]
PublicKey = eONE0n/vSXiCZ50s2t2q+oM5o4Om4nRpf5smAYlkiCY=
PresharedKey = M7s1ZL6yATQrUYoOsoqTcRJGKMZDdqAglruM3vt40aw=
AllowedIPs = 10.0.0.2/32, 192.168.111.0/24

# Road Warrior Client
[Peer]
PublicKey = LILXdGf98npfHRbVBdO5hbnNzEOLFxFeYhWwOugkijY=
PresharedKey = oGvHguq4bh8Eh03D6d01oA3RMzj9/ahaoqxbH4x+eHk=
AllowedIPs = 10.0.0.3/32

Bei iptables muss ggfs. das Interface angepasst werden.
Den MTU Wert müsst ihr ermitteln. Ihr könnt ihn auch weglassen.
Meistens bieten die Provider eine vorgeschaltete Firewall an. Hier müsst ihr den WireGuard Port 51820 noch freigeben.
192.168.111.0/24 muss auf das entsprechende Subnetz des Heimnetzes geändert werden.

Anschließend kümmern wir uns die Installation um unseren Homebase (Client), als Beispiel ein Raspberry Pi in euerem Heimnetz:

Homebase (Raspberry Pi):

ssh <username>@<raspberry pi ip address>

sudo -i

apt-get install wireguard

cd /etc/wireguard

umask 077

nano wg0.conf

-> Konfiguration des Homebase Client einfügen (siehe unten)

chown -v root:root /etc/wireguard/wg0.conf

chmod -v 600 /etc/wireguard/wg0.conf

perl -pi -e 's/#{1,}?net.ipv4.ip_forward ?= ?(0|1)/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf

sysctl -p

sysctl net.ipv4.ip_forward

wg-quick up wg0

systemctl enable wg-quick@wg0.service

systemctl stop wg-quick@wg0.service

systemctl start wg-quick@wg0.service

wg

reboot

Diese Konfiguration ist für den WireGuard Homebase Client zu verwenden:

# Homebase
[Interface]
Address = 10.0.0.2/24
ListenPort = 51820
PrivateKey = 0AsSlkcA+Qa0V3JDJgOi2RjLLqeWvMe+0Hu+gLeWaH0=
MTU = 1420
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# WireGuard Bounce Server
[Peer]
PublicKey = X9/DTyDXAP7ejB2It7YWKw1r8P6eIqyjvi2968lKoks=
PresharedKey = M7s1ZL6yATQrUYoOsoqTcRJGKMZDdqAglruM3vt40aw=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = my_public_server_ipv4_address:51820
PersistentKeepalive = 25

Auch hier gilt Bei iptables muss ggfs. das Interface angepasst werden.
MTU anpassen, bzw. weglassen.
my_public_server_ipv4_address durch eure öffentliche IPv4 Adresse ersetzen oder ihr legt euch einen DNS Record an.

Abschließend muss noch der Road Warrior (Client) installiert und konfiguriert werden.

Hier könnt ihr wählen ob es euer Handy oder ein Laptop ist. Beachtet eindfach die dafür vorgesehene Installation und fügt die Konfiguration ein oder lasst euch die Config als QR-Code anzeigen.

Road Warrior Konfiguration:

# Road Warrior
[Interface]
Address = 10.0.0.3/24
ListenPort = 51820
PrivateKey = 0IbdT8VraNLXbYAXQBty5VirL5NWZLNuehIPkBn1rE0=
MTU = 1420

[Peer]
PublicKey = X9/DTyDXAP7ejB2It7YWKw1r8P6eIqyjvi2968lKoks=
PresharedKey = oGvHguq4bh8Eh03D6d01oA3RMzj9/ahaoqxbH4x+eHk=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = my_public_server_ipv4_address:51820
PersistentKeepalive = 25

Viel Spaß beim ausprobieren.

Uli

Mega! Ich Danke Dir für die ganzen Infos!

@paresy

Hallo Michael,

kann ich schon WireGuard nativ nutzen?
Wohin muss die config geschrieben werden? /etc/wireguard/wg0.conf ?

Habt ihr noch vor ein WireGuard Modul neben dem bereits vorhandenen Tailscale Modul zu schreiben?

Uli

Ja, wir werden den WireGuard Server direkt ins SymOS integrieren, sodass man das passende Config File auch direkt herunterladen kann. Dort sind wir aber noch dran. Noch ein wenig Geduld :slight_smile:

paresy

2 „Gefällt mir“

Hi Michael,

wie weit seid ihr? :wink:

Uli

Guten Morgen Michael,

kann ich nativ Wireguard in der 7.1 jetzt schon nutzen. Modul brauche ich erstmal nicht.
Wohin muss die wg.conf gespeichert werden?
Falls nein, wann können wir damit rechnen?

Gruß
Uli