Wie kann ich unter Linux nur ein bestimmtes Subnetz zum StrongSwan-VPN weiterleiten, nicht aber meinen gesamten Datenverkehr?

Wie kann ich unter Linux nur ein bestimmtes Subnetz zum StrongSwan-VPN weiterleiten, nicht aber meinen gesamten Datenverkehr?

Ich habe keine besonderen Kenntnisse im Netzwerkbereich, daher werde ich mein Bestes tun, um meine Anforderungen zu erklären. Auf meinem Linux-Laptop verwende ich StrongSwan (mit NetworkManager), um eine Verbindung zu einem bestimmten VPN mit IPsec herzustellen. Mit diesem VPN kann ich diese Art von IPs erreichen 10.*.*.*.

Jetzt besteht mein Problem darin, dass beim Ausführen des VPN der gesamte Datenverkehr über das VPN läuft, ich jedoch lieber nur die an diese IPs adressierten Pakete an das VPN weiterleiten möchte ( 10.*.*.*).

Wie kann ich das machen? Kann mir jemand eine einfache Anleitung geben oder mir die erforderlichen Konfigurationen und ihre Anwendung mitteilen?

Antwort1

Das NetworkManager-Plugin von strongSwan erlaubt derzeit keine Änderung der vorgeschlagenen Verkehrsselektoren (die entscheiden, welcher Verkehr getunnelt wird). Es schlägt also immer vor, alles zu tunneln, und wenn der Server die Verkehrsselektoren nicht einschränkt (siehe unten), wird das ausgehandelt.

Mögliche Möglichkeiten, dies zu umgehen:

  1. Wenn möglich, ändern Sie die Konfiguration des Servers so, dass er den Vorschlag des Clients über seinen eigenen reduzierten Satz von Verkehrsselektoren auf die gewünschten Subnetze einschränkt. Einige Clients können damit mehr oder weniger umgehen, das NM-Plugin von strongSwan sollte in Ordnung sein (auf dem strongSwan-Wiki finden SieWeitere Informationen zum Split-Tunnelingund mögliche Probleme mit verschiedenen Clients).
  2. Wenn Sie nur auf Ihr lokales LAN zugreifen möchten, während Sie mit dem VPN verbunden sind, können Sie dieLAN umgehenPluginimCharon-NMDaemon (das Backend für das strongSwan NM-Plugin), der automatisch Bypass-IPsec-Richtlinien für alle lokal angeschlossenen Subnetze installiert.
  3. Ähnlich wie bei der vorherigen Option verwenden Sie den regulären IKE-Daemon (charonoderCharon-systemd, konfiguriert über swanctl.conf oder ipsec.conf), um Umgehungsrichtlinien für IPsec für die Subnetze zu installieren, auf die Sie nicht über VPN zugreifen möchten (dies funktioniert auch, wenn sie nicht lokal verbunden sind).
  4. Verhindere denCharon-NMDaemon daran hindert, eigene Routen in der Routing-Tabelle 220 zu installieren (übercharon-nm.install_routesOption in strongswan.conf) oder löschen Sie die Routing-Tabelle 220, nachdem die Verbindung hergestellt wurde. Und dann entweder manuell oder über ein NM-Skript ( /etc/NetworkManager/dispatcher.dsieheDokumentation hier), installieren Sie spezifische Routen nur für die Subnetze, die Sie tunneln möchten, zum Beispiel:

    ip route add 10.0.0.0/8 dev <outbound interface> src <virtual IP> table 220
    

    ip addrWobei die virtuelle IP-Adresse per Log oder (oder in einem Skript per Umgebungsvariable) ermittelt werden muss . Wenn du die automatische Routeninstallation nicht deaktivierst, kannst du die virtuelle IP auch aus der bestehenden Route beziehen, die du anschließend löschst.

  5. Alternativ können Sie anstelle des NM-Plugins den regulären IKE-Daemon verwenden. Dort haben Sie mehr Möglichkeiten, nur den gewünschten Datenverkehr zu tunneln (entweder durch Festlegen eines bestimmten Remote-Datenverkehrsselektors oder über Bypass-Richtlinien). Sie haben jedoch keine GUI zum Konfigurieren/Starten der VPN-Verbindungen (Sie können jedoch Verbindungen automatisch starten oder wenn Datenverkehr für die Zielsubnetze erkannt wird).

Antwort2

Vielen Dank an @ecdsa für die Vollständigkeit seiner Antwort.

Ich bin ein Neuling im Netzwerkbereich und hatte große Schwierigkeiten, die Lösung zu implementieren, obwohl sie trivial war.

Die folgende Lösung übernimmt den vierten Vorschlag und erfordert die folgenden Schritte:

  1. Schalten Sie Ihr VPN über NetworkManager ein
  2. Führen Sie den folgenden Befehl aus, um die von NetworkManager erstellte Route zu ermitteln

    user@laptop:~$ ip route list table 220
    default via 192.168.1.1 dev enp0s31f6 proto static src 172.26.199.15
    
  3. Beachten Sie die Schnittstelle (enp0s31f6) und virtuelle IP (172.26.199.15)

  4. Leeren Sie die aktuelle Route, wenn Sie eine benutzerdefinierte Route verwenden möchten, mit dem folgenden Befehl

    sudo ip route flush table 220
    
  5. Fügen Sie Ihre benutzerdefinierte Route mit dem folgenden Befehl hinzu

    sudo ip route add 10.0.0.0/8 dev enp0s31f6 via 172.26.199.15 table 220
    

Jetzt nur noch Pakete an10.0.0.0/8wird über das VPN geleitet.

verwandte Informationen