route add funktioniert nicht mehr, wenn ich über cisco anyconnect client eine Verbindung zu VPN hergestellt habe


12

Wenn ich über einen Cisco AnyConnectClient eine Verbindung zu einem VPN-Server hergestellt habe , sind meine Virtualbox-Routing-Informationen nicht mehr vorhanden.

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         *               0.0.0.0         U     0      0        0 cscotun0
default         172.21.157.1    0.0.0.0         UG    256    0        0 eth0
172.23.36.90    172.21.157.1    255.255.255.255 UGH   0      0        0 eth0
172.23.236.0    *               255.255.254.0   U     0      0        0 cscotun0

Dann habe ich versucht, es wiederherzustellen über:

# ip route add 192.168.56.0/24 via 192.168.56.1 src 192.168.56.1

Der Befehl ist ohne Fehler erfolgreich, aber vom routeBefehl aus wird nichts hinzugefügt

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         *               0.0.0.0         U     0      0        0 cscotun0
default         172.21.157.1    0.0.0.0         UG    256    0        0 eth0
172.23.36.90    172.21.157.1    255.255.255.255 UGH   0      0        0 eth0
172.23.236.0    *               255.255.254.0   U     0      0        0 cscotun0

Irgendwelche Ideen? Ich habe Apparmor so konfiguriert, dass vpnagentd daran gehindert wird, entweder den Befehl iptables oder den Befehl modprobe auszuführen, falls dies verwandt ist.

Antworten:


7

Es stellte sich heraus, dass der Cisco AnyConnect-Client die Routing-Tabelle überwacht.

Die C ++ - Funktion CHostConfigMgr::StartInterfaceAndRouteMonitoring()erledigte den Job. Sie können die Funktion entweder so ändern, dass sie sofort zurückgegeben wird (und die Prüfsummenüberprüfung in vpnagentd korrigieren) oder diese Lösung mit einem neuen Funktionsnamen ausprobieren_ZN14CHostConfigMgr32StartInterfaceAndRouteMonitoringEv


5

Intro und andere Optionen

Es ist ungefähr 5,5 Jahre her, also überlasse ich diese Antwort meistens den Leuten und versuche, die gleichen Probleme mit dem modernen Cisco Anyconnect 4.x zu lösen. In meinem Fall hat Anyconnect den Datenverkehr in den lokalen Kubernetes-Cluster verpackt, der von Minikube unter macOS aufgerufen wurde.

Methoden wie _ZN27CInterfaceRouteMonitorLinux20routeCallbackHandlerEvoder __ZN25CInterfaceRouteMonitorMac20routeCallbackHandlerEvbeschrieben in:

Scheint nicht mehr zu funktionieren. Außerdem beziehen sich viele Anleitungen auf das Beheben der OS X-Firewall, die in früheren Versionen vom ipfwDienstprogramm wie hier dargestellt wurde , sodass sie irrelevant sind.

Patchen von vpnagentd

Im Jahr 2019 kämpfen wir immer noch mit beiden Problemen, da Unternehmen Split-Routing vermeiden und unangemessene Firewall-Regeln aufstellen. Hier das Update.

Sie müssen den Aufruf der Methode CHostConfigMgr::StartInterfaceAndRouteMonitoring()in vpnagentdBinärform patchen , die sich in meiner Version unter befindet 0x09cbf6. Es ist ein einfacher jmp qwordBefehl, der niemals an diesen Ort zurückgegeben wird, also nopkann Single genug sein. Es könnte sich jedoch lohnen, den Befehl mit 6 nops vollständig zu löschen .

Hier das Python-Skript, das diese Prozedur für Sie automatisieren kann, jedoch kann Ihnen jedes Demontage-Dienstprogramm dort helfen. In meinen ursprünglichen Recherchen und Hacks habe ich verwendet, radare2was sehr praktisch für Leute ist, die solche Aktionen nicht täglich ausführen:

#!/usr/bin/python3

MAGIC_OFFSET = "0x09cbf6"
MAGIC_BYTE = 144

def eff_anyconnect(file):

    print("Opening {} to patch it".format(file))
    with open(file, "rb+") as f:
        print("Going to {}".format(MAGIC_OFFSET))

        print("Current command to call method for watching our routing table")
        f.seek(int(MAGIC_OFFSET, 16))
        print(hex(int.from_bytes(f.read(6), "big")))

        f.seek(int(MAGIC_OFFSET, 16))
        f.write(bytes([MAGIC_BYTE]))

        print("NOP any longer:")
        f.seek(int(MAGIC_OFFSET, 16))
        print(hex(int.from_bytes(f.read(6), "big")))

eff_anyconnect("/your/path/to/cisco/bin/vpnagentd")

Im nächsten Schritt sollten Sie nach dem Patchen der Binärdatei den aktuellen vpnagentProzess beenden und die Verbindung zu Ihrem VPN wiederherstellen. Möglicherweise sind die gewünschten Routen weiterhin betroffen, aber der obige Hack entsperrt die Routing-Tabelle, sodass Sie Routen überschreiben können.

Routen

Ich würde vorschlagen -static, solche hinzuzufügen , die von AnyConnect überhaupt nicht gestört werden, während nicht statische noch von getunnelten dupliziert werden. Ich habe hier keine gute Lösung, für meinen Fall war eine einzige statische Route ausreichend:

sudo route -n delete $(minikube ip) 
sudo route -n add $(minikube ip) -interface bridge100 -static

Firewall

Letzter Firewall-Schritt. Das ist ziemlich einfach. Sie müssen überprüfen, welche Regeln nur AnyConnect-Tags verweigern oder zulassen. In meinem Fall wurde alles blockiert, was nicht markiert ist. Deshalb habe ich eine Datei mit folgenden Einträgen erstellt:

nat on utun1 proto {tcp, udp, icmp} from 192.168.64.0/24 to any -> utun1 
pass in log on bridge0 inet all flags S/SA keep state tag cisco_anyconnect_vpn_pass
pass in log on bridge100 inet all flags S/SA keep state tag cisco_anyconnect_vpn_pass

Beachten Sie Folgendes:

  • utun1 ist Ihre AnyConnect-Schnittstelle
  • bridge0und bridge100sind Ihre Minikube / Docker-Brücken. Aus irgendeinem Grund benennt AnyConnect Bridges um.
  • 192.168.64.0/24 ist dein Minikube-Subnetz.

Dann renne:

sudo pfctl -e enable packet-filtering
sudo pfctl -f <your_file_with_rules> -v

Von nun an sollten Sie bis zur nächsten erneuten Verbindung in Bezug auf Routen und Firewall gut sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.