Clash高级用法-基于规则的OpenConnect

基于规则的 OpenConnect

支持以下 OpenConnect:

  • Cisco AnyConnect SSL VPN
  • Juniper Network Connect
  • Palo Alto Networks (PAN) GlobalProtect SSL VPN
  • Pulse Connect Secure SSL VPN
  • F5 BIG-IP SSL VPN
  • FortiGate SSL VPN
  • Array Networks SSL VPN

例如, 您的公司使用 Cisco AnyConnect 作为内部网络访问的方式. 这里我将向您展示如何使用 Clash 提供的策略路由来使用 OpenConnect.

首先, 安装 vpn-slice. 这个工具会覆写 OpenConnect 的默认路由表行为. 简单来说, 它会阻止 VPN 覆写您的默认路由.

接下来您需要一个脚本 (比如 tun0.sh) 类似于这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
ANYCONNECT_HOST="vpn.example.com"
ANYCONNECT_USER="john"
ANYCONNECT_PASSWORD="foobar"
ROUTING_TABLE_ID="6667"
TUN_INTERFACE="tun0"

# 如果服务器在中国大陆, 请添加 --no-dtls. 中国大陆的 UDP 会很卡.
echo "$ANYCONNECT_PASSWORD" | \
openconnect \
--non-inter \
--passwd-on-stdin \
--protocol=anyconnect \
--interface $TUN_INTERFACE \
--script "vpn-slice
if [ \"\$reason\" = 'connect' ]; then
ip rule add from \$INTERNAL_IP4_ADDRESS table $ROUTING_TABLE_ID
ip route add default dev \$TUNDEV scope link table $ROUTING_TABLE_ID
elif [ \"\$reason\" = 'disconnect' ]; then
ip rule del from \$INTERNAL_IP4_ADDRESS table $ROUTING_TABLE_ID
ip route del default dev \$TUNDEV scope link table $ROUTING_TABLE_ID
fi" \
--user $ANYCONNECT_USER \
https://$ANYCONNECT_HOST

之后, 我们将其配置成一个 systemd 服务. 创建 /etc/systemd/system/tun0.service:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=Cisco AnyConnect VPN
After=network-online.target
Conflicts=shutdown.target sleep.target

[Service]
Type=simple
ExecStart=/path/to/tun0.sh
KillSignal=SIGINT
Restart=always
RestartSec=3
StartLimitIntervalSec=0

[Install]
WantedBy=multi-user.target

然后我们启用并启动服务.

1
2
3
4
chmod +x /path/to/tun0.sh
systemctl daemon-reload
systemctl enable tun0
systemctl start tun0

这里您可以查看日志来查看它是否正常运行. 简单的方法是查看 tun0 接口是否已经创建.

和 Wireguard 类似, 将 TUN 设备作为出站很简单, 只需要添加一个策略组:

1
2
3
4
5
6
proxy-groups:
- name: Cisco AnyConnect VPN
type: select
interface-name: tun0
proxies:
- DIRECT

… 然后就可以使用了!

添加您想要的规则:

1
2
rules:
- DOMAIN-SUFFIX,internal.company.com,Cisco AnyConnect VPN

当您发现有问题时, 您应该查看 debug 级别的日志.


Clash高级用法-基于规则的OpenConnect
https://blog.qingyi-studio.top/2025/01/22/Clash高级用法-基于规则的OpenConnect/
作者
QingYi Studio
发布于
2025年1月22日
更新于
2025年3月7日
许可协议