tuyến thêm không còn hoạt động khi tôi kết nối với VPN thông qua máy khách cisco anyconnect


12

Khi tôi kết nối với máy chủ VPN qua Cisco AnyConnectmáy khách, thông tin định tuyến hộp ảo của tôi sẽ biến mất.

# 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

Sau đó, tôi đã cố gắng khôi phục nó thông qua:

# ip route add 192.168.56.0/24 via 192.168.56.1 src 192.168.56.1

Lệnh thành công mà không có lỗi, nhưng từ routelệnh, nó không thêm bất cứ thứ gì

# 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

Có ý kiến ​​gì không? Tôi đã cấu hình apparmor để chặn vpnagentd chạy lệnh iptables hoặc modprobe, nếu điều đó có liên quan.

Câu trả lời:


7

Hóa ra đó là máy khách Cisco AnyConnect đang theo dõi bảng định tuyến.

Hàm C ++ CHostConfigMgr::StartInterfaceAndRouteMonitoring()đang thực hiện công việc. Bạn có thể sửa đổi hàm để làm cho hàm trả về ngay lập tức (và sửa xác minh tổng kiểm tra trong vpnagentd) hoặc thử giải pháp này với tên hàm mới_ZN14CHostConfigMgr32StartInterfaceAndRouteMonitoringEv


5

Giới thiệu và các tùy chọn khác

Giống như 5,5 năm, vì vậy tôi chủ yếu để lại câu trả lời này cho mọi người, cố gắng giải quyết các vấn đề tương tự với Cisco Anyconnect 4.x hiện đại. Trong trường hợp của tôi, Anyconnect đang gói lưu lượng truy cập vào cụm Kubernetes cục bộ do Minikube đưa lên trên macOS.

Các phương thức như _ZN27CInterfaceRouteMonitorLinux20routeCallbackHandlerEvhoặc __ZN25CInterfaceRouteMonitorMac20routeCallbackHandlerEvđược mô tả trong:

Có vẻ như không còn làm việc nữa. Ngoài ra, rất nhiều hướng dẫn có liên quan đến việc sửa tường lửa OS X được thể hiện trong các phiên bản trước bởi ipfwtiện ích như ở đây , vì vậy chúng không liên quan.

Vá vpnagentd

Năm 2019, chúng tôi vẫn chiến đấu với cả hai vấn đề cho các công ty tránh định tuyến phân chia và đưa ra các quy tắc tường lửa không hợp lý. Đây là sửa chữa.

Bạn cần vá lỗi gọi phương thức CHostConfigMgr::StartInterfaceAndRouteMonitoring()trong vpnagentdnhị phân, trong phiên bản của tôi nằm ở 0x09cbf6. Đó là một jmp qwordlệnh đơn giản , không bao giờ được trả lại cho nơi này, vì vậy độc thân nopcó thể là đủ. Tuy nhiên, nó có thể có giá trị xóa sạch hoàn toàn lệnh trong 6 nopgiây.

Ở đây tập lệnh Python có thể tự động hóa thủ tục này cho bạn, tuy nhiên mọi tiện ích tháo gỡ đều có thể giúp bạn ở đó. Trong nghiên cứu ban đầu và hack tôi đã sử dụng radare2khá tiện dụng cho những người không thực hiện các hành động đó hàng ngày:

#!/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")

Bước tiếp theo, sau khi bạn vá lỗi nhị phân, bạn nên hủy vpnagenttiến trình hiện tại và kết nối lại với VPN của mình. Bạn có thể thấy rằng các tuyến mong muốn vẫn bị ảnh hưởng, nhưng hack ở trên sẽ mở khóa bảng định tuyến, do đó bạn có thể ghi đè các tuyến.

Tuyến đường

Tôi sẽ đề nghị thêm -staticnhững cái không bị can thiệp bởi AnyConnect, trong khi không tĩnh vẫn bị trùng lặp bởi những cái được tạo đường hầm. Tôi không có giải pháp tốt ở đây, đối với trường hợp của tôi, tuyến tĩnh duy nhất là đủ:

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

Bức tường lửa

Cuối cùng, bước tường lửa. Điều đó khá đơn giản, bạn cần kiểm tra các quy tắc từ chối hoặc chỉ cho phép các quy tắc được gắn thẻ AnyConnect là gì. Trong trường hợp của tôi, mọi thứ không được gắn thẻ đều bị chặn, vì vậy tôi đã tạo một tệp có các mục sau:

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

Hãy nhớ những điều sau:

  • utun1 là giao diện AnyConnect của bạn
  • bridge0bridge100là cầu Minikube / Docker của bạn. Vì một số lý do, AnyConnect đổi tên các cây cầu.
  • 192.168.64.0/24 là mạng con Minikube của bạn.

Sau đó chạy:

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

Từ giờ trở đi, cho đến khi kết nối lại lần sau, bạn sẽ giỏi về các tuyến đường và tường lửa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.