宿舍网络调校指北

一、背景说明

每个账户可同时在线三台设备,使用路由器接入网络后认证,路由器下面的设备不再需要认证。

这是我宿舍的网络拓扑,接入了一台 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 定时注销并登录校园网可以维持登录态。

  1. 在 OPI Zero 2 创建一个目录存放脚本,我在 /root/scrpits 下面存放:
1
2
3
mkdir scripts
cd scripts
git clone https://github.com/barkure/CSU-Net-Portal.git
  1. 修改 CSU-Net-Portal 下面的 auto.py :
1
2
cd CSU-Net-Portal
nano auto.py

将 username、password、type 根据自己的信息来修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)

然后保存退出。

  1. 设置定时任务运行此脚本:
1
crontab -e

加入以下任务:

1
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 的代理端口统一遵循 虚空终端-代理端口 的配置:

1
2
3
4
5
http(s)-port: 7890
socks-port: 7891
mixed-port: 7892
redir-port: 7893
tproxy-port: 7894

(二)手机/平板配置代理

连接宿舍 WiFi,在 WiFi 详情页面手动配置代理:

1
2
主机名:192.168.31.46
端口:7890

这样连接到宿舍的 WiFi,直接就可以访问国际网络。

(三)电脑配置代理

电脑的配置比较复杂,通过编写 Python 脚本和批处理文件可以快速的配置。

Windows 的系统代理可以通过修改注册表来进行控制:

1
Software\Microsoft\Windows\CurrentVersion\Internet Settings

编写如下 Python 脚本来配置代理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 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.")

然后编写一个批处理文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
@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

dark
sans