Kombination aus Policy-based routing und VPN-Kaskadierung
-
Hallo zusammen,
ich betreibe hier bei mir eine pfSense und nutze darauf eine Open-VPN-Verbindung zu einem VPN-Anbieter, die mittels policy-based routing nur für einen Client im LAN greift.
Die Ausgangssituation für diesen Client sieht demnach wie folgt aus:
ISP -> VPN-Anbieter -> pfSense -> Client im LAN public IP VPN public IP 172.17.0.1 172.17.0.8
Mittels diverser Foreneinträge und Youtube habe ich das obige Setup inklusive Killswitch mittels Floating-Rules (durch tagging des VPN-Traffics) am laufen, so sieht das ganze auf der pfSense aus
Sobald die VPN-Verbindung PIA_SCHWEIZ down ist, hat der Client 172.17.0.8 kein Internetzugang mehr - so soll es sein!
Jetzt kommt der Part, wo ich inzwischen wirklich am verzweifeln bin - ich möchte das Setup nun um eine weitere VPN-Verbindung (in diesem Fall PIA_LUXEMBURG) erweitern.
Das Ganze soll es Kaskade laufen, sprich der eine VPN-Tunnel wird durch den anderen VPN-Tunnel aufgebaut. Dies soll später dazu dienen, dass man zwei verschiedene VPN-Anbieter kombinieren kann.
Für genau diesen Einsatzzweck scheint das Multi-Hop-Package perfekt zu passen. Also hab ich es installiert und die beiden VPN-Verbindungen ausgewählt.
Es scheint auch alles zu funktionieren. Nach meinem Verständnis sollte dann jedoch, sobald die erste der beiden VPN-Verbindungen abbricht, auch die zweite abbrechen, da die beiden Tunnel kaskadiert sind. Genau das passiert
jedoch nicht. Der Client hat weiterhin Zugang zum Internet.Vielleicht kann man an den Routen etwas erkennen?
Mich würde auch interessieren, wie man hunderprozentig sichergehen kann, dass der Traffic auch wirklich über beide VPNs läuft.Anstatt des Multi-Hop-Package könnte man eventuell ja auch dem zweiten VPN-Client das Gateway PIA_SCHWEIZ anstatt WAN zuordnen, um die Kaskadierung zu gewährleisten?
Womöglich hat es auch etwas mit dem policy-based routing zu tun?
Ich weiß wirklich nicht mehr weiter und hoffe inständig, dass es jemanden gibt, der sich mit dieser Thematik auskennt und mir weiterhelfen würde.
Vielen Dank und beste Grüße
-
@juergen69
Hast du auch das "route-up" Kommando im Client konfiguriert?
Die Routen lassen vermuten, dass das fehlt.Allerdings kenne ich das Paket auch nicht.
Ich hätte auch einfach in den Client Einstellungen als Interface das der anderen Instanz ausgewählt und wäre davon ausgegangen, dass so diese erst eine Verbindung haben muss, bevor der Client eine Verbindung aufbaut. -
@viragoman
Vielen Dank für deine Antwort. Mit diesem Kommando konnte ich nichts anfangen. Ich dachte, dass dort nur der technische Hintergrund erläutert wird und das Paket dies automatisch erledigt.Ich bin für weitere Anregungen gerne offen.
-
@juergen69 ich verstehe dein vorhaben nur bedingt, warum willst du eine vpn verbindung durch eine andere aufbauen, was genau bezweckst du damit.
-
@micneu
Ich möchte die Möglichkeit nutzen, zwei verschiedene VPN-Provider zu kombinieren. Sollte ein Anbieter entgegen seiner Werbeversprechen doch Daten loggen und ggf. sogar herausgeben, hat man eine Art Sicherheitsnetz durch den weiteren Provider.Ich habe nochmal ein bisschen herum experimentiert und folgende Lösung getestet
Das Multi-Hop-Package wurde deaktiviert.
Als Interface bei PIA_SCHWEIZ habe ich nun statt WAN das Interface PIA_LUXEMBURG gewählt. Weitere Änderungen habe ich nicht vorgenommen. Aus meiner Sicht sollte der VPN-Tunnel in die Schweiz somit immer über den VPN-Tunnel nach Luxemburg aufgebaut werden, richtig?Der Ping für PIA_SCHWEIZ ist jedenfalls gestiegen, was ja wohl dafür spricht, dass die Kaskadierung funktioniert.
Zusätzlich habe ich beide VPN-Clients im Service Watchdog hinzugefügt, um die Verbindungen nach der nächtlichen Zwangstrennung wieder aufzubauen. Mal sehen, ob auch das funktioniert, da ja PIA_SCHWEIZ nicht verbunden wird, bevor PIA_LUXEMBURG online ist.
Im Detail sieht das Ganze jetzt so aus
Aus der Ansicht der Routes werde ich nicht wirklich schlau.
Was meint ihr zu dieser Lösung?
-
@viragomann said in Kombination aus Policy-based routing und VPN-Kaskadierung:
Allerdings kenne ich das Paket auch nicht.
Das Paket ist auch kein offizielles Paket und wurde laut eigenem Readme NUR mit Perfect Privacy getestet und konzipiert. Es kann also schlichtweg sein, dass es nicht so wie gewünscht mit PIA funktioniert oder es eben diverse Seitenprobleme damit gibt. Das kann man schlecht wissen.
Ansonsten verstehe ich den Sinn der "Lösung" nur bedingt. Gerade wenn es genau EIN Rechner ist, der mit dem ganzen Zirkus bespielt wird, ist es IMHO den ganzen Aufriss nicht wert nur um nicht nen VPN Client auf dem Rechner zu haben. Und verschiedene Provider zu mixen ist ein frommer Wunsch, der so oder so nur begrenzte Erfolgswahrscheinlichkeit hat. Der Grund warum das nur mit PP getestet wurde ist, dass PP das Feature AFAIK anbietet und auch entsprechend konfigurierbar hat. Zwei VPN Anbieter die das NICHT haben scheren sich schlichtweg nicht um MultiHopping und nutzen ggf. die gleichen Transfernetze oder überlappende interne Netzbereiche, so dass man die ganze Spielwiese eh nicht einsetzen kann weil die Routen kollidieren. Ist zwar eine nette theoretische Idee, aber praktisch mit zu vielen Problemen direkt vom Start weg behaftet als das das für mich in irgendeiner Form sinnvoll nutzbar wäre.
Aber das ist nur mein persönlicher Ausblick darauf. Ich bin eben alt (in Internetzeit) ;)
-
Ich habe auf dem Client zum Test mal eine etwas größere Datei heruntergeladen und siehe da: Der Traffic erhöht sich in der Folge tatsächlich bei beiden VPN-Verbindungen. Somit scheinen beide Tunnel wohl kaskadiert zu laufen.
Mein aktuelles Setup funktioniert allerdings anscheinend nur solange, bis es zur nächtlichen Zwangstrennung kommt. Anschließend werden beide VPN-Tunnel zwar wieder verbunden, aber der Client hat trotzdem keinen Internetzugang.
Erst wenn ich beim VPN-Client PIA_SCHWEIZ das Interface einmal manuell von PIA_LUXEMBURG auf WAN und wieder zurück auf PIA_LUXEMBURG stelle, hat der Client im LAN wieder Zugang zum Internet.
Hat jemand eine Idee woran dies liegen könnte?
In den Logs der pfSense zu Open-VPN sieht es folgendermaßen aus:
Feb 10 03:30:01 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:01 openvpn 736 write UDPv4: No route to host (code=65) Feb 10 03:30:01 openvpn 736 write UDPv4: No route to host (code=65) Feb 10 03:30:01 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:02 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:02 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:03 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:03 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:04 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:04 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:05 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:05 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:05 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:05 openvpn 736 write UDPv4: No route to host (code=65) Feb 10 03:30:06 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:06 openvpn 736 write UDPv4: No route to host (code=65) Feb 10 03:30:06 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:06 openvpn 736 write UDPv4: No route to host (code=65) Feb 10 03:30:07 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:07 openvpn 736 write UDPv4: No route to host (code=65) Feb 10 03:30:07 openvpn 52072 write UDPv4: No route to host (code=65) Feb 10 03:30:07 openvpn 736 write UDPv4: No route to host (code=65) Feb 10 03:30:18 openvpn 736 event_wait : Interrupted system call (code=4) Feb 10 03:30:18 openvpn 736 SIGTERM received, sending exit notification to peer Feb 10 03:30:19 openvpn 736 /usr/local/sbin/ovpn-linkdown ovpnc2 1500 1552 10.2.112.73 255.255.255.0 init Feb 10 03:30:19 openvpn 736 SIGTERM[soft,exit-with-notification] received, process exiting Feb 10 03:30:19 openvpn 74448 WARNING: file '/var/etc/openvpn/client2/up' is group or others accessible Feb 10 03:30:19 openvpn 74448 OpenVPN 2.5.2 amd64-portbld-freebsd12.2 [SSL (OpenSSL)] [LZO] [LZ4] [MH/RECVDA] [AEAD] built on Nov 15 2021 Feb 10 03:30:19 openvpn 74448 library versions: OpenSSL 1.1.1k-freebsd 25 Mar 2021, LZO 2.10 Feb 10 03:30:19 openvpn 75337 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts Feb 10 03:30:19 openvpn 75337 WARNING: experimental option --capath /var/etc/openvpn/client2/ca Feb 10 03:30:19 openvpn 75337 TCP/UDP: Preserving recently used remote address: [AF_INET]5.253.204.107:1198 Feb 10 03:30:19 openvpn 75337 UDPv4 link local (bound): [AF_INET]217.xxx.xxx.xxx:0 Feb 10 03:30:19 openvpn 75337 UDPv4 link remote: [AF_INET]5.253.204.107:1198 Feb 10 03:30:19 openvpn 75337 WARNING: 'link-mtu' is used inconsistently, local='link-mtu 1569', remote='link-mtu 1542' Feb 10 03:30:19 openvpn 75337 WARNING: 'auth' is used inconsistently, local='auth SHA256', remote='auth SHA1' Feb 10 03:30:19 openvpn 75337 WARNING: 'keysize' is used inconsistently, local='keysize 256', remote='keysize 128' Feb 10 03:30:19 openvpn 75337 WARNING: 'comp-lzo' is present in remote config but missing in local config, remote='comp-lzo' Feb 10 03:30:19 openvpn 75337 [luxembourg404] Peer Connection Initiated with [AF_INET]5.253.204.107:1198 Feb 10 03:30:19 openvpn 75337 Options error: option 'redirect-gateway' cannot be used in this context ([PUSH-OPTIONS]) Feb 10 03:30:19 openvpn 75337 Options error: option 'route-ipv6' cannot be used in this context ([PUSH-OPTIONS]) Feb 10 03:30:19 openvpn 75337 Options error: option 'dhcp-option' cannot be used in this context ([PUSH-OPTIONS]) Feb 10 03:30:19 openvpn 75337 TUN/TAP device ovpnc2 exists previously, keep at program end Feb 10 03:30:19 openvpn 75337 TUN/TAP device /dev/tun2 opened Feb 10 03:30:19 openvpn 75337 /sbin/ifconfig ovpnc2 10.9.112.52 10.9.112.1 mtu 1500 netmask 255.255.255.0 up Feb 10 03:30:19 openvpn 75337 /usr/local/sbin/ovpn-linkup ovpnc2 1500 1552 10.9.112.52 255.255.255.0 init Feb 10 03:30:19 openvpn 75337 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this Feb 10 03:30:19 openvpn 75337 Initialization Sequence Completed Feb 10 03:31:00 openvpn 52072 [zurich402] Inactivity timeout (--ping-restart), restarting Feb 10 03:31:00 openvpn 52072 SIGUSR1[soft,ping-restart] received, process restarting Feb 10 03:31:05 openvpn 52072 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts Feb 10 03:31:05 openvpn 52072 TCP/UDP: Preserving recently used remote address: [AF_INET]212.102.37.200:1198 Feb 10 03:31:05 openvpn 52072 TCP/UDP: Socket bind failed on local address [AF_INET]10.2.112.73:0: Can't assign requested address (errno=49) Feb 10 03:31:05 openvpn 52072 Exiting due to fatal error Feb 10 03:31:05 openvpn 52072 /usr/local/sbin/ovpn-linkdown ovpnc1 1500 1622 10.23.112.116 255.255.255.0 init Feb 10 03:32:00 openvpn 76840 WARNING: file '/var/etc/openvpn/client1/up' is group or others accessible Feb 10 03:32:00 openvpn 76840 OpenVPN 2.5.2 amd64-portbld-freebsd12.2 [SSL (OpenSSL)] [LZO] [LZ4] [MH/RECVDA] [AEAD] built on Nov 15 2021 Feb 10 03:32:00 openvpn 76840 library versions: OpenSSL 1.1.1k-freebsd 25 Mar 2021, LZO 2.10 Feb 10 03:32:00 openvpn 77162 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts Feb 10 03:32:00 openvpn 77162 WARNING: experimental option --capath /var/etc/openvpn/client1/ca Feb 10 03:32:00 openvpn 77162 TCP/UDP: Preserving recently used remote address: [AF_INET]212.102.37.60:1198 Feb 10 03:32:00 openvpn 77162 UDPv4 link local (bound): [AF_INET]10.9.112.52:0 Feb 10 03:32:00 openvpn 77162 UDPv4 link remote: [AF_INET]212.102.37.60:1198 Feb 10 03:32:00 openvpn 77162 WARNING: 'link-mtu' is used inconsistently, local='link-mtu 1569', remote='link-mtu 1542' Feb 10 03:32:00 openvpn 77162 WARNING: 'auth' is used inconsistently, local='auth SHA256', remote='auth SHA1' Feb 10 03:32:00 openvpn 77162 WARNING: 'keysize' is used inconsistently, local='keysize 256', remote='keysize 128' Feb 10 03:32:00 openvpn 77162 WARNING: 'comp-lzo' is present in remote config but missing in local config, remote='comp-lzo' Feb 10 03:32:00 openvpn 77162 [zurich404] Peer Connection Initiated with [AF_INET]212.102.37.60:1198 Feb 10 03:32:00 openvpn 77162 Options error: option 'redirect-gateway' cannot be used in this context ([PUSH-OPTIONS]) Feb 10 03:32:00 openvpn 77162 Options error: option 'route-ipv6' cannot be used in this context ([PUSH-OPTIONS]) Feb 10 03:32:00 openvpn 77162 Options error: option 'dhcp-option' cannot be used in this context ([PUSH-OPTIONS]) Feb 10 03:32:00 openvpn 77162 TUN/TAP device ovpnc1 exists previously, keep at program end Feb 10 03:32:00 openvpn 77162 TUN/TAP device /dev/tun1 opened Feb 10 03:32:00 openvpn 77162 /sbin/ifconfig ovpnc1 10.17.112.127 10.17.112.1 mtu 1500 netmask 255.255.255.0 up Feb 10 03:32:00 openvpn 77162 /usr/local/sbin/ovpn-linkup ovpnc1 1500 1552 10.17.112.127 255.255.255.0 init Feb 10 03:32:00 openvpn 77162 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this Feb 10 03:32:00 openvpn 77162 Initialization Sequence Completed