次の 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)が必要です:
sh
#!/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 を作成します:
ini
[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その後、サービスを有効にして起動します。
shell
chmod +x /path/to/tun0.sh
systemctl daemon-reload
systemctl enable tun0
systemctl start tun0ここではログを確認して、正常に動作しているかを判断できます。簡単な確認方法は、tun0 インターフェースが作成されているかを見ることです。
Wireguard と同様に、TUN デバイスをアウトバウンドとして使うのは簡単です。ポリシーグループを一つ追加します:
yaml
proxy-groups:
- name: Cisco AnyConnect VPN
type: select
interface-name: tun0
proxies:
- DIRECT……これで使用できます。
必要なルールを追加します:
yaml
rules:
- DOMAIN-SUFFIX,internal.company.com,Cisco AnyConnect VPN問題がある場合は、debug レベルのログを確認してください。
