Wie kann ich den lokalen LAN-Zugang aufrechterhalten, während eine Verbindung zu Cisco VPN besteht?
Bei der Verbindung über Cisco VPN muss der Server den Client anweisen können, den lokalen LAN-Zugriff zu verhindern.
Angenommen, diese serverseitige Option kann nicht deaktiviert werden. Wie kann der lokale LAN-Zugriff zugelassen werden, während eine Verbindung mit einem Cisco VPN-Client besteht?
Früher dachte ich, dass es nur darum ging, Routen hinzuzufügen, die den LAN-Verkehr mit einer höheren Metrik erfassen, zum Beispiel:
Network
Destination Netmask Gateway Interface Metric
10.0.0.0 255.255.0.0 10.0.0.3 10.0.0.3 20 <--Local LAN
10.0.0.0 255.255.0.0 192.168.199.1 192.168.199.12 1 <--VPN Link
Der Versuch, die 10.0.x.x -> 192.168.199.12
Route zu löschen, hat keine Auswirkungen:
>route delete 10.0.0.0
>route delete 10.0.0.0 mask 255.255.0.0
>route delete 10.0.0.0 mask 255.255.0.0 192.168.199.1
>route delete 10.0.0.0 mask 255.255.0.0 192.168.199.1 if 192.168.199.12
>route delete 10.0.0.0 mask 255.255.0.0 192.168.199.1 if 0x3
Auch wenn es sich möglicherweise immer noch um ein Routingproblem handelt, schlagen Versuche fehl, Routen hinzuzufügen oder zu löschen.
Auf welcher Ebene erledigt der Cisco VPN-Client-Treiber, was im Netzwerkstapel die Fähigkeit eines lokalen Administrators zur Verwaltung seines Computers überschreibt?
Der Cisco VPN-Client kann keine Magie einsetzen. Es ist immer noch Software, die auf meinem Computer läuft. Welchen Mechanismus verwendet es, um das Netzwerk meines Computers zu stören? Was passiert, wenn ein IP / ICMP-Paket im Netzwerk eintrifft? Wo im Netzwerkstapel wird das Paket gefressen?
Siehe auch
- Keine Internetverbindung mit Cisco VPN
- Der Cisco VPN-Client unterbricht die Verbindung zu meinem LDAP-Server
- Cisco VPN beendet das Durchsuchen von Windows 7
- Wie kann ich das Erstellen einer Route in Windows XP beim Herstellen einer Verbindung mit Cisco VPN verhindern?
- Umleiten des lokalen LAN- und Internetverkehrs im VPN
- VPN-Client "Lokalen LAN-Zugriff zulassen"
- Zulassen des lokalen LAN-Zugriffs für VPN-Clients im Konfigurationsbeispiel für den VPN 3000 Concentrator
- LAN-Zugang weg, wenn ich mich mit VPN verbinde
- Windows XP-Dokumentation: Route
Edit: Dinge die ich noch nicht ausprobiert habe:
>route delete 10.0.*
Update: Da Cisco seinen alten Client zugunsten von AnyConnect (HTTP SSL-basiertes VPN) aufgegeben hat, kann diese ungelöste Frage als Relikt der Geschichte zurückgelassen werden.
In Zukunft können wir versuchen, dasselbe Problem mit ihrem neuen Kunden zu lösen .
quelle
Antworten:
Das Problem mit Anyconnect ist, dass es zuerst die Routing-Tabelle ändert, sie dann babysittet und repariert, falls Sie sie manuell ändern. Ich habe einen Workaround dafür gefunden. Kompatibel mit Version 3.1.00495, 3.1.05152, 3.1.05170 und wahrscheinlich auch allen anderen Versionen der 3.1-Familie. Funktioniert möglicherweise mit anderen Versionen, sollte zumindest eine ähnliche Idee funktionieren, vorausgesetzt, der Code wird nicht neu geschrieben. Zum Glück für uns hat Cisco den Babysitter "Baby ist wach" in eine gemeinsame Bibliothek gerufen. Die Idee ist also, dass wir die Aktion von vpnagentd über LD_PRELOAD verhindern.
Zuerst erstellen wir eine Datei
hack.c
:Hinweis: Dieser Code funktioniert nur unter Linux. Informationen zum Anwenden dieser Lösung auf einen macOS-Computer finden Sie in der an macOS angepassten Version .
Dann kompiliere es so:
libhack.so
In den Cisco-Bibliothekspfad installieren :Runter den Agenten:
Stellen Sie sicher, dass es wirklich nicht funktioniert
Wenn nicht,
kill -9
nur um sicher zu gehen.Repariere dann /etc/init.d/vpnagentd, indem du hinzufügst,
LD_PRELOAD=/opt/cisco/anyconnect/lib/libhack.so
wo der vpnagentd aufgerufen wird, so dass er so aussieht:Starten Sie nun den Agenten:
Repariere iptables, weil AnyConnect mit ihnen herumwirbelt:
Möglicherweise möchten Sie hier etwas Fortgeschritteneres tun, um den Zugriff nur auf bestimmte LAN-Hosts zuzulassen.
Korrigieren Sie nun die Routen nach Ihren Wünschen, zum Beispiel:
Überprüfen Sie, ob sie wirklich da sind:
Eine frühere, einfachere Version dieses Hacks enthielt eine Funktion, die nur "return 0" ergab. - Das Poster bemerkte: "Der einzige Nebeneffekt, den ich bisher beobachtet habe, ist, dass vpnagentd 100% der CPU verwendet, wie von top gemeldet, aber die gesamte CPU besteht nur aus 3% Benutzer und 20% System, und das System reagiert perfekt Ich habe es eingeengt, es scheint zwei Auswahlen in einer Schleife zu machen, wenn im Leerlauf schnell von beiden zurückgekehrt wird, aber es liest oder schreibt nie - ich nehme an, der Aufruf, den ich mit LD_PRELOAD ausgeschnitten habe, sollte lauten das zu tun, aber es ist gut genug für mich bis jetzt. Wenn jemand eine bessere Lösung hat, teilen Sie es bitte. "
Das Problem mit dem trivialen Hack ist, dass ein einzelner CPU-Kern die ganze Zeit zu 100% ausfällt, wodurch die Anzahl der Hardware-CPU-Threads effektiv um eins verringert wird - unabhängig davon, ob Ihre VPN-Verbindung aktiv war oder nicht. Mir ist aufgefallen, dass sich die ausgewählten Elemente, die der Code ausführt, auf einem Netlink-Socket befinden, der vpnagentd-Daten sendet, wenn sich die Routingtabelle ändert. vpnagentd bemerkt immer wieder, dass eine neue Nachricht auf dem Netlink-Socket ist und ruft den routeCallBackHandler auf, um damit umzugehen, aber da der triviale Hack die neue Nachricht nicht löscht, wird sie immer wieder aufgerufen. Der oben angegebene neue Code löscht die Netlink-Daten, sodass die Endlosschleife, die die 100% -CPU verursacht hat, nicht auftritt.
Wenn etwas nicht funktioniert, tun Sie Folgendes
gdb -p $(pidof vpnagentd)
, sobald es angehängt ist:und sehen Sie, in welchem Anruf Sie sich befinden. Dann raten Sie einfach, welchen Sie ausschneiden möchten, fügen Sie ihn zu hack.c hinzu und kompilieren Sie ihn erneut.
quelle
_ZN27CInterfaceRouteMonitorLinux20routeCallbackHandlerEv
?nm /opt/cisco/anyconnect/lib/libvpnagentutilities.dylib | grep routeCallbackHandlerEv
und dann finden Sie__ZN25CInterfaceRouteMonitorMac20routeCallbackHandlerEv
nm /opt/cisco/anyconnect/lib/libvpnagentutilities.so
kehrtnm: /opt/cisco/anyconnect/lib/libvpnagentutilities.so: no symbols
auf meinem AnyConnect unter Ubuntu zurück, wurde also ohne Symboltabelleninformationen generiert. Wie konntest du das bekommen?Dies ist SEHR kompliziert. Wenn Sie jedoch eine minimale VM mit VMWare Player oder ähnlichem erstellen und den Cisco AnyConnect VPN-Client damit ausführen, können Sie das Routing möglicherweise mit den virtuellen VMWare-Netzwerkadaptern nach Ihren Wünschen einrichten oder einfach die verwenden VM für den Zugriff auf alle erforderlichen Ressourcen über das Cisco SSL-VPN und "Drag / Drop" -Dateien auf / von Ihrem tatsächlichen Computer.
quelle
Die Shrew Soft VPN-Software hat auch für mich den Trick gemacht, wie Ian Boyd vorgeschlagen hat.
Es kann Cisco VPN-Client-Profile importieren. Ich habe Cisco VPN Client Version 5.0.05.0290 verwendet und nach der Installation von Shrew VPN (Version 2.1.7) und dem Importieren des Cisco-Profils konnte ich ohne zusätzliche Konfiguration der Shrew VPN-Verbindung (oder auf das lokale LAN zugreifen, während ich mit dem Unternehmens-VPN verbunden war Software).
quelle
Vielen Dank an Sasha Pachev für den netten Hack oben.
vpnagentd
Verwirrt auch den Resolver, indem er die an vorgenommenen Änderungen überschreibt/etc/resolv.conf
. Ich habe es gelöst, indem ich irgendwann das Rennen gewonnen habe:Vergessen Sie nicht,
chattr -i /etc/resolv.conf
wenn Sie die Verbindung trennen.Ich versuche es zu lösen, indem ich den Rückruf abfange, wie bei der oben beschriebenen Routing-Methode, aber ich kann den entsprechenden Rückruf oder die entsprechende Methode noch nicht finden.
Update1 / 2: Ein
strace
enthüllt, dassvpnagentd
dieinotify
API verwendet, um die Änderungen der Resolver-Datei zu überwachen. Von da an ging es bergab. Hier ist der zusätzliche Hack:Das ist ein bisschen übertrieben, da es die Überwachung aller Dateien für den Agenten deaktiviert . Scheint aber OK zu funktionieren.
Das unten stehende VPN-Client-Wrapper-Skript integriert alle Funktionen (aktualisiert, um diesen zusätzlichen Hack einzuschließen).
chattr
wird nicht mehr benötigtUpdate 3: Benutzer- / Passworteinstellungen im Skript korrigiert. Es wird jetzt eine
vpn.conf
Datei mit dem unten beschriebenen Format (und den Berechtigungen nur für Root-Benutzer) verwendet.quelle
Mein Unternehmen verwendet diesen VPN immer noch. Der vpnc-client ändert einfach die iptables-einstellungen auf diese weise:
Es filtert alle bis auf den VPN-Verkehr.
Holen Sie sich einfach den Filter in eine Datei mit iptables-save, fügen Sie INPUT- und OUTPOUT-Zugriffszeilen hinzu, die Ihren Anforderungen entsprechen, und wenden Sie die Datei mit iptables-restore erneut an.
Zum Beispiel, um auf ein lokales Netzwerk unter 192.168.0 zuzugreifen
quelle
Gibt es darüber irgendwelche Neuigkeiten?
Ich stimme voll und ganz zu und wundere mich über das Gleiche.
Wie auch immer, es ist eine App, für deren Installation Administratorrechte erforderlich sind, und während sie ausgeführt wird, filtert sie möglicherweise sehr gut, was Sie tun ...
Meine Versuche unter Windows schlagen ebenfalls fehl:
Haha. Hier scheint es keine Metrik unter 20 zu geben.
quelle
Ich weiß nicht, ob ich es richtig verstanden habe, aber ich kläre zuerst mein Verständnis:
Sie haben ein lokales LAN (z. B. 10.0.0.0/16) und einen Remote-Cisco-VPN-Server (z. B. 64.0.0.0/16). Sie möchten über den Cisco-VPN-Client eine Verbindung zum VPN-Server herstellen und benötigen dies dennoch In diesem Fall möchten Sie die gesamte 10.0.xx / 16 von der VPN-Verbindung trennen. Die folgende Route muss in einem Mac-Client hinzugefügt werden:
Dabei ist en1 die Schnittstelle, über die Sie mit Ihrem LAN verbunden sind. Ich weiß, dass Sie das Gleiche auch in Windows und Linux hinzufügen können.
quelle
Da ich keine Kommentare hinzufügen kann, werde ich hier posten. Ich arbeite unter Windows.
Die Lösung, die Virtual Machine verwendet und AnyConnect in der VM ausführt und dann VM als Vermittler zwischen Ihrer Arbeitsumgebung und dem Unternehmensnetzwerk verwendet, funktioniert nicht, wenn Ihre "geliebte" IT-Abteilung 0.0.0.0 über VPN weiterleitet, also sogar Ihr lokales Netzwerk (einschließlich dieses) zwischen Ihrem lokalen PC und VM) wird über das VPN geleitet (sic!).
Ich habe versucht, die von @Sasha Pachev gepostete Lösung anzuwenden, aber am Ende habe ich die .dll-Datei so gepatcht, dass sie zu Beginn der Funktion den Wert 0 zurückgibt. Nach einigen Auseinandersetzungen mit der dynamischen Bibliothek konnte ich die Routing-Tabellen nach meinen Wünschen anpassen, aber anscheinend reicht das nicht aus!
Obwohl meine Regeln für Split-Tunneling korrekt zu sein scheinen, erhalte ich immer noch General Failure. Sind Sie auf ein ähnliches Problem gestoßen, das Sie lösen konnten?
So sieht meine Routing-Tabelle jetzt aus (nach manuellen Änderungen bei aktiviertem VPN)
Dennoch folgen die Ergebnisse von Ping
Im Folgenden sehen Sie lediglich als Referenz, wie die Routentabelle aussieht, wenn die VPN-Verbindung getrennt ist (unverändert).
und so sieht die Tabelle aus, wenn eine VPN-Verbindung besteht (unverändert). In dem Fall, wenn ich versuche, ein Ping-Signal zu senden,
8.8.8.8
erhalte ich einfach eine Zeitüberschreitung (da die Firewall des Unternehmens keinen Datenverkehr außerhalb des Intranets zulässt).quelle
Wenn Sie bei Verwendung eines Cisco AnyConnect-SSL-VPN die Kontrolle über Ihre Routingtabelle behalten möchten , lesen Sie OpenConnect . Beide unterstützen das Cisco AnyConnect SSL VPN und versuchen nicht, Routing-Tabelleneinträge zu stören oder zu "sichern". @ Vadzim spielt in einem Kommentar oben darauf an .
Nachdem ich alles versucht hatte, außer den AnyConnect Secure Mobility Client zu patchen, konnte ich ihn unter Windows erfolgreich durch OpenConnect GUI ersetzen . Dadurch konnte ich die Konnektivität zu lokalen Ressourcen aufrechterhalten (und die Routingtabelle aktualisieren).
Ich verwende OpenConnect unter Windows, aber es unterstützt auch Linux, BSD und MacOS (unter anderem Plattformen) entsprechend der Projektseite .
quelle
Versuchen Sie, diese Einträge mit dem Gateway zu entfernen. Überprüfen
10.64.202.13
Sie, ob Ping8.8.8.8
funktioniert, und fügen Sie sie nacheinander wieder hinzu, und identifizieren Sie, welcher die Störung verursacht.Wie haben Sie die DLL gepatcht? Ich kann nicht einmal die Routing-Tabelle ändern, da das
0.0.0.0
mit VPN-Gateway immer wieder hinzugefügt wird .quelle