一、背景说明
每个账户可同时在线三台设备,使用路由器接入网络后认证,路由器下面的设备不再需要认证。
这是我宿舍的网络拓扑,接入了一台 Orange Pi Zero 2 用来自动认证网络及提供代理服务。

需要给 OPI Zero 2 在路由器的后台页面配置一个静态 IP。

此处我的 OPI Zero 2 的 IP 为 192.168.31.46,系统为 Armbian 24.5.1 Bookworm Minimal。
二、网络自动认证
设备的登录态会在若干天后失效,具体时长并不清楚。使用 CSU-Net-Portal 定时注销并登录校园网可以维持登录态。
- 在 OPI Zero 2 创建一个目录存放脚本,我在 /root/scrpits 下面存放:
mkdir scripts
cd scripts
git clone https://github.com/barkure/CSU-Net-Portal.git
- 修改 CSU-Net-Portal 下面的 auto.py :
cd CSU-Net-Portal
nano auto.py
将 username、password、type 根据自己的信息来修改:
import time
from portal import login, unbind, logout
# 配置
username = '8123456789' # 学号
password = 'xxxxxxxxxx' # 密码
type = '中国移动' # 中国移动、中国联通、中国电信、校园网
# 先解绑后自动登录
unbind(username=username)
time.sleep(3)
logout()
time.sleep(3)
login(username=username, password=password, type=type)
然后保存退出。
- 设置定时任务运行此脚本:
crontab -e
加入以下任务:
0 5 * * * /usr/bin/python3 /root/scripts/CSU-Net-Portal/auto.py
保存退出,这样每天凌晨 5 点网络就会重新认证一次。
三、配置代理
需求:
- 手机/平板连接宿舍 WiFi 后直接可以使用 OPI 的代理访问国际互联网;
- 电脑连接 WiFi 后系统使用 OPI 的代理,移除 Git 的代理;
- 电脑断开宿舍 WiFi 后使用本机 Clash Verge Rev 的代理,配置 Git 的代理。
(一)代理端口设置
OPI Zero 2 上的 ShellCrash 和 电脑上的 Clash Verge Rev 的代理端口统一遵循 虚空终端-代理端口 的配置:
http(s)-port: 7890
socks-port: 7891
mixed-port: 7892
redir-port: 7893
tproxy-port: 7894(二)手机/平板配置代理
连接宿舍 WiFi,在 WiFi 详情页面手动配置代理:
主机名:192.168.31.46
端口:7890

这样连接到宿舍的 WiFi,直接就可以访问国际网络。
(三)电脑配置代理
电脑的配置比较复杂,通过编写 Python 脚本和批处理文件可以快速的配置。
Windows 的系统代理可以通过修改注册表来进行控制:
Software\Microsoft\Windows\CurrentVersion\Internet Settings
编写如下 Python 脚本来配置代理:
# proxy.py
import winreg
import subprocess
import sys
def enable_system_proxy(proxy_address, proxy_port):
proxy_string = f"{proxy_address}:{proxy_port}"
proxy_enable = 1
# 打开注册表路径
reg_path = r"Software\Microsoft\Windows\CurrentVersion\Internet Settings"
# 打开指定的注册表项
with winreg.OpenKey(winreg.HKEY_CURRENT_USER, reg_path, 0, winreg.KEY_SET_VALUE) as reg_key:
# 设置代理启用
winreg.SetValueEx(reg_key, "ProxyEnable", 0, winreg.REG_DWORD, proxy_enable)
# 设置代理服务器
winreg.SetValueEx(reg_key, "ProxyServer", 0, winreg.REG_SZ, proxy_string)
print(f"system proxy set to {proxy_string}")
def disable_system_proxy():
# 打开注册表路径
reg_path = r"Software\Microsoft\Windows\CurrentVersion\Internet Settings"
# 打开指定的注册表项
with winreg.OpenKey(winreg.HKEY_CURRENT_USER, reg_path, 0, winreg.KEY_SET_VALUE) as reg_key:
# 设置代理禁用
winreg.SetValueEx(reg_key, "ProxyEnable", 0, winreg.REG_DWORD, 0)
print("system proxy disabled")
def set_git_proxy(proxy_address, proxy_port):
proxy_url = f"http://{proxy_address}:{proxy_port}"
# 配置HTTP代理
subprocess.run(['git', 'config', '--global', 'http.proxy', proxy_url], check=True)
# 配置HTTPS代理
subprocess.run(['git', 'config', '--global', 'https.proxy', proxy_url], check=True)
print("git proxy has been configured successfully.")
def remove_git_proxy():
# 移除HTTP代理
subprocess.run(['git', 'config', '--global', '--unset', 'http.proxy'], check=True)
# 移除HTTPS代理
subprocess.run(['git', 'config', '--global', '--unset', 'https.proxy'], check=True)
print("git proxy has been removed successfully.")
# 配置信息
opi_proxy_address = "192.168.31.46"
opi_proxy_port = "7890"
clash_verge_proxy_address = "127.0.0.1"
clash_verge_proxy_port = "7890"
# 设置系统代理
if __name__ == "__main__":
if len(sys.argv) > 1:
if sys.argv[1] == "enable_system_proxy_to_opi":
enable_system_proxy(opi_proxy_address, opi_proxy_port)
elif sys.argv[1] == "enable_system_proxy_to_clash_verge":
enable_system_proxy(clash_verge_proxy_address, clash_verge_proxy_port)
elif sys.argv[1] == "disable_system_proxy":
disable_system_proxy()
elif sys.argv[1] == "set_git_proxy_to_clash_verge":
set_git_proxy(clash_verge_proxy_address, clash_verge_proxy_port)
elif sys.argv[1] == "remove_git_proxy":
remove_git_proxy()
else:
print("Please provide an argument.")
然后编写一个批处理文件:
@echo off
setlocal
:menu
cls
echo PROXY MANAGER
echo -----------------------------------------------------
echo plesae select an option:
echo -----------------------------------------------------
echo 1. set system proxy to opi (192.168.31.46:7890)
echo 2. set system proxy to clash verge (127.0.0.1:7890)
echo 3. disable system proxy
echo 4. set git proxy to clash verge (127.0.0.1:7890)
echo 5. remove git proxy
echo 6. show current git proxy settings
echo 0. exit
echo -----------------------------------------------------
set /p choice=Enter your choice:
if "%choice%"=="1" (
python proxy.py enable_system_proxy_to_opi
pause
goto menu
)
if "%choice%"=="2" (
python proxy.py enable_system_proxy_to_clash_verge
pause
goto menu
)
if "%choice%"=="3" (
python proxy.py disable_system_proxy
pause
goto menu
)
if "%choice%"=="4" (
python proxy.py set_git_proxy_to_clash_verge
pause
goto menu
)
if "%choice%"=="5" (
python proxy.py remove_git_proxy
pause
goto menu
)
if "%choice%"=="6" (
echo current HTTP proxy settings:
git config --global http.proxy
echo current HTTPS proxy settings:
git config --global https.proxy
pause
goto menu
)
if "%choice%"=="0" (
exit
)
echo invalid choice, please try again
pause
goto menu
运行此批处理文件:

在这里可以方便的设置相关代理。
相关的代码可见 Set-Windows-Proxy。