大清校园网连接配置

深澜是什么,客户端?不存在的

为了更好地访问校园服务,网络总是必不可少。但是官方校园网认证对于各个操作系统的支持并不完善。有需求就有解决方案,同学们八仙过海各显神通开发出很多工具,参见thu.services/utils:

项目链接 支持平台 实现语言 目前是否可用(是否被维护) 特性
Tunet-2018 (official) Windows-GUI, Linux-CLI 未知 可用 未调查
GoAuthing Linux-CLI (x86_64, arm, mips, ppc, riscv), Windows-CLI, Mac OS-CLI (Intel, Apple) Go 可用 全平台全架构,准入与准出,v4和v6,systemd 服务,TUNA 提供镜像可以在未认证时下载认证工具,提供认证相关库
tunet-python 支持 python 的平台,CLI Python 可用 v4与v6,准入与准出,流量与准入出状态监控
tunet-c OpenWRT, Linux, macOS; CLI C 可用 提供认证相关库,二进制文件较小
tunet-rust Windows, Mac OS, Linux, Android, iOS Rust, Dart 可用 流量与余额监控,准入与准出,v4与v6;提供认证相关库;桌面端提供 CLI、CUI、GUI、Windows 服务、systemd 服务、launchd 服务;移动端提供 GUI
TsinghuaTunet 支持 python 的平台, CLI Python 可用于特定子网 未调查
auth-tsinghua 支持 node.js 的平台, CLI Javascript 不再维护 已经重定向至 GoAuthing
TsinghuaNet Windows, Mac OS, Linux, UWP, Android, iOS C# 不再维护 已经重定向至 tunet-rust
tunet-cli 支持 python 的平台,CLI Python 不再维护,上个 commit 在2017年 未调查
Tsinghua-Online 浏览器插件,在Chrome 商店 Javascript 不再维护,上个 commit 在2013年 浏览器插件
THUNetwork 支持 python 的平台, CLI Python 不再维护 密码明文传入命令行,较为不安全

最近刚好需要在无显示器的情况下,用SSH连接Linux Console连接校园网,于是就从中选择GoAuthing进行使用了,下面简单记录一下配置。

下载选择

Linux发行版

一般Linux发行版上使用GoAuthing,根据自己的平台选择对应的二进制文件即可,比如我是在armv6的CPU上运行的debian系统,就选择.armv6。linux平台上查看处理器类型命令是uname -p,可以根据命令输出选择。

goauthing_down

下载后记得用chmod +x给它运行权限。接下来创建文件~/.config/auth-thu并放入以下认证信息:

{
  "username": "你的用户名",
  "password": "你的密码",
  "host": "",
  "ip": "",
  "debug": false,
  "useV6": false,
  "noCheck": false,
  "insecure": false,
  "daemonize": false,
  "acId": "",
  "campusOnly": false
}

然后就可以使用下面的命令测试认证信息

./auth-thu --debug auth -k

成功后就可以进入下一步。

Win用户

使用tunet-rust,有图形界面,无脑下载安装就行。

服务配置

Linux发行版

这里我在树莓派上使用了systemd在用户空间的service来配置连接,参考这篇博客这篇。因为通常连接的是Tsinghua-IPv4的WiFi,所以还需要配置一下wpa_supplicant。在/etc/wpa_supplicant/wpa_supplicant.conf中加入以下内容:

network={
        ssid="Tsinghua-IPv4"
        key_mgmt=NONE
}

然后使用命令重启wpa_supplicant:

sudo systemctl restart wpa_supplicant

接下来配置自动认证服务。先在目录~/.config/systemd/user/下创建goauthing.service文件,按照官方的配置编写:

[Unit]
Description           = Authenticating utility for auth.tsinghua.edu.cn
StartLimitIntervalSec = 0

[Service]
ExecStartPre = -"auth-thu路径" -D deauth
ExecStartPre = -"auth-thu路径" -D auth
ExecStartPre = -"auth-thu路径" -D login
ExecStart    = -"auth-thu路径" -D online
Restart      = always
RestartSec   = 5

[Install]
WantedBy = default.target

最后运行以下命令,查看服务状态是否正常

systemctl --user daemon-reload
systemctl --user enable goauthing.service
systemctl --user start goauthing.service
systemctl --user status goauthing.service

Win用户

在安装的目录下打开Power Shell, 运行下面的命令注册服务即可。

.\tunet-services register

还可以参考这里使用goauthing运行定时脚本。

Win10开启SSH和RDP

教育网公网IP屏蔽了常用端口,如22(SSH)、80(Web)、3389(RDP),需要更改其它端口连接,参考官方文档“更改远程桌面的侦听端口 | Microsoft Learn”。但是用密码连接可能会被爆破,所以推荐用SSH转发加一层SSL加密来增加安全性,可以参考之前的博客

1. 在被控主机上开启SSH并修改端口

首先开启和配置ssh服务。打开文件夹C:\ProgramData\ssh,因为需要管理员权限,建议先复制在其它文件夹,然后编辑文件sshd_config,取消#Port 22的注释把端口改成别的:

Port xxx #设置你的端口,最大65535

如果需要证书登录,找到和编辑用户组administrators

Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
       PasswordAuthentication no
       PermitEmptyPasswords no

然后新建一个名为administrators_authorized_keys的文件,把公钥放进这个文件里,参考官方文档。完成之后把administrators_authorized_keys、sshd_config两个文件放到C:\ProgramData\ssh中。为了保证能够打开一个提权的Power Shell,要在有管理员权限的cmd中运行下面的命令:

icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

最后按下win+r打开services.msc,找到OpenSSH SSH Server和OpenSSH Authentication Agent服务,设置成自动然后启动。

2. 在被控主机上开启远程连接RDP服务

打开设置,搜索远程桌面然后启用即可,如图

win_start_rdp

3. 在主控端开启SSH本地转发并连接

在另一台主机上备好私钥,开启ssh端口转发,例如:将本地的12345端口本地映射出来使用命令

ssh -L 12345:localhost:3389 -C -N -l your_username your_server_ip -p xxx #xxx为在1中设置的端口号

然后开启RDP客户端连接,地址选localhost:12345,输入用户名密码即可。实测感觉rdp比vnc速度更快,播放视频不卡,还有声音。


2025.1.27日更新

4. 被控端开启ddns和ip变动通知

因为被控端会移动或者开关机以及其它路由器方面的原因而导致ip变动,之前的ip很有可能会因此失效,导致无法再连接。而因为大清校园网ipv4是教育网公网ip和ipv6地址,故只需要绑定一下ddns即可。 以教育网ipv4为例,ddns服务选择cloudflare进行配置。

为了避免每次隔一段时间检查ip变动,我们只需要使用微软自带的任务计划程序创建任务 ms_mission_plan 。首先右键选择创建基本任务,填入名称和描述。然后填入触发器,这里只需要加入下面三个触发器任务ms_mission_plan 接下来选择操作,填入在触发上述事件时需要运行的脚本路径。最后完成之后检查一下其它的选项,如常规中在未登录时也运行任务。这样就不用每隔一段时间检查ip,能够省下一些cpu时间进行其他任务。

运行的脚本中需要在ip变动时将ip发送给ddns服务器,这里选择cmd脚本,创建bat文件后另存为ANSI编码,可以支持中文。在脚本中填入以下内容:

@echo off

for /f "tokens=2 delims=:" %%f in ('ipconfig ^| findstr "IPv4 Address"') do set "ip_addr=%%f"

for /f "tokens=5 delims= " %%f in ('netsh interface ipv6 show address ^| findstr "临时"') do set "ip6_addr=%%f"

curl -X POST -H "Content-Type: application/json" -d "{\"chat_id\": \"xxx\", \"text\": \"Your *IP address* changed to ipv4: *%ip_addr%* and ipv6: *%ip6_addr%*\\!\", \"parse_mode\": \"MarkdownV2\"}"  https://api.telegram.org/your_bot_key_/sendMessage

curl "https://api.cloudflare.com/client/v4/zones/your_zone_id/dns_records/dns_record_id" -X PATCH -H "Content-Type:application/json" -H "Authorization: Bearer your_api_key"  -d "{\"comment\": \"Domain verification record\",\"content\": \"%ip_addr%\",\"name\": \"你的域名\", \"proxied\": false, \"ttl\": 3600, \"type\": \"A\"}"

rem pause

上面的的脚本发送了更新后的ipv4和ipv6地址。同时通过cloudflare的API更新了动态dns。需要注意自行配置tg bot key和cloudflare里的api key以及zone_id和dns_record_id。dns_record_id在哪找?我也是费好大劲终于找到,首先打开cloudflare的dashboard,然后在Manage Account下拉页面找到Audit Log,最后在你创建域名的记录值中有zone_id和dns_record_id。

如果您觉得该文章对您有用,欢迎打赏作者,激励创作!
Welcome to tip the author!

微信(WeChat Pay) 支付宝(AliPay)
比特币(Bitcoin) 以太坊(Ethereum)
以太坊(Base) 索拉纳(Solana)