github.com/igoogolx/clash@v1.19.8/docs/zh_CN/advanced-usages/openconnect.md (about) 1 --- 2 sidebarTitle: 基于规则的 OpenConnect 3 sidebarOrder: 2 4 --- 5 6 # 基于规则的 OpenConnect 7 8 支持以下 OpenConnect: 9 10 - Cisco AnyConnect SSL VPN 11 - Juniper Network Connect 12 - Palo Alto Networks (PAN) GlobalProtect SSL VPN 13 - Pulse Connect Secure SSL VPN 14 - F5 BIG-IP SSL VPN 15 - FortiGate SSL VPN 16 - Array Networks SSL VPN 17 18 例如, 您的公司使用 Cisco AnyConnect 作为内部网络访问的方式. 这里我将向您展示如何使用 Clash 提供的策略路由来使用 OpenConnect. 19 20 首先, [安装 vpn-slice](https://github.com/dlenski/vpn-slice#requirements). 这个工具会覆写 OpenConnect 的默认路由表行为. 简单来说, 它会阻止 VPN 覆写您的默认路由. 21 22 接下来您需要一个脚本 (比如 `tun0.sh`) 类似于这样: 23 24 ```sh 25 #!/bin/bash 26 ANYCONNECT_HOST="vpn.example.com" 27 ANYCONNECT_USER="john" 28 ANYCONNECT_PASSWORD="foobar" 29 ROUTING_TABLE_ID="6667" 30 TUN_INTERFACE="tun0" 31 32 # 如果服务器在中国大陆, 请添加 --no-dtls. 中国大陆的 UDP 会很卡. 33 echo "$ANYCONNECT_PASSWORD" | \ 34 openconnect \ 35 --non-inter \ 36 --passwd-on-stdin \ 37 --protocol=anyconnect \ 38 --interface $TUN_INTERFACE \ 39 --script "vpn-slice 40 if [ \"\$reason\" = 'connect' ]; then 41 ip rule add from \$INTERNAL_IP4_ADDRESS table $ROUTING_TABLE_ID 42 ip route add default dev \$TUNDEV scope link table $ROUTING_TABLE_ID 43 elif [ \"\$reason\" = 'disconnect' ]; then 44 ip rule del from \$INTERNAL_IP4_ADDRESS table $ROUTING_TABLE_ID 45 ip route del default dev \$TUNDEV scope link table $ROUTING_TABLE_ID 46 fi" \ 47 --user $ANYCONNECT_USER \ 48 https://$ANYCONNECT_HOST 49 ``` 50 51 之后, 我们将其配置成一个 systemd 服务. 创建 `/etc/systemd/system/tun0.service`: 52 53 ```ini 54 [Unit] 55 Description=Cisco AnyConnect VPN 56 After=network-online.target 57 Conflicts=shutdown.target sleep.target 58 59 [Service] 60 Type=simple 61 ExecStart=/path/to/tun0.sh 62 KillSignal=SIGINT 63 Restart=always 64 RestartSec=3 65 StartLimitIntervalSec=0 66 67 [Install] 68 WantedBy=multi-user.target 69 ``` 70 71 然后我们启用并启动服务. 72 73 ```shell 74 chmod +x /path/to/tun0.sh 75 systemctl daemon-reload 76 systemctl enable tun0 77 systemctl start tun0 78 ``` 79 80 这里您可以查看日志来查看它是否正常运行. 简单的方法是查看 `tun0` 接口是否已经创建. 81 82 和 Wireguard 类似, 将 TUN 设备作为出站很简单, 只需要添加一个策略组: 83 84 ```yaml 85 proxy-groups: 86 - name: Cisco AnyConnect VPN 87 type: select 88 interface-name: tun0 89 proxies: 90 - DIRECT 91 ``` 92 93 ... 然后就可以使用了! 94 95 添加您想要的规则: 96 97 ```yaml 98 rules: 99 - DOMAIN-SUFFIX,internal.company.com,Cisco AnyConnect VPN 100 ``` 101 102 当您发现有问题时, 您应该查看 debug 级别的日志.