Wireguard - So tunneln Sie nur einen Teil des Datenverkehrs

Wireguard - So tunneln Sie nur einen Teil des Datenverkehrs

Ist es möglich, den Wireguard-Server so einzurichten, dass nur eine Liste von IPs [A, B, C, ...] über Wireguard getunnelt wird – während der restliche Datenverkehr ignoriert wird und über die Nicht-Wireguard-Schnittstelle läuft?

Anders gesagt, ich versuche, einigen externen Personen Zugriff auf ein Wireguard-VPN zu gewähren, möchte aber nicht, dass sie das VPN verwenden können, um andere IPs/Sites als die von mir angegebene zu durchsuchen (während sie über ihre eigene Nicht-VPN-Schnittstelle/-Verbindung tun können, was sie wollen).

Danke

Antwort1

Sie können iptables verwenden.
Ersetzen Sie eth0durch die Netzwerkschnittstelle, die eine Verbindung zum Internet und 10.6.0.1/24zu Ihrem Client-Subnetz herstellt.

Fügen Sie dies irgendwo in Ihrer Wireguard-Konfiguration unter [INTERFACE] ein.

# Drop all outgoing packets from the client subnet
PreUp = iptables -I FORWARD -s 10.6.0.1/24 -o eth0 -j DROP
## Add your exceptions here

Zum Beispiel:

[Interface]
PrivateKey = ...
Address = 10.6.0.1/24
MTU = 1420
ListenPort = 51820

## Before interface wg0 is up
# Drop all outgoing packets from the client subnet
PreUp = iptables -I FORWARD -s 10.6.0.1/24 -o eth0 -j DROP
# Allow clients to connect to the local network 192.168.0.1/24
PreUp = iptables -I FORWARD -s 10.6.0.1/24 -d 192.168.0.1/24 -j ACCEPT
# Allow clients to connect to tcp port 80 (usually http) on 10.10.0.5
PreUp = iptables -I FORWARD -s 10.6.0.1/24 -d 10.10.0.5 -p tcp --dport 80 -j ACCEPT

## After interface wg0 is down
PostDown = iptables -D FORWARD -s 10.6.0.1/24 -o eth0 -j DROP
PostDown = iptables -D FORWARD -s 10.6.0.1/24 -d 192.168.0.1/24 -j ACCEPT
PostDown = iptables -D FORWARD -s 10.6.0.1/24 -d 10.10.0.5 -p tcp --dport 80 -j ACCEPT

[Peer]
...

Für ein nahtloses Erlebnis auf der Clientseite müssen Sie dies auch AllowedIPsin der Clientkonfiguration konfigurieren. Andernfalls versuchen die Clients, über das VPN auf das Internet zuzugreifen, und diese Anfragen werden einfach abgebrochen.

Dem obigen Beispiel folgend könnte die Konfiguration des Clients folgendermaßen aussehen:

[Interface]
PrivateKey = ...
Address = 10.6.0.2/24
DNS = 10.6.0.1

[Peer]
PublicKey = ...
AllowedIPs = 192.168.0.1/24, 10.10.0.5
Endpoint = ...
PresharedKey = ...

Dokumentation:

verwandte Informationen