Ich habe einen Computer mit einer zusätzlichen, nur lokal verfügbaren Ethernet-Schnittstelle mit einem privaten Subnetz. Wenn ein StrongSwan-VPN eingerichtet ist, kann ich nicht auf dieses Subnetz zugreifen.
Dies ist die lokale „linke“ Konfiguration (festgelegt durchAlge):
conn ikev2-<rightip>
fragmentation=yes
rekey=no
dpdaction=clear
keyexchange=ikev2
compress=no
dpddelay=35s
ike=aes128gcm16-prfsha512-ecp256!
esp=aes128gcm16-ecp256!
right=<rightip>
rightid=<rightip>
rightsubnet=0.0.0.0/0
rightauth=pubkey
leftsourceip=%config
leftauth=pubkey
leftcert=daves.crt
leftfirewall=yes
left=%defaultroute
auto=add
Das betreffende Subnetz ist 10.0.0.0/24. %defaultroute wird in eine Adresse in 192.168.0.0/24 aufgelöst.
„left“ und „leftsubnet“ scheinen hierfür nicht die richtigen Optionen zu sein, aber ich sehe nichts Besseres. Ich habe versucht, leftsubnet auf 10.0.0.0/24 und auf !10.0.0.0/24 einzustellen.
Wie schließe ich ein lokales Subnetz von einer StronSwan-VPN-Verbindung aus?
Wie überprüfe ich die Routenkonfiguration einer Verbindung?
Antwort1
Sie können einePassthrough-Richtlinie.
UPDATE: wie von @ecdsa angemerkt, gibt es mit strongswan >= 5.5.2 eineeinfachere Methode, schauen Sie am Ende nach, ob Ihre Version es verwenden kann.
Beispiel mit ein paar zufälligen IPs. Vor jeder Änderung und jedem Tunnel:
# ip route get 10.0.0.55
10.0.0.55 dev lxcbr0 src 10.0.0.77 uid 0
Nach dem Einrichten des Tunnels besteht das Problem:
# ip route get 10.0.0.55
10.0.0.55 via 192.168.0.1 dev eth0 table 220 src 192.168.0.44 uid 0
Hinzufügen dieser Konfiguration zu /etc/ipsec.conf
:
conn ignorelan
left=127.0.0.1 #prevents usage in peers selection algorithm
leftsubnet=10.0.0.0/24
rightsubnet=10.0.0.0/24
authby=never
type=passthrough
auto=route
und neu laden:
# ipsec reload
sollte es sofort aktivieren. Wenn dies (diesmal) nicht der Fall ist, können Sie Folgendes tun:
# ipsec route ignorelan
'ignorelan' shunt PASS policy installed
Es sollte auf jeden Fall bei jedem späteren Neustart verwendet werden. Sie haben jetzt (zusätzlich zu jedem Tunnel):
# ipsec status
Shunted Connections:
ignorelan: 10.0.0.0/24 === 10.0.0.0/24 PASS
[...]
Unabhängig davon, ob der Tunnel hergestellt wurde oder nicht, erhalten Sie die richtige Route zurück (die von Strongswan verwaltet wird, also in Tabelle 220 und nicht (nur) in der Haupttabelle):
# ip route get 10.0.0.55
10.0.0.55 dev lxcbr0 table 220 src 10.0.0.77 uid 0
cache
Bei einem Tunnel für 0.0.0.0/0 würde sich in Tabelle 220 ein Ergebnis ähnlich diesem ergeben:
# ip route show table 220
default via 192.168.0.1 dev eth0 proto static src 192.168.0.44
10.0.0.0/24 dev lxcbr0 proto static src 10.0.0.77
192.168.0.0/24 dev eth0 proto static src 192.168.0.44
Wenn Sie in den Passthrough-Einstellungen keine Routen eingeben, die der Realität entsprechen (z. B. falsche Netzmaske), müssen Sie mit falschen Ergebnissen für den „Shunt“ rechnen (wie die erwartete Quell-IP, aber über die falsche Netzwerkkarte). Seien Sie also vorsichtig.
AKTUALISIEREN: DieBypass-LAN-Pluginist einfacher zu verwenden, insbesondere in dynamischen Umgebungen.
Anstatt neue conn
Einträge hinzuzufügen, aktivieren Sie es (z. B. unter Debian Buster (nicht stabil), bearbeiten Sie /etc/strongswan.d/charon/bypass-lan.conf und setzen Sie load=yes (d. h.: charon.plugins.bypass-lan.load=yes) ). Standardmäßig wird jede Schnittstelle umgeleitet, d. h. ein Tunnel wird zwar aufgebaut, aber standardmäßig nicht verwendet. Setzen Sie also einfach entweder interfaces_ignore
oder interfaces_use
entsprechend. Sie sollten interfaces_ignore
für die Schnittstelle(n), die Siewill nichtTunnel zu umgehen oder interfaces_use
für die Schnittstelle(n), die Siewollenum Tunnel zu umgehen. Beispiel:
interface_use = lxcbr0
Wird in diesem Beispiel nach erhalten ipsec start
, wie bei der vorherigen Methode:
# ip route show table 220
10.0.0.0/24 dev lxcbr0 proto static src 10.0.0.77
(berücksichtigt jedoch auch IPv6-Routen, die sich auf diese Schnittstelle beziehen, wenn IPv6 verwendet wird).
Eine weitere (hackerartige) Methode wäre, die Tabelle 220 von Strongswan zu umgehen: Anstelle irgendwelcher Strongswan-Einstellungen würde dasselbe (für diese Frage und dieses Beispiel) mit Folgendem erreicht:
ip rule add priority 219 to 10.0.0.0/24 lookup main
Es wird die standardmäßige (Haupt-)Routingtabelle mit dem Zielnetzwerk verwendet, anstatt mit der Tabelle 220 von Strongswan zum nächsten Eintrag fortzufahren.