다음 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 수준의 로그를 확인하세요.
