ubuntuusers.de

Wireguard masquerade mit iptables

Status: Gelöst | Ubuntu-Version: Server 20.04 (Focal Fossa)
Antworten |

pascalts

Avatar von pascalts

Anmeldungsdatum:
6. Mai 2013

Beiträge: 89

Hallo!

Ich bin gerade dabei einen WireGuard-Server zu testen. Kurze Info zum Setup:

{Server}

  • Steht im lokalen Netz 192.168.0.0/24 mit IP 192.168.0.100 an Interface enp1s0

  • Hat eine (funktionierende) Portfreigabe auf 51194 (mein WireGuard-Port)

{WireGuard auf Server}

[Interface]
Address = 192.168.10.1/24
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp1s0 -j MASQUERADE
ListenPort = 51194
PrivateKey = ZENSUR

[Peer]
PublicKey = ZENSUR
AllowedIPs = 192.168.10.0/24

{Client}

  • Windows 10 mit offiziellen WireGurad-Client

{Client-Config}

[Interface]
PrivateKey = ZENSUR
Address = 192.168.10.2/24
DNS = 192.168.10.1

[Peer]
PublicKey = ZENSUR
AllowedIPs = 0.0.0.0/0
Endpoint = ZENSUR:51194

Die Verbindung klappt soweit. Ich kann auf den Server lokal per SSH zugreifen, auch seine anderen Ports kann ich ansprechen (http ...) und anpingen (auf die 192.168.10.1). Woran ich scheitere, ist Geräte aus dem Netz des Servers (an enp1s0) anzusprechen. Ein "ping 192.168.0.10" an ein anderes Gerät in seinem Netzwerk scheitert.

Ich bin relativ sicher, dass ich einen einfachen Fehler bei meinen iptables-Regeln gemacht habe. Könnt ihr einen Blick darauf werfen?

Grüße!

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14788

pascalts schrieb:

Die Verbindung klappt soweit. Ich kann auf den Server lokal per SSH zugreifen, auch seine anderen Ports kann ich ansprechen (http ...) und anpingen (auf die 192.168.10.1). Woran ich scheitere, ist Geräte aus dem Netz des Servers (an enp1s0) anzusprechen. Ein "ping 192.168.0.10" an ein anderes Gerät in seinem Netzwerk scheitert.

Ich bin relativ sicher, dass ich einen einfachen Fehler bei meinen iptables-Regeln gemacht habe. Könnt ihr einen Blick darauf werfen?

Von wo und mit welchem OS willst Du auf ein anderes Gerät im Netzwerk des Servers, via WG-VPN zugreifen?

pascalts

(Themenstarter)
Avatar von pascalts

Anmeldungsdatum:
6. Mai 2013

Beiträge: 89

Oh ja, das hätte ich besser ausführen sollen. Also ich wollte jetzt vom Peer/Client [Windows 10], der per WireGuard mit dem Server [Ubuntu] verbunden ist, auf ein Gerät X im Netzwerk des Servers zugreifen. Also (nur mal angenommen) auf die HTTP Oberfläche des Routers, der unter 192.168.0.10 im Netzwerk des Servers steht.

Ich komme halt bei meinen Verbindungen nicht über den Server an sich hinaus. Alle Ports, die der Server offen hat kann ich erreichen, wenn ich seine Adresse des Interface wg0 nutze. Sobald ich aber darüber hinaus will, kann keine Verbindung hergestellt werden.

Grüße!

pascalts

(Themenstarter)
Avatar von pascalts

Anmeldungsdatum:
6. Mai 2013

Beiträge: 89

Fehler gefunden:

1
sysctl -w net.ipv4.ip_forward=1

hat gefehlt.

Danke und Gruß!

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14788

pascalts schrieb:

Fehler gefunden:

1
sysctl -w net.ipv4.ip_forward=1

hat gefehlt.

BTW: Wenn Du den Wireguard nicht "klassisch" (d. h. mit den wg*.conf-Dateien/wg/wg-quick/service-unit) konfigurierst, sondern mit systemd-networkd, kann dieser Fehler nicht passieren. 😉 Z. B.:

:~# cat /etc/systemd/network/wg0.network
[Match]
Name=wg0

[Link]
MTUBytes=1392

[Network]
DHCP=no
LinkLocalAddressing=no
Address=192.168.xx.1/24
DNS=x.x.x.x
DNS=y.y.y.y
IPForward=ipv4
IPMasquerade=yes
ConfigureWithoutCarrier=true
:~# cat /etc/systemd/network/wg0.netdev
[Match]
Host=<machine-id>

[NetDev]
Name=wg0
Kind=wireguard
Description=WireGuardServer

[WireGuard]
PrivateKey = xxxxyyyyy
ListenPort = .....
FwMark = ....

[WireGuardPeer]
PublicKey = yxyxyxyxyx
PresharedKey = ######
AllowedIPs = 192.168.xx.0/24
Antworten |