起因
说实话,买 VPS 最烦的就是 IP 质量。注册个 Google 账号、GitHub 什么的,验证码能让你做到怀疑人生。有些 IP 甚至直接被标记成垃圾流量,很多网站都进不去。更别提那些对 IP 信誉有要求的服务了,OpenAI、Claude、各种 API 服务,动不动就给你来个 “Your IP has been blocked”。
后来想到,手里不是有个教育邮箱吗?学校还提供 VPN 服务。要是能把这个 VPN 挂到 VPS 上,岂不是就有了个干净的教育网 IP?
试了一下,效果确实不错。ChatGPT 不封了,GitHub Copilot 也能用了,各种网站注册都是一路绿灯。这篇文章就记录下怎么实现的。
什么是学校 VPN
简单说,学校 VPN 就是高校为了方便师生在校外访问校内资源而提供的虚拟专用网络服务。
大部分高校都有这个服务,主要用途是:
- 在家访问学校的数字图书馆、论文数据库
- 使用学校购买的各种学术资源(知网、万方、IEEE 等)
- 访问校内的教务系统、选课系统
- 连接实验室的服务器
重点来了:这些 VPN 的出口 IP 都是教育网 IP,而且质量非常好。为什么?
- 信誉度高:教育网 IP 一般不会被用来做垃圾邮件、爬虫等恶意行为
- 白名单优待:很多服务商对教育网 IP 有特殊优待,比如 GitHub、各种学术工具
- 地域优势:国内教育网之间互联带宽大,访问国外学术资源也有专线
- 稳定性好:学校的网络出口一般都是多线 BGP,很少出现线路故障
所以,把这个 VPN 利用起来,就等于白嫖了一个优质的教育网代理。
思路
简单说就是:把学校 VPN 跑在 VPS 上,让它 24 小时自动重连,然后搭个代理,所有设备都能用这个教育网 IP。
核心思路图:
你的设备 → VPS 代理 → 学校 VPN → 互联网
(任意 IP) (教育网 IP)
基本流程:
- 有个能登录学校门户的教育邮箱
- 确认学校有 VPN 服务(搜”学校名 + VPN”一般能找到)
- 准备一台 VPS(建议选延迟低的线路,比如软银、CN2 什么的)
- 在 VPS 上写脚本自动连 VPN
- 搭个代理服务,让流量都从这个 VPN 出去
为啥不直接用学校的 VPN 客户端?因为:
- 每次都要手动打开软件登录,麻烦
- 连接速度感人,体验差
- 很多学校的 VPN 会自动断开,比如 2 小时自动断开或者闲置太久自动断开
- 只能一台设备用
- 电脑关机就断了,无法 24 小时在线
用 VPS 中转的好处:
- 可以 24 小时挂着,断了自动重连
- 通过代理服务,多设备共享(手机、电脑、iPad 都能用)
- VPS 选个好线路,速度也不错
- 可以设置分流规则,灵活控制哪些流量走教育网
准备工作
需要准备这些东西:
- 教育邮箱(能登录学校系统的)
- 学校 VPN 账号(一般就是教育邮箱账户密码)
- 一台 VPS(Debian/Ubuntu 都行,1C1G 够用)
- 代理工具(后面会说)
VPS 选择建议:
别买太贵的,这个用途真不需要高配。我自己用的是 HostHatch 的 VPS:
- 配置:1 核 2G(2G 内存更稳定,Python 脚本跑起来不会卡)
- 带宽:1Gbps 端口(够用了,主要瓶颈在学校出口)
- 线路:日本线路,延迟 90ms 左右
- 价格:月付 $4(性价比很高)
用了两个月很稳定,重启次数 0,网络也没抽过风。关键是便宜,4 刀就能搞定。
重点是线路别选太差的,不然你的设备连到 VPS 就慢,体验会很糟。推荐:
- 日本/美西软银(延迟低,稳定)
- CN2 GIA(贵点,但快)
- AS9929(联通精品网,也不错)
不推荐:163 骨干网、纯 CN2 普通线路(高峰期会炸)
其他商家推荐:
- Racknerd:便宜,但线路一般
- Cloudcone:经常有活动
- BandwagonHost(搬瓦工):贵但稳定
选哪个都行,主要看线路和价格。我用 HostHatch 是因为便宜+线路还行,1C2G 的配置跑这个方案绰绰有余。
通用方案
大部分学校的 VPN 都是标准协议(L2TP、OpenConnect、Cisco AnyConnect 之类),可以直接用命令行工具连。
基本步骤就是:
- VPS 上装 VPN 客户端
- 写个监控脚本,检测断线就自动重连
- 搭个代理,流量走 VPN 出去
不过有些学校的 VPN 比较难搞,下面我用个实际案例来演示。
实战:某大学的复杂 VPN
我手里这个某大学的 VPN(Pulse Secure 类型)特别麻烦:
- 必须走网页登录流程,要点”Proceed”按钮
- 要选角色(教职工/学生)
- 如果有旧连接,会强制踢掉,还要确认
- 对 Cookie 和 User-Agent 检查很严
标准的 openconnect 命令根本连不上,必须写脚本模拟浏览器操作。
解决方案
用 Python 模拟浏览器登录拿到 Cookie,然后喂给 OpenConnect 建隧道。
主要功能:
- 自动处理网页验证流程
- 自动配置路由,防止 SSH 也被 VPN 劫持导致失联
- 断线自动重连
具体步骤
1. 安装依赖
SSH 登录 VPS,装几个必要的包:
sudo apt update
sudo apt install openconnect python3-requests python3-bs4 screen -y
2. Python 登录脚本
创建一个文件 vpn_auth.py:
import requests
import urllib3
from bs4 import BeautifulSoup
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# 修改这里的配置
USERNAME = "你的学号"
PASSWORD = "你的密码"
REALM_KEYWORD = "Staff" # 或 Student
HOST = "https://你的学校vpn地址"
WELCOME_URL = f"{HOST}/dana-na/auth/url_default/welcome.cgi"
LOGIN_URL = f"{HOST}/dana-na/auth/url_default/login.cgi"
UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
headers = { 'User-Agent': UA, 'Origin': HOST }
def login():
try:
s = requests.Session()
s.headers.update(headers)
# 访问欢迎页,点 Proceed
s.get(WELCOME_URL, verify=False)
s.headers.update({'Referer': WELCOME_URL})
r = s.post(WELCOME_URL, data={'sn-preauth-proceed': 'Proceed'}, verify=False)
# 解析登录表单
soup = BeautifulSoup(r.text, 'html.parser')
form = soup.find('form', id='frmLogin')
if not form:
form = soup.find('form', attrs={'name': 'frmLogin'})
if not form:
return ""
login_data = {}
for inp in form.find_all('input'):
if inp.get('name'):
login_data[inp.get('name')] = inp.get('value', '')
login_data['username'] = USERNAME
login_data['password'] = PASSWORD
# 选角色
realm_select = form.find('select', attrs={'name': 'realm'})
if realm_select:
for opt in realm_select.find_all('option'):
if REALM_KEYWORD.lower() in opt.text.lower():
login_data['realm'] = opt.get('value')
break
# 提交登录
s.headers.update({'Referer': LOGIN_URL})
r_final = s.post(LOGIN_URL, data=login_data, verify=False)
# 处理踢人确认
if "Confirmation" in r_final.text:
conf_soup = BeautifulSoup(r_final.text, 'html.parser')
conf_form = conf_soup.find('form')
if conf_form:
conf_data = {}
for inp in conf_form.find_all('input'):
if inp.get('name'):
conf_data[inp.get('name')] = inp.get('value', '')
conf_data['btnContinue'] = 'Continue the session'
s.post(LOGIN_URL, data=conf_data, verify=False)
# 输出 Cookie
if s.cookies.get('DSID'):
print("; ".join([f"{c.name}={c.value}" for c in s.cookies]))
return
except:
pass
print("")
if __name__ == "__main__":
login()
这个脚本会自动完成网页登录的所有步骤,最后输出 Cookie。
脚本工作原理:
- 访问欢迎页,模拟点击 “Proceed” 按钮
- 解析登录表单,提取所有隐藏字段(很多学校的表单有反爬验证)
- 根据关键词自动选择角色(教职工/学生)
- 提交登录,如果检测到”踢人确认页”,自动点击继续
- 提取完整的 Cookie 字符串供 OpenConnect 使用
踩坑提示:
REALM_KEYWORD要根据你学校的实际情况改,有的是 “Staff”,有的是 “教職員”- UA 字符串必须和后面的 Shell 脚本保持一致,否则会被 VPN 服务器识别为异常
- 有些学校的 VPN 有登录频率限制,建议脚本里的重试间隔设置为 60 秒以上
3. Shell 监控脚本
创建 vpn_monitor.sh:
#!/bin/bash
AUTH_SCRIPT="./vpn_auth.py"
VPN_URL="https://你的学校vpn地址"
# 重要:填你的宽带 IP(访问 ip.sb 查看)
# 这样 SSH 不会被 VPN 劫持
MY_HOME_IP="你的IP"
UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
# 设置 SSH 白名单路由
DEFAULT_GATEWAY=$(ip route show default | awk '/default/ {print $3}' | head -n 1)
DEFAULT_INTERFACE=$(ip route show default | awk '/default/ {print $5}' | head -n 1)
if [ -n "$MY_HOME_IP" ]; then
sudo ip route del $MY_HOME_IP > /dev/null 2>&1
sudo ip route add $MY_HOME_IP via $DEFAULT_GATEWAY dev $DEFAULT_INTERFACE
echo "SSH 白名单设置完成: $MY_HOME_IP"
fi
while true; do
echo "$(date): 检查 VPN 状态..."
if ip addr show tun0 > /dev/null 2>&1; then
echo "VPN 在线"
else
echo "VPN 断了,开始重连..."
sudo killall openconnect > /dev/null 2>&1
sleep 2
FULL_COOKIE=$(python3 $AUTH_SCRIPT 2>&1)
if [[ "$FULL_COOKIE" == *"DSID"* ]]; then
echo "Cookie 获取成功"
sudo openconnect --protocol=nc \
--cookie="$FULL_COOKIE" \
--useragent="$UA" \
--background \
--no-dtls \
"$VPN_URL"
sleep 10
if ip addr show tun0 > /dev/null 2>&1; then
echo "重连成功"
else
echo "OpenConnect 启动失败"
fi
else
echo "登录失败,60秒后重试..."
sleep 60
fi
fi
sleep 60
done
这个脚本每分钟检查一次,VPN 断了就自动重连。
关于 MY_HOME_IP 的重要说明:
这个是整个方案里最容易翻车的地方。填你当前使用的宽带 IP(访问 ip.sb 可以查看)。
为什么需要设置?因为 VPN 连上后,默认会把所有流量都路由到 VPN,包括你的 SSH 连接。结果就是:
你的电脑 → VPS 物理 IP → VPN 隧道 → ... → 绕一大圈 → VPS 的 SSH 端口
延迟会暴增,甚至直接断开。设置白名单后:
你的电脑 → VPS 物理 IP → 直连 SSH(走物理网卡)
如果你的宽带 IP 是动态的怎么办?
可以写个简单的动态更新脚本:
# 在 VPS 上创建 update_ip.sh
#!/bin/bash
SCRIPT_PATH="/root/vpn_monitor.sh"
CURRENT_IP=$(curl -s ip.sb)
sed -i "s/MY_HOME_IP=\".*\"/MY_HOME_IP=\"$CURRENT_IP\"/" $SCRIPT_PATH
echo "已更新 IP 为: $CURRENT_IP"
然后在本地宽带重启后,SSH 登录 VPS 执行一下就行。
4. 后台运行
用 screen 让脚本在后台跑:
# 清理旧进程
sudo killall openconnect
# 开个 screen 会话
screen -S vpn
# 运行脚本
sudo bash vpn_monitor.sh
看到开始输出日志后,按 Ctrl+A 然后按 D 退出(脚本会继续在后台跑)。
常用 screen 命令:
- 查看日志:
screen -r vpn - 退出查看(不停止):
Ctrl+A然后D - 列出所有 screen:
screen -ls - 强制停止:
sudo killall openconnect && sudo killall screen
优化建议:
如果你想让脚本开机自启,可以写个 systemd 服务:
# 创建服务文件
sudo nano /etc/systemd/system/vpn-monitor.service
内容:
[Unit]
Description=School VPN Monitor
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root
ExecStart=/bin/bash /root/vpn_monitor.sh
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
然后:
sudo systemctl daemon-reload
sudo systemctl enable vpn-monitor
sudo systemctl start vpn-monitor
# 查看状态
sudo systemctl status vpn-monitor
这样就算 VPS 重启,VPN 也会自动连上。
验证
检查 VPN 是否连上:
ip addr show tun0
能看到 tun0 网卡就说明连上了。
验证出口 IP:
curl --interface tun0 ip.sb
如果显示的是学校的 IP 段,就成功了。
搭建代理
VPN 连上后,就可以在 VPS 上搭个代理了。用什么工具都行,V2、Tro* 之类的。
流量会自动从 VPN 出去,不需要特殊配置。
分流建议:
不是所有流量都需要走教育网 IP,我的分流策略是:
- ChatGPT、Claude、各种 AI 服务 → 走教育网
- GitHub、学术网站 → 走教育网
- 日常浏览、视频 → 直连或其他线路
可以在代理客户端里配置规则:
rules:
- DOMAIN-SUFFIX,openai.com,VPN节点
- DOMAIN-SUFFIX,anthropic.com,VPN节点
- DOMAIN-SUFFIX,github.com,VPN节点
- DOMAIN-SUFFIX,ieee.org,VPN节点
# 其他流量走别的
常见问题
宽带 IP 变了怎么办?
家里宽带重启后 IP 可能会变,记得去 VPS 上改脚本里的 MY_HOME_IP。或者用我前面说的动态更新脚本。
VPN 老是断?
有些学校的 VPN 有时间限制,比如 2 小时自动断。不过脚本会自动重连,不用管。重连失败的话看看 screen 日志,一般是:
- 登录太频繁被限制(等会再试)
- 密码改了(更新脚本)
- 学校 VPN 服务器挂了(这个没办法)
SSH 变慢了?
说明 MY_HOME_IP 没设对,确认下是不是你当前的宽带 IP。
登录失败?
检查:
- 用户名密码对不对
- 角色选择(Staff/Student)对不对
- 学校 VPN 地址对不对
- 试试手动用浏览器登录,看看流程有没有变化
速度慢怎么办?
速度主要受这几个因素影响:
- VPS 线路:选个好点的,延迟 < 100ms
- 学校出口带宽:这个没法改,有的学校出口就是慢
- VPN 协议:
--no-dtls参数可以试着去掉,看看是否更快
流量会被学校监控吗?
理论上会。学校能看到:
- 你的 VPN 账号在连接
- 连接时长、流量大小
- 可能看到访问的域名(如果 VPN 有日志)
但看不到具体内容(加密的)。建议:
- 不要用来做违法的事
- 流量别太夸张(别挂 BT 下载)
- 低调使用,别被封号
会不会被学校封号?
看学校政策。大部分学校不管,但有些学校会:
- 检测异常流量
- 限制同时在线设备数
- 禁止长时间连接
建议定期换个时间段重连,别 24 小时不间断。
成本和效果
成本分析:
| 项目 | 费用 | 说明 |
|---|---|---|
| VPS | $4-10/月 | 1C2G 够用,选好线路(我用 HostHatch $4/月) |
| 教育邮箱 | 免费或 $5-20 | 有学生身份最好,买的话某宝有 |
| 域名(可选) | $1-2/年 | 伪装用,不是必须 |
| 总计 | $4-15/月 | 比买专门的住宅 IP 便宜多了 |
实测效果:
我自己用了两个月,效果稳定:
速度测试:
- 延迟:VPS 线路 90ms + 学校 VPN 40ms ≈ 130ms
- 下载:平均 80-150 Mbps(学校出口带宽限制)
- 上传:平均 30-50 Mbps
IP 质量测试:
- IPScore: 95/100(IP 信誉极佳)
- Scamalytics: Very Low Risk
- IP2Location: 识别为教育机构
- AbuseIPDB: 0 reports(干净)
实际使用场景:
- ✅ ChatGPT Plus:可以正常使用,不会被封
- ✅ Claude:完美运行
- ✅ GitHub Copilot:教育优惠还能叠加
- ✅ 各种 API:OpenAI、Anthropic 都没问题
- ✅ 学术资源:知网、IEEE、Springer 等都能访问
- ✅ 注册账号:Google、Twitter、各种服务都是一路绿灯
对比其他方案:
| 方案 | 月费 | IP 质量 | 稳定性 | 速度 |
|---|---|---|---|---|
| 住宅代理 | $30-100 | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| 数据中心 IP | $5-10 | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 教育网方案 | $4-15 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
性价比确实高。用 HostHatch 的话成本更低,4 刀就能跑起来。
一些额外的想法
多账号轮换
如果你有多个学校账号,可以写多份配置文件,在脚本里轮换使用。
# 创建多个 Python 脚本
vpn_auth_school1.py
vpn_auth_school2.py
# 在 Shell 脚本里随机选择
SCRIPTS=("vpn_auth_school1.py" "vpn_auth_school2.py")
RANDOM_SCRIPT=${SCRIPTS[$RANDOM % ${#SCRIPTS[@]}]}
FULL_COOKIE=$(python3 $RANDOM_SCRIPT 2>&1)
好处是可以分散流量,降低单个账号的使用频率。
高级分流
如果只想让特定流量走 VPN,可以用 iptables 做策略路由:
# 只让目标是 OpenAI 的流量走 VPN
sudo iptables -t nat -A PREROUTING -d 13.107.238.0/24 -j MARK --set-mark 100
sudo ip rule add fwmark 100 table 100
sudo ip route add default dev tun0 table 100
更优雅的方案是用 Clash 做分流,在代理客户端层面解决。
监控告警
配合 Telegram Bot,VPN 断线时发通知:
# 在脚本里加这个函数
send_telegram() {
curl -s -X POST "https://api.telegram.org/bot你的TOKEN/sendMessage" \
-d "chat_id=你的ID" \
-d "text=$1"
}
# 重连失败时调用
if [ 失败 ]; then
send_telegram "VPN 已断线超过 5 次,请检查"
fi
流量统计
想知道用了多少流量?可以用 vnstat:
sudo apt install vnstat
sudo vnstat -i tun0
# 查看统计
vnstat -i tun0 -d # 按天统计
vnstat -i tun0 -m # 按月统计
负载均衡
如果你有多个学校 VPN,可以同时连接,做负载均衡:
# 连接多个 VPN,分别是 tun0, tun1
# 用 iptables 做策略路由,轮询分配流量
但这个比较复杂,一般用不上。
IP 池化
终极玩法:收集多个学校的 VPN,搭建一个教育网 IP 池,每次请求随机选择一个 IP。
适合需要大量干净 IP 的场景(爬虫、API 调用等)。
最后
这个方案把学校 VPN 变成了 24 小时在线的代理服务,解决了 VPS 垃圾 IP 的问题。
实际收益:
- IP 干净,告别验证码地狱
- ChatGPT、Claude 等 AI 服务稳定使用
- GitHub、学术资源访问体验极佳
- 成本低廉,月费不到 10 刀
- 完全自动化,设置好后不用管
适用人群:
- 有教育邮箱的学生、老师
- 需要高质量 IP 的开发者
- AI 工具重度用户
- 学术资源访问需求者
- 厌倦了验证码的所有人
注意事项:
- 遵守学校规定,合理使用
- 不要用于违法活动
- 流量别太夸张,低调使用
- 定期检查脚本运行状态
写在最后的最后:
学校 VPN 这个思路,是我偶然想到的。试了之后发现效果意外的好,性价比高得离谱。
这篇文章花了不少时间整理,把所有踩过的坑都写出来了。如果你觉得有用,欢迎分享给其他人。
有问题欢迎评论交流,我会尽量回复。