Routing nur des privaten Netzwerks im Wireguard-VPN

Routing nur des privaten Netzwerks im Wireguard-VPN

Ich habe ein paar Hosts hinter einem NAT-Router, auf die ich über ein Wireguard-VPN zugreifen möchte. Ich konnte das private Netzwerk erfolgreich konfigurieren, aber es gibt immer noch etwas, das mich verwirrt.

Ich möchte, dass jeder Peer:

  • 172.9.9.*über das VPN (via wg0) aufeinander zugreifen ( )
  • Zugriff auf jeden anderen Host außerhalb des VPN (über eth0).

Hier ist ein Schema des Netzwerks und der aktuellen Konfiguration:

┌─────┐    ┌──────────┐    ┌─────┐
│  S  ├────┤ Internet ├────┤  A  │
└─────┘    └───┬──────┘    └─────┘
          ┌────┴─────┐
          │ NAT DHCP │
       ┌──┤  Router  ├──┐
       │  └──────────┘  │
       │                │
    ┌──┴──┐          ┌──┴──┐
    │  X  │          │  B  │
    └─────┘          └─────┘
  • Sist der VPN-Server und er ist über das Internet über eine statische IP erreichbar;
  • Xist ein „Rechnerserver“, er kann auf das Internet zugreifen, befindet sich aber hinter einem NAT und seine IP ist dynamisch und nicht im Voraus bekannt;
  • Aist ein „Remote-Client“, der eine Verbindung herstellen möchte mit X;
  • Bist ein „lokaler Client“, der eine Verbindung herstellen möchte Xund sich im selben lokalen Netzwerk befindet.

Ich möchte dies Aund Bkann Xüber eine Verbindung herstellen S, aber alle diese Hosts sollten das VPN nur für die gegenseitige Kontaktaufnahme und nicht für den Internetzugriff verwenden.

So können Sie beispielsweise Agoogle.com direkt anpingen, der Ping erfolgt jedoch Xüber S.

Nach dem Suchen und Lesen der Dokumentationen ist mir immer noch unklar, ob dies ohne die Verwendung möglich ist iptablesund ob es nur mit der Wireguard-Konfiguration möglich ist.

Die aktuelle Konfiguration ist wie folgt:

## S wg0.conf

[Interface]
PrivateKey = S-private-key
Address = 172.9.9.1/24
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820

[Peer]
# A
PublicKey = A-public-key
AllowedIPs = 172.9.9.100/32

[Peer]
# B
PublicKey = B-public-key
AllowedIPs = 172.9.9.101/32

[Peer]
# X
PublicKey = X-public-key
AllowedIPs = 172.9.9.10/32
# A wg0.conf

[Interface]
Address = 172.9.9.100/24
PrivateKey = A-private-key
DNS = 1.1.1.1

[Peer]
PublicKey = S-public-key
Endpoint = S-ip-address:51820
AllowedIPs = 0.0.0.0/0, ::/0

BDie Konfiguration von ist ähnlich zu A, jedoch mit IP 172.9.9.101und anderem privaten Schlüssel.

# X wg0.conf

[Interface]
Address = 172.9.9.10/24
PrivateKey = X-private-key
DNS = 1.1.1.1

[Peer]
PublicKey = S-public-key
Endpoint = S-ip-address:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25  # To keep the server reachable

Diese Konfiguration funktioniert und alle Hosts können über das VPN aufeinander zugreifen, aber ich möchte, dass NUR der an die Hosts gerichtete Datenverkehr 172.9.9.*über dieses VPN läuft. Der übrige Datenverkehr soll über das Standard-Gateway geleitet werden.

Was mich verwirrt ist, dass, wenn ich die Konfiguration ändere, Aso dass

AllowedIPs = 172.9.9.0/24

dann Awerden die Pakete für wie vorgesehen weitergeleitet (z. B. kann ich curl ifconfig.meund erhalte Adie öffentliche IP von), aber wenn ich dasselbe auf mache X, funktioniert es nicht und Pakete, die nicht an gehen, 172.9.9.0/24können nicht zugestellt werden.

BEARBEITEN#1

Ich habe vergessen zu erwähnen, dass ich es auch toll fände, wenn Xdie lokalen Clients beim Verbinden mit Bkeine Pakete außerhalb des lokalen Netzwerks senden würden, also B -> Router -> Xund nicht B -> Router -> S -> Router -> X.

Antwort1

Stellen Sie AllowedIPsdie gewünschten IP-Adressen einRoute zum/durch den Peer.

In einer normalen Hub-and-Spoke-Konfiguration würden Sie auf Ihrem Hub (S) AllowedIPsfür jeden Peer die folgende Konfiguration vornehmen: Routing von Paketen an jeden Peer nur dann, wenn diese die WireGuard-IP-Adresse des Peers als Zieladresse verwenden. Auf Ihren Spokes (A, B und X) würden Sie AllowedIPsdie CIDR Ihres WireGuard-Netzwerks ( 172.9.9.0/24) konfigurieren: Routing von Paketen an den Hub nur dann, wenn diese die WireGuard-IP-Adressen eines anderen Peers als Zieladresse verwenden.

Bei einer normalen Konfiguration würden Sie also von B oder X aus mit der WireGuard-IP-Adresse von A auf A zugreifen 172.9.9.100, von A oder X aus mit und von A oder B aus mit auf 172.9.9.101X.172.9.9.10

Wenn Sie jedoch auch auf jeden Spoke über die an die physische Netzwerkkarte des Spokes gebundene IP-Adresse zugreifen möchten (z. B. eth0), müssen Sie AllowedIPssowohl auf dem Hub als auch auf den Spokes die entsprechenden IP-Adressen anpassen.

Wenn beispielsweise eth0die Adresse von A lautet 198.51.100.65, die von B 192.168.0.66und die von X 192.168.0.88, würden Sie die Peers in der WireGuard-Konfiguration des Hubs wie folgt anpassen:

## S wg0.conf
...

[Peer]
# A
PublicKey = A-public-key
AllowedIPs = 172.9.9.100/32
AllowedIPs = 198.51.100.65/32

[Peer]
# B
PublicKey = B-public-key
AllowedIPs = 172.9.9.101/32
AllowedIPs = 192.168.0.66/32

[Peer]
# X
PublicKey = X-public-key
AllowedIPs = 172.9.9.10/32
AllowedIPs = 192.168.0.88/32

Und stellen Sie AllowedIPsin der Konfiguration jeder Speiche Folgendes ein:

AllowedIPs = 172.9.9.0/24
AllowedIPs = 198.51.100.65/32
AllowedIPs = 192.168.0.66/32
AllowedIPs = 192.168.0.88/32

AllowedIPs = 172.9.9.0/24, 198.51.100.65/32, 192.168.0.66/32, 192.168.0.88/32(Beachten Sie, dass Sie bei Bedarf auch alle Blöcke in einer Zeile angeben können .)


Wenn Sie bei Ihrer aktuellen Konfiguration AllowedIPs = 0.0.0.0/0auf X arbeiten curl 198.51.100.65und X ausführen, passiert Folgendes: X leitet die für A bestimmten Pakete (und alles andere) durch seinen WireGuard-Tunnel an S weiter, und dann leitet S diese Pakete unverschlüsselt über das Internet an A weiter (maskiert mit der öffentlichen IP-Adresse von S). Als Antwort darauf sendet A unverschlüsselte Pakete über das Internet an S, die S durch seinen WireGuard-Tunnel an X weiterleitet.

Wenn Sie sichergehen wollen, dass SnieUm Pakete, die durch Ihr WireGuard-Netzwerk getunnelt wurden, an das Internet weiterzuleiten, können Sie Ihre iptables-Regeln anpassen, um dies zu verhindern. So etwas wie das Folgende würde wahrscheinlich funktionieren:

PostUp = iptables -A FORWARD -i wg0 -o wg0 -j ACCEPT; iptables -A FORWARD -i wg0 -o eth0 -j DROP; iptables -A FORWARD -i eth0 -o wg0 -j DROP

Antwort2

Ich hatte ein Problem mit DNS: Mit AllowedIPs = 172.9.9.0/24konnte ich anpingen 8.8.8.8, aber nicht an google.com.

Ich habe es gelöst, indem ich die Schnittstelle DNS in die erlaubten IPs aufgenommen habe, sodass ich eine DNS-Auflösung über VPN bekomme, der Datenverkehr aber nicht im VPN ist:

[Interface]
...
DNS = 1.1.1.1

[Peer]
...
AllowedIPs = 172.9.9.0/24, 1.1.1.1/32

Dies beantwortet nicht meine zweite Frage: ob es möglich ist, direkt zu kommunizieren, ohne den Umweg über zu machen X. Die andere Antwort hilft dabei, das zu verstehen.BS

BEARBEITEN

Es scheint, dass es auch durch Löschen des Felds funktioniert DNS, daher sollte für beide Schnittstellen derselbe DNS-Server verwendet werden.

verwandte Informationen