fohnbit
Goto Top

Wireguard auf Linux einrichten

Hallo!

Ich möchte mir gerne auf meinem öffentlichen Server einen Wireguard Server einrichten.
Ich habe den Server installiert und das Interface wg0 hinzugefügt. Die private und public keys habe ich eingefügt.
Auch habe ich am Linux Server das Routing eingeschaltet:
    1. Uncomment the next line to enable packet forwarding for IPv4
    net.ipv4.ip_forward=1

    Meine wg.conf:
    [Interface]
    Address = 10.11.12.1/24
    PrivateKey = yOQyExN4x????CKJIerY/O3dsaO3t9xMIWBKdrbGR2M=
    ListenPort = 51820
    
    [Peer]
    PublicKey = aDnTvKI++????qHFUc2Tparg+FsSqF3t1hnIUvOhvDE=
    AllowedIPs = 10.11.12.100/32

    ich möchte als VPN Netz das Netz 10.11.12.0/24 nutzen. Der Server soll 1 und die Clients dann ab 100 bekommen

    wg show zeigt:
    nterface: wg0
      public key: JLgtKFCAY????1cm9Md68X/eH0eNDvcUEwYy3uF9B0=
      private key: (hidden)
      listening port: 51820
    
    peer: aDnTvKI++exZ6q????arg+FsSqF3t1hnIUvOhvDE=
      allowed ips: 10.11.12.100/32

    Auf meinem MacBook habe ich dann den Client eingerichtet mit der folgenden Config:
    [Interface]
    PrivateKey = aGA7iotNwU?????OD25iYDmnTpuIO0dXR6KvznHs=
    Address = 10.11.12.100/24
    
    [Peer]
    PublicKey = JLgtKFCAYM???????Md68X/eH0eNDvcUEwYy3uF9B0=
    AllowedIPs = 10.11.12.1/32
    Endpoint = myvpn.com:51820

    Ich kann am Server die IP 10.11.12.1 pingen
    ich kann am Client die IP 10.11.12.100 pingen

    Jedoch nicht untereinander. Sollte ich am Server erkennen, ob der Client verbunden ist? Am Client zeigt er es jedenfalls an

    Danke!

Content-ID: 43497002594

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

Ausgedruckt am: 22.11.2024 um 08:11 Uhr

markushi
Lösung markushi 19.10.2023 um 20:19:00 Uhr
Goto Top
Hi,

ich kann nur empfehlen, die GUI für Wireguard einzurichten bzw. zu nutzen. Einzurichten gibts da ja nicht viel. Findest du hier. Nach einem Download einfach unter /etc den Ordner wireguard anlegen und die ui starten. Dann kannst du eine Web-UI aufrufen. Schön beschrieben ist die Einrichtung auch hier, damit hab ich es eingerichtet.

Grüße
michi1983
michi1983 19.10.2023 um 20:43:13 Uhr
Goto Top
Hallo,

denkst du, dass es schlau ist, hier private und public keys zu posten?

Gruß
Fohnbit
Fohnbit 19.10.2023 um 20:44:32 Uhr
Goto Top
Zitat von @michi1983:

Hallo,

denkst du, dass es schlau ist, hier private und public keys zu posten?

Gruß

Nein, habe Sie auch mit manchen ??? maskiert
Avoton
Avoton 19.10.2023 um 21:33:42 Uhr
Goto Top
Moin,

Dein Client Interface ist falsch, da muss eine /32 Maske hin.

Gruß,
Avoton
Fohnbit
Fohnbit 20.10.2023 um 05:46:24 Uhr
Goto Top
Zitat von @Avoton:

Moin,

Dein Client Interface ist falsch, da muss eine /32 Maske hin.

Gruß,
Avoton

Danke, aber muss ich dann bei allowedIP das ganze Netz freigeben?
Also 10.11.12.0/24 statt 10.11.12.0/32
aqui
aqui 20.10.2023 aktualisiert um 12:49:04 Uhr
Goto Top
Deine Konfig ist soweit richtig! Die internen Client IPs haben immer die Maske des verwendeten Netzes bzw. wie groß man dieses wählt. Die Allowed IPs haben pro Peer dann im internen IP Netz immer eine /32 Hostmaske.
Alle Details zum WG Setup findest du, wie immer, im hiesigen Wireguard Tutorial.
Sollte ich am Server erkennen, ob der Client verbunden ist?
Ja, in jedem Fall. Das Kommando am Server dazu ist wg show und das sollte dann sowas zeigen:
wgshow

Das was du siehst ist doch ein erwartbares Verhalten und entspricht deiner Konfig. Client kann den Server pingen und umgekehrt über das interne Wireguard IP Netz. Mehr hast du ja auch gar nicht konfiguriert.
muss ich dann bei allowedIP das ganze Netz freigeben?
Nein! Vom internen WG IP Netz gibst du immer nur die /32er Host IP des Peers an unter den "AllowedIPs" und nicht das gesamte IP Netz sonst wäre das IP Routing nicht eindeutig. (Siehe o.a. Tutorial)
Aktuell für dich nicht ganz so relevant, weil du ja nur Client und Server über das interne VPN IP Netz verbindest und mit der o.a. Konfig ja aktuell keine IP Netze routest.
Beachte auf dem Mac auch immer die lokale Firewall!! Um den Mac pingen zu können oder sonstwie auf den zuzugreifen muss die FW das erlauben.
Works as designed. face-wink

Nebenbei:
Die Wireguard Frickelei mit einem Extra VPN Client hättest du dir sparen können, denn mit einer entsprechenden Strongswan IPsec Konfig auf dem vServer hättest du problemlos den bordeigenen IKEv2 VPN Client nutzen können. Ebenso bei Windows und allen Smartphones. Guckst du dazu hier.
pasu69
pasu69 20.10.2023 um 19:56:39 Uhr
Goto Top
https://www.pivpn.io/

Wenn man anfängt mit dem Thema, ist das ziemlich hilfreich.
Installieren, konfigurieren und einmal nach dem Reboot
# sudo pivpn -d
ausführen.
Dauert keine 5 Minuten und dank QR Code auch easy fürs Telefon.
aqui
aqui 20.10.2023 um 22:15:19 Uhr
Goto Top
Ob man sich damit den PasPi vollmüllen sollte wenn man nur WG will muss jeder selber entscheiden. Die WG Konfig ist ein simper Text 5zeiler den auch ein Laie in 5 Minuten hinbekommt.
Zumal das Skript ja auch noch OpenVPN ontop mit raufschiebt was WG User gar nicht haben wollen und eher unnütze Angriffspunkte schafft.
Außerdem hat der TO einen vServer und keinen RasPi. face-wink
Muss aber jeder selber entscheiden ob das für ihn Sinn macht oder nicht.
Fohnbit
Fohnbit 21.10.2023 um 10:31:47 Uhr
Goto Top
Hallo!

Danke. Am Ende habe Ich die UFW vergessen face-smile
Hab nun die wgui installiert. Danke @markushi

Auch dank dir @aqui

Noch eine Abschlussfrage:
Kann ich rein mit wireguard die Zugriffe einschränken?
So soll z.B. nur Peer 1 mit Peer 2 kommunizieren können. Alle anderen Peers im Netzwerk sollen nicht erreichbar sein
Visucius
Visucius 21.10.2023 aktualisiert um 15:41:26 Uhr
Goto Top
Naja klar. Dann gibst Du halt nicht das ganze Netz frei. Aber merke auf: Wenn ich das recht erinnere läuft das clientseitig. Einfach mal vergegenwärtigen, was Du in der Konfuguration eigentlich definiert hast 😉
aqui
aqui 22.10.2023 aktualisiert um 14:24:41 Uhr
Goto Top
Am Ende habe Ich die UFW vergessen
Auf einem vServer kann man immer dies als Firewall (nftables) Grundgerüst verwenden. Das Regelwerk (/etc/nftables.conf) berücksichtig auch eingehenden IPsec Traffic wenn man den vServer auch für alle onboard VPN Clients als VPN Server betreiben will. (Siehe dazu auch HIER)
#!/usr/sbin/nft -f

flush ruleset

define pub_iface = "eth0"  
define wg_port = 57820

table inet drop-bad-ct-states {
	chain prerouting {
		type filter hook prerouting priority -150; policy accept;
		# Drop packets in "invalid" connection-tracking state 
		ct state invalid drop
		# Drop tcp packets for new connections that aren't syn packets 
		tcp flags & (fin|syn|rst|ack) != syn ct state new counter drop
		# Drop XMAS packets.
		tcp flags & (fin|syn|rst|psh|ack|urg) == fin|syn|rst|psh|ack|urg counter drop
		# Drop NULL packets.
		tcp flags & (fin|syn|rst|psh|ack|urg) == 0x0 counter drop
		# Drop new connections over rate limit
		ct state new limit rate over 1/second burst 10 packets drop
		}
}

table inet filter {
	chain input {
		type filter hook input priority 0; policy drop;
		# Accept any localhost traffic
		iif lo accept

		# Accept any wireguard traffic
		iifname "wg0" accept  

		# Accept traffic originated from own server
		ct state established,related accept

		# Accepted ICMP types
		ip protocol icmp icmp type {time-exceeded, parameter-problem, destination-unreachable } accept

		# Accept common local TCP services on public interface
		iif $pub_iface tcp dport { ssh } ct state new accept

		# Accepted UDP ports on public interface 
		iif $pub_iface udp dport { isakmp, ipsec-nat-t, $wg_port } accept 
		iif $pub_iface ip protocol esp accept 

		# allow IPsec VPN networks
		meta ipsec exists accept

		# Accept neighbour discovery otherwise IPv6 connectivity breaks.
		ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept

		# Log and count dropped traffic
		# log prefix "[nftables]Denied: " counter drop 
		# only count dropped traffic
		counter drop
	}
	chain forward {
		type filter hook forward priority 0;
	}
	chain output {
		type filter hook output priority 0;
	}
} 
Fohnbit
Fohnbit 24.10.2023 um 19:03:08 Uhr
Goto Top
Nur noch eine Verständnisfrage:
Ich erzeuge einen zufälligen private Key, daraus wird der Public Key erzeugt.
Der Public Key wird immer der selbe sein, solange der Private Key gleich bleibt?

Der PreShared Key muss lediglich bei Server und Client identisch sein. Dieser wird zufällig generiert.

Soweit richtig?
aqui
aqui 24.10.2023, aktualisiert am 25.10.2023 um 10:55:00 Uhr
Goto Top
Ja richtig. Die Keys beziehen sich immer auf einen Peer (Cryptokey Routing Prinzip). Ein zusätzlicher Preshared Key ist bei der Verwendung von Peer Keys eigentlich überflüssiges Beiwerk und benötigt man nicht.
Wie kann ich einen Beitrag als gelöst markieren?
Visucius
Visucius 24.10.2023 um 20:42:10 Uhr
Goto Top
Und preshared key ist nicht unbedingt nötig.