一个基于 openconnect 的一键 VPN 脚本,支持:
- ✅ 全局模式:所有流量走 VPN
- 🔀 分流模式(split-tunnel):指定站点流量走 VPN
- 🔐 从 macOS Keychain 或环境变量读取密码
在使用前,请确保已安装以下依赖:
brew install openconnect- openconnect:核心 VPN 客户端
- openconnect 附带的 vpnc-script:负责设置 VPN 路由
- 分流模式还需要 macOS 自带或已安装的
dig用于解析域名清单
在项目根目录创建 .env 文件,用于管理所有可配置项:
# VPN 配置
VPN_HOST=vpn-ct.ecnu.edu.cn
VPN_USER=your_id
VPN_PASS=your_password_here # 可选,如果不使用 Keychain
# Keychain 配置(推荐方式)
KEYCHAIN_LABEL=ECNU_VPN
# 路径配置
TMP_DIR=./tmp
LOG_FILE=./tmp/ecnu-vpn.log
PID_FILE=./tmp/openconnect-ecnu.pid
📌 建议优先使用 Keychain 存储密码:
security add-generic-password -a "your_ids" -s "ECNU_VPN" -w脚本支持按需启用“学术网站分流”功能。通过 .env 中的配置即可控制是否启用分流,并指定域名列表文件:
AUTO_SPLIT=1
DOMAINS_FILE=./domains.txt - 当 AUTO_SPLIT=1 时,脚本会自动读取 DOMAINS_FILE 中的域名列表,并为这些域名添加 VPN 路由;
- 如需让固定 IP(例如 SSH 主机)走 VPN,可仅在个人
.env中设置空格分隔的SPLIT_IPS;每个地址添加一条精确/32路由,不会改变其他外网流量的默认路由; - DOMAINS_FILE 是一个 纯文本文件,每行一个域名,例如:
ieeexplore.ieee.org
dl.acm.org
link.springer.com
sciencedirect.com当实验服务器只能从校园 VPN 访问,或需要 SSH 连接固定 IPv4 的校园网主机时,在个人 .env 中添加 SPLIT_IPS。使用 SSH 跳板机时,应同时填入跳板机和目标服务器的 IP:
# 用实际 IPv4 替换尖括号内的占位符
SPLIT_IPS="<jump-host-ip> <campus-server-ip>"随后以分流模式连接:
sudo bash ./ecnu-vpn.sh up --split脚本会为每个地址安装精确 /32 VPN 路由;这些校园服务器流量进入 VPN,未列出的本地与外网流量仍使用原有默认路由。
- 全局模式(默认)
sudo bash ./ecnu-vpn.sh up- 建立 VPN 连接
- 所有流量将通过 VPN 出口
- 日志会输出当前出口 IP
- 分流模式(推荐用于学术访问)
sudo bash ./ecnu-vpn.sh up --split- 仅将
DOMAINS_FILE中的域名和SPLIT_IPS中的固定 IP 流量走 VPN - 其他网站保持本地网络出口
- 推荐用于下载论文、访问数据库等学术场景
- 查看状态
./ecnu-vpn.sh status- 显示当前 VPN 连接状态和 PID
- 断开连接
sudo bash ./ecnu-vpn.sh down- 中断连接
日志默认写入:
./tmp/ecnu-vpn.log可以用以下命令实时查看:
tail -f ./tmp/ecnu-vpn.log⸻
📌 备注
- 本脚本目前仅在 macOS (arm64) 环境下测试通过;
- Linux 下理论上也可运行,但 DNS 与路由脚本需要适配;