2 Wireguards & Routing - Wie sauber konfigurieren?

Hallo zusammen,

ich bin neu hier und muss um Hilfe bitten, da ich mit den Videos nicht weiterkomme :slight_smile:

Ich habe folgende Idee und Setup dazu:

Über das wg0 Interface möchte ich den Traffic an mein NAS leiten, bzw. auch an den Router. Dazu wird noch eine Verbindung benötigt zum PC, da dieser nur über den WG-Tunnel über SSH drauf soll, der Port 22 ist im IONOS VPS Hosting nach außen hin gesperrt.

Nun möchte ich ein zweites WireGuard laufen lassen, welches keinen Zugriff auf die Geräte vom wg0 hat, sondern nur auf gewisse Proxmox LXCs, welche auch über die public IPv4 des Servers im Internet erreichbar sein sollen.

Ich habe folgende Configs

wg0 Server:

[Interface]
Address = 10.0.0.1/24
ListenPort = 62000
PrivateKey = <PrivateKey>

PostUp = iptables -A FORWARD -i wg0 -o ens6 -j ACCEPT
PostUp = iptables -A FORWARD -i ens6 -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT

PostDown = iptables -A FORWARD -i wg0 -o ens6 -j ACCEPT
PostDown = iptables -A FORWARD -i ens6 -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# WireGuard@Home
[Peer]
PublicKey = <PublicKey>
PresharedKey = <PresharedKey>
AllowedIPs = 10.0.0.2/32, 172.16.1.1, 172.16.1.5/32, 172.16.1.10/32
PersistentKeepalive = 25

# Peer 2ff.
[Peer]
PublicKey = <PublicKey>
PresharedKey = <PresharedKey>
AllowedIPs = 10.0.0.3/32
PersistentKeepalive = 25

Dazu die Config der ganzen Peers (Das Schema ist immer gleich nur die keys sind andere):

[Interface]
Address = 10.0.0.2/32
PrivateKey = YEbyBkGD7+pZuwexZ2mJIx+j5SZauyoDgE2wCOibpVU=

[Peer]
PublicKey = <PublicKey>
PresharedKey = <PresharedKey>
AllowedIPs = 10.0.0.0/24, 172.16.1.0/24
Endpoint = <PublicIP>:62000
PersistentKeepalive = 25

Nun habe ich noch das Interface wg1 auf dem VPS:

[Interface]
Address = 10.10.0.1/24
ListenPort = 62001
PrivateKey = <PrivateKey>

PostUp = iptables -t nat -A PREROUTING -i ens6 -p tcp -m multiport --dport 80,443 -j DNAT --to-destination 10.10.0.2
PostUp = iptables -t nat -A POSTROUTING -o wg1 -p tcp -m multiport --dport 80,443 -d 10.0.0.2 -j SNAT --to-source 10.0.0.1
PostUp = iptables -A FORWARD -i ens6 -o wg1 -p tcp -m multiport --dport 80,443 -j ACCEPT
PostUp = iptables -A FORWARD -m conntrack --cstate ESTABLISHED,RELATED -j ACCEPT

PostDown = iptables -t nat -A PREROUTING -i ens6 -p tcp -m multiport --dport 80,443 -j DNAT --to-destination 10.10.0.2
PostDown = iptables -t nat -A POSTROUTING -o wg1 -p tcp -m multiport --dport 80,443 -d 10.0.0.2 -j SNAT --to-source 10.0.0.1
PostDown = iptables -A FORWARD -i ens6 -o wg1 -p tcp -m multiport --dport 80,443 -j ACCEPT
PostDown = iptables -A FORWARD -m conntrack --cstate ESTABLISHED,RELATED -j ACCEPT

[Peer]
PublicKey = <PublicKey>
PresharedKey = <PresharedKey>
AllowedIPs = 10.10.0.2/32
PersistentKeepalive = 25

Und die dazugehörige Client conf für wg1

[Interface]
Address = 10.10.0.2/24
PrivateKey = <PrivateKey>

[Peer]
PublicKey = <PublicKey>
PresharedKey = <PresharedKey>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <PublicIP>:62001

Lasse ich jetzt wg0 laufen, kriege ich mit beispielsweise meinem Smartphone eine Verbindung zum wg0 hin. Das Handshake kommt und die Verbindung ist „da“ (also Bytes empfangen). Aber ich kann aber keine Verbindung zur 172.16.1.5 herstellen. Genauso komme ich nicht von meinem PC aud den 10.0.0.1 wg0 Interface über SSH, eine statische Route in der Fritz!Box ist eingetragen.
image

Verbindung zum wg1 funktioniert auch nicht sauber, das ist der Output von „wg show“

interface: wg1
  public key: <PublicKey>
  private key: (hidden)
  listening port: 60396
  fwmark: 0xca6d

peer: <PrivateKey>
  preshared key: (hidden)
  endpoint: <PublicIP>:62001
  allowed ips: 0.0.0.0/0, ::/0
  transfer: 0 B received, 296 B sent  <<< Hier kommt nichts auf wg1

Ich habe das Gefühl, dass ich etwas vergessen habe, ich weiß aber nicht was. Hat jemand eine Idee, was hier in der Config fehlt?

Gruß
Xiao

Moin,
Erstmal zum Verständnis: Endet der wg1 jetzt auf der Fritzbox oder auf dem WG-LXC?

Ich sehe in deiner WG-Config auch einige Fehler:
Bspw. sind die Allowed-IPs falsch auf dem Client, da müssen die rein, die dieser Client über diese WG-Verbindung erreichen soll. Zusätzlich sind die PostDown-Einträge falsch, da musst du statt -A für „add“ -D hinschreiben für „delete“.
Und ich würde die beiden LXCs für wg0 und wg1 auch trennen, ist sauberer und verkompliziert so alles.

Danke schon einmal für die Antworten.

Der soll auf wg1 enden im LXC 250 enden, ja, von da aus weiter ins Heimnetz.

-D… ja klar, das ist mir jetzt etwas peinlich :blush:

Ich setze mal einen zweite LXC auf.

Beziehst du dich auf die config des wg0 oder wg1?

Bei beiden. Und erstmal den WG0 fertig haben und dann den anderen bauen, so ist das ziemlich verwurschelt.

OK also,

wg0 läuft, ich komme mit meinem Handy und den anderen Peers auf das NAS und den Router.
Das ist die Config vom wg0 auf dem VPS.

[Interface]
Address = 10.0.0.1/24
ListenPort = 62000
PrivateKey = <Key>

PostUp = iptables -A FORWARD -i wg0 -o ens6 -j ACCEPT
PostUp = iptables -A FORWARD -i ens6 -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT

PostDown = iptables -D FORWARD -i wg0 -o ens6 -j ACCEPT
PostDown = iptables -D FORWARD -i ens6 -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# WireGuard@Home
[Peer]
PublicKey = <Key>
PresharedKey = <Key>
AllowedIPs = 10.0.0.2/32, 172.16.1.1, 172.16.1.5/32, 172.16.1.10/32
PersistentKeepalive = 25

# Weitere Peers
[Peer]
PublicKey = <Key>
PresharedKey = <Key>
AllowedIPs = 10.0.0.3/32
PersistentKeepalive = 25

Und das hier die Config für den WireGuard@Home:

[Interface]
Address = 10.0.0.2/32
PrivateKey = <Key>

PostUp = ip route del 172.16.1.0/24 dev wg0
PostUp = ip route add 172.16.1.0/24 dev eth0
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

PostDown = ip route del 172.16.1.0/24 dev eth0
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = <Key>
PresharedKey = <Key>
AllowedIPs = 10.0.0.0/24, 172.16.1.0/24
#, 172.16.1.1/32, 172.16.1.5/32, 172.16.1.10/32
Endpoint = <PublicIP>:62000
PersistentKeepalive = 25

Folgendes verstehe ich nicht: schreibe ich statt 172.16.0.0/24, die auskommentierten IPs in die Zeile, dann geht keine Verbindung von den Peers zum NAS. Lasse ich das Subnetz drin, dann geht es.

Warum muss ich diese Regel:
PostUp = ip route del 172.16.1.0/24 dev wg0
löschen? Wo wird diese erzeugt?

Was wären die next Steps um mit dem WG1 weiter zu machen?
Ich habe das Zweite (wg1) mal in 20.0.0.0/24 geändert, da 10.0.x.x und 10.10.x.x beim Lesen schnell vertauscht werden können.

Du musst diese Regel weder erstellen noch löschen, das macht der WG anhand der AllowedIPs alles automatisch.
20.0.0.0/24 ist aber öffentliche IPs, auf keinen Fall nutzen für sowas!

In der wg0 Server-Config brauchst du diese Regeln für das FORWARD nur, wenn du mit Geräten in dem Tunnel ins Internet willst. Und dann auch eigentlich etwas anders…

Was wäre denn deine Idee?

Hier funktioniert das zumindest mal, nehme ich die Regeln raus, ist keine Verbindung mehr machbar zwischen Peer und internes Netzwerk. Oder wie würdest du das richtig lösen, wenn man das eigentlich anders verwendet? :smiley:

Also: Das Interface ens6 ist ja wohl das WAN des VPS oder?
Wenn ja: Dann brauchst du diese Regeln nicht, um von Home dahin zu kommen. Da brauchst eine INPUT-Regel um den WG-Port zu öffnen auf dem WAN.

Wann hast du morgen Zeit? Bin nämlich ziemlich müde und da können Fehler passieren :sweat_smile:

Korrekt!

OK, dann machen wir morgen weiter :smiley: Gehe nämlich gleich schlafen und bin morgen erst gegen ca. 19 Uhr wieder @ Home zum weitermachen.

Danke aber schonmal :+1:

Ich gehe auch schlafen, deswegen :grin:
bis dann

Moin, bist da?

Bla bla für 20 Zeichen.

Ja, wir können weitermachen :smiley:

Moin, melde mich gleich. Bin gerade noch bei was anderem dran.

1 Like

So, Hi. Hat ein bisschen länger gedauert, aber hab das jetzt für heute erstmal weg gelegt.

Derweil habe ich schonmal eine neue LXC angelegt, dort das Interface wg0 mit IP 10.20.0.0/24, welches sich auf das wg1 des IONOS verbindet.

Zumindest die Verbindungsherstellung zwischen den beiden geht und ping funktioniert auch schonmal.

Und wie sieht die Config von dem WG0 aus? Soll darüber von externen Mobilgeräten ins Internet kommuniziert werden?

Im Moment minimalistisch:

wg1 auf IONOS:

[Interface]
Address = 10.20.0.1/24
ListenPort = 62001
PrivateKey = <Key>

# WireGuardPublic @ Home
[Peer]
PublicKey = <Key>
PresharedKey = <Key>
AllowedIPs = 10.20.0.2/32
PersistentKeepalive = 25

und hierzu die wg0 auf LXC Container 251

[Interface]
Address = 10.20.0.2/32
PrivateKey = <Key>

[Peer]
PublicKey = <Key>
PresharedKey = <Key>
AllowedIPs = 10.20.0.0/24
Endpoint = 87.106.167.247:62001
PersistentKeepalive = 25

jetzt würde ich gerne jeglichen Port 80 und 443 Traffic an wg1 weiterleiten wollen, welcher diese dann über den Tunnel zum Nginx rüberschiebt, auf der 172.16.1.200. Von da aus weiter zu den jeweiligen Hosts.