清华服务使用指北(主要面向 Linux 用户)
本文将重点关注清华一些服务在 Linux 机器,包括远端服务器上的使用说明
以及校园专供 Windows 10 的激活指南
DNS/NTP
166.111.8.28
166.111.8.29
2402:f000:1:801::8:28
2402:f000:1:801::8:29
按照校园网建议,在配置 DNS 和 NTP 时,至少要使用校园网提供的服务。
目前,校园网内只能使用校园网提供的 DNS,其余 DNS 不保证工作。
SSLVPN
在 Linux 机器上没有 PULSE SECURE 客户端,除了可以使用 WEB VPN 外,也可使用 openconnect 来做到连接清华VPN。
若是 Debian 系,包括 Ubuntu,可以使用
$ apt-get install openconnect
若是 Arch Linux,可以使用
$ pacman -S openconnect
安装此软件。其余发行版请自行查阅相应源。
安装完毕后,使用
$ openconnect --juniper https://sslvpn.tsinghua.edu.cn
指定协议为 Juniper 的情况下,客户端不会被分配 IPv6 地址,如果改成 Pulse Connect Secure 则可以获取到一个 IPv6 地址。同时还需要指定 UserAgent 才能正确地获取 IPv6 路由,否则会尝试将所有 IPv6 流量路由到 VPN。
用如下的方式可以正确获取 IPv6 地址和路由(具体是 2402:f000::/32):
openconnect --protocol=pulse https://sslvpn.tsinghua.edu.cn --useragent Pulse-Secure/9.1.11.6725
输入帐号和密码后即连接上校园网,可以访问校内服务(INFO/USEREG)。
值得注意的是,与清华无关的流量依旧按照原有路由发出,此行为与 Windows 下不同。(此项需求证)
上网认证
校园网基础知识
清华大学校园网使用简介(由于网页升级链接已失效,可参阅本站的备份)
清华大学校园网有线局域网用户准入系统使用说明(问与答)(由于网页升级链接已失效,可参阅本站的备份)
上述文件太长不看版:在校园网中上网分为两步,一步是准入,另一步是准出。
没有准入与准出时,机器只能 ping 通 166.111.8.28 与 2402:f000:1:801::8:28,如果你有相应 v4 与 v6 地址。校内其他地址不通。
对于 IPv4 而言,当有准入而没有准出时,机器可以 ping 通校内机器,但不能 ping 通校外机器,即不能上外网。只有当有准入而且有准出时,机器可以连接外网。
对于 IPv6 而言,v6 只有准入这一步,有了准入,即可以连接外网。
对于 2 层接入的机器(紫荆宿舍网 ,教学楼无线网络,一些院系的网络),v4 认证与 v6 认证是联动进行的,即当 v4 准入时,v6 同时也准入。对于 3 层接入的机器(一些院系的网络),v4 与 v6 需要分别准入。
Tsinghua-Secure 使用的是另一套认证系统。
命令行认证 自动认证
参见 utils.md 中的认证工具汇总。
以下参考 GoAuthing
命令行认证
该软件实现了七个主要功能,分别是
auth-thu auth # v4准入
auth-thu deauth # 解除v4准入
auth-thu auth -6 # v6准入
auth-thu deauth -6 # 解除v6准入
auth-thu login # v4准出
auth-thu logout # 解除v4准出
auth-thu online # 保持机器在线
普通用户将其放在家目录下,作为命令行工具使用,即可满足大部分认证需求。
已知问题:在用户通过auth-thu auth -C(仅准入)后调用auth-thu login(仅准出),准出会失败。
自动认证
对于系统管理员来说,可能存在服务器实现自动认证的需求。
下载好文件以后请合理放置在相应目录(如 /usr/local/bin)下,同时将配置文件放在合理目录下,即可使用
要做到自动 准出,需将其中附带的 goauthing.service 或 goauthing@.service 放置 /etc/systemd/system/ 文件夹下 ,并调整相应内容以符合程序文件以及配置文件的路径,使用
$ systemctl enable goauthing.service
启动相应服务,即可达到自动认证的目的。如果要实现账户信息储存在用户家目录中而不是 /etc 中,可以参考 goauthing@.service。
如果要实现 v6 的自动准入,可参考 goauthing6.service 和 goauthing6@.service。如果只要 v4 的自动准入,需要将 goauthing.service 中的 auth 变为 auth -C,且删除 login 一行。
如果有打包者将此打包,请 PR。目前在 AUR 中存在 auth-thu-bin 包(auth-thu 包已经过时)。
远端服务器代认证
(从笔者的经历来看,usereg 的对准入准出成功和失败的反馈较少,建议采用命令行以及网页认证,而只将 usereg 作为状态面板使用)
在某些服务器上无法使用浏览器打开 net.tsinghua.edu.cn 来认证,只能使用 [命令行工具](### 命令行认证 自动认证) 或「准入代认证」的方式来实现准入。
对于代认证,需要先知道服务器的 IPv4 地址,形如 166.111.x.x 或 59.66.x.x 或 101.x.x.x,之后打开 usereg.tsinghua.edu.cn 「准入代认证」部分,填入 IP 即可准入,在准入时可以选择是否打开准出。
对于某些三层接入的机器,如果要实现 v6 的准入,也可在「准入代认证」中实现准入。
对于有些服务器存在准入但没有准出的情况,可以使用「连线其他 IP」实现准出。
关于准入与准出的问题,欢迎 PR。
关于 IPv4 和 IPv6 在准入准出上线与掉线时的表现,以及校内二层接入/三层接入的表现,欢迎 PR
远端服务器网页认证
有时 usereg 中的信息并不准确,如果此时还能 ssh 登录机器,除了之前提到的「命令行认证」外,还可以在登录时使用选项
ssh -D <port> host
这样在本地会搭建一个以 <port> 为端口的 socks5 代理,如果在浏览器中使用该代理,即可与往常一样实现网页认证。
尤其要注意的是,不能直接访问 auth4/auth6 来进行认证(参考问与答),需要通过跳转的方式来访问 auth4/auth6 以获取正确的 ac_id. 一般情况下可以访问 info/learn/login 来跳转,也可通过 3.3.3.3 和 [3:3:3::3] 来跳转。后者对于三层接入的用户来说是一个较为方便的访问 auth6 的方案。
Tsinghua-Secure
如果是校内环境,首先连接 Tsinghua-Secure无线网使用指南 进入 usereg.tsinghua.edu.cn , 登录后在 自注册及修改口令处 设置 Tsinghua-Secure 使用的密码 ,此密码不需要与 info 密码相同。
NetworkManager
设置好后,可以使用 NetworkManager 连接该 Wifi,可以参考 its 的文档 清华大学无线校园网 802.1x 认证登录客户端配置说明(本站备份)
样例配置 /etc/NetworkManager/system-connections/Tsinghua-Secure.nmconnection 如下
[connection]
id=Tsinghua-Secure
uuid=44638cf4-782e-4aaa-9ab9-f7a7e68de54c
type=wifi
permissions=
timestamp=1661836652
[wifi]
mac-address-blacklist=
mode=infrastructure
seen-bssids=30:7B:AC:09:BF:EB;30:7B:AC:09:DD:8B;30:7B:AC:09:EF:CB;30:7B:AC:0A:18:2B;30:7B:AC:40:7F:CC;30:7B:AC:40:80:AC;30:7B:AC:40:A0:8A;30:7B:AC:65:0D:2B;30:7B:AC:65:22:6B;30:7B:AC:67:A5:4A;30:7B:AC:67:ED:8A;30:7B:AC:67:F5:8A;30:7B:AC:67:FC:4A;30:7B:AC:67:FC:59;30:7B:AC:92:ED:0C;30:7B:AC:93:08:8A;30:7B:AC:93:0F:CC;30:7B:AC:93:1D:6C;30:7B:AC:93:1D:7A;30:7B:AC:93:2B:2C;30:7B:AC:93:32:2C;30:7B:AC:93:33:2C;30:7B:AC:98:C0:CA;30:7B:AC:98:C1:0C;30:7B:AC:98:C1:CA;30:7B:AC:98:C5:6A;30:7B:AC:98:C8:0A;70:D9:31:23:AF:D2;94:28:2E:3F:ED:CA;94:28:2E:40:0E:CA;A8:58:40:5A:66:B2;A8:58:40:5B:7A:D2;A8:58:40:D5:D1:12;A8:58:40:D5:D3:22;A8:58:40:D5:D3:32;A8:58:40:D6:03:F2;A8:58:40:D6:25:F2;A8:58:40:D6:3C:F2;A8:58:40:D6:3F:52;A8:58:40:D6:44:B2;A8:58:40:D6:45:72;A8:58:40:D6:97:12;A8:58:40:D7:14:D2;
ssid=Tsinghua-Secure
[wifi-security]
key-mgmt=wpa-eap
[802-1x]
eap=peap;
identity=<username>@tsinghua
password=<redacted>
phase2-auth=mschapv2
[ipv4]
dns-search=
method=disabled
[ipv6]
addr-gen-mode=eui64
dns-search=
ignore-auto-dns=true
method=auto
token=::114:514:1919:810
[proxy]
该样例配置仅启用了 IPv6 并获取特定后缀(请自行挑选后缀以免地址相撞),同时使用了 @tsinghua 的 identity 以保证不占用准出名额。
特别要注意的是,如果你同时符合下面三个条件:
NetworkManager使用了wpa_supplicant后端- 使用了 3.0.0 及以上版本的
openssl - 使用的发行版没有给
wpa_supplicant打上 修复 tls 1.0/1.1 连接的 patch (目前确认 Ubuntu 有 patch,NixOS 没有 patch)
那么你的 NetworkManager 可能由于 tls 1.0 连接被禁用而连不上 Tsinghua-Secure,此时有以下两种解决方法,任意一种都能解决:
- 升级 NetworkManager 到
1.41.5-dev及以上,准确的说是确保 这个 commit 已经被包含。在上述配置文件的[802-1x]一节中加入一行phase1-auth-flags=32(NetworkManager中tls-1-0-enable这一选项对应0x20,换算成十进制是32,这一换算 关系目前没有在文档里记录,所以不保证 32 这个数字始终有效。更能保证有效的方法是手动用nmcli设置Tsinghua-Secure中设置802-1x.phase1-auth-flags为tls-1-0-enable)。 - 给自己的
wpa_supplicant打上前面提到的 patch。
wpa_supplicant
也可使用 wpa_supplicant 完成相应 wifi 连接。安装 wpa_supplicant,编辑 /etc/wpa_supplicant/wpa_supplicant-nl80211-XXXX.conf, 其中 XXXX 是本机网卡名称,输入以下配置
ctrl_interface=/var/run/wpa_supplicant
update_config=1
network={
ssid="Tsinghua-Secure"
proto=RSN
key_mgmt=WPA-EAP
pairwise=CCMP
eap=PEAP
identity="username"
password="password"
# 使用 3.0.0 及以上版本的 openssl,同时发行版没有打上相应 patch 的话(参见上一节),tls 1.0/1.1 会被默认禁用,无法连接 Tsinghua-Secure。下面这行可以解除禁用
phase1="tls_disable_tlsv1_0=0"
phase2="auth=MSCHAPV2"
priority=9
}
其中 username 与 password 为自己帐号相应信息。之后输入
$ systemctl enable --now wpa_supplicant-nl80211@XXXX.service
即可连接。
注:本配置由orv贡献。
iwd
由于 Tsinghua-Secure 的证书问题(dhparams 中 p 的长度仅为 1024,不符合 Linux 内核的 1536 长度需求),而 iwd 依赖于内核的密码学工具,默认使用 iwd 无法连接。
NickCao 为此提供了 dhack 内核模块 与 ell 工具补丁(如下);前者通过劫持相应符号实现补丁,后者在 nix 构建软件包时直接替换源码中的参数。用户可以依此类推自行构建内核与工具。
iwd.override {
ell = ell.overrideAttrs (_: {
postPatch = ''
substituteInPlace ell/tls-suites.c \
--replace 'params->prime_len < 192' 'params->prime_len < 128'
'';
});
}
另外配置如下
[Security]
EAP-Method=PEAP
EAP-Identity=<username>
EAP-PEAP-Phase2-Method=MSCHAPV2
EAP-PEAP-Phase2-Identity=<username>
EAP-PEAP-Phase2-Password=<passwd>
[Settings]
AutoConnect=true
Tsinghua-Secure 仅校内登录方式
我们注意到,连接 Tsinghua-Secure 后获取的 IPv4 地址会自动进入准出表中,有可能在未预期的情况下挤占掉线已有的 准出设备。
经过测试发现,如果在登录时使用的 username 为「username@tsinghua」(例如lh14@tsinghua),那么其登录行为与「仅校内登录」一样。这种情况下v4只有准入,v6有准入与准出。
在使用该方式认证后,笔者测试可以通过「net.tsinghua.edu.cn」进行准出,但有线网中这个行为不一样。
校园网特性讨论
二层隔离/邻居发现隔离
校园网的一大特性,是二层隔离/邻居发现隔离。对于v4来说,是前者;对于v6来说,是后者。这个机制为了安全而设计,但对不少开发者/使用者来说较为不方便。
这个特性本质上是核心交换机对广播域进行了划分,甚至使得只有一个客户端与网关在一个广播域中。
IPv4
当我们分配到例如 59.66.130.xx/24 的 IP 时,如果我们想连接 59.66.130.yy/24,我们可能会发现无法连接。注意到这两个在一个 /24 中,即一个二层中,这种情况下两台机器会通过ARP发现对方,但在学校的一些机制下,ARP不能工作。
这种情况下,需要在两台机器上增加以下路由。
ip r a 59.66.130.0/24 via 59.66.130.1
ip r a 59.66.130.1 dev eth0
需要根据实际情况修改相应参数。
IPv6
紫荆的 IPv6 不存在该问题,由于其地址是 /128 的。
当我们在一个 Tsinghua-Secure 下时,我们会通过 SLAAC 分配地址,即大家的地址都在一个同一个 /64 下,当互相之间想通信时,需要通过 NDP 进行发现。由于校园网的一些机制,NDP可能不会成功。
这种情况下,需要在两台机器上增加以下路由
ip r a 2402:f000:2:b801::/64 via fe80::xxxx dev wlan0
参数需要根据实际情况确认,第一个为 /64 的前缀,可以参考获得的地址或者参考 RA 来书写,第二个为网关的 LL 地址,与默认路由中显示的地址相同,第三个为无线网卡。