CQU校园网的折腾指南:ipv6、多设备与自动登录
使用路由器,可以极大地提升校园网的使用体验,但也免不了折腾一番。这篇文章基于我自己折腾的经验,希望能帮助 CQU 的同学更愉快地使用校园网。
本文探讨的内容适用于重庆大学虎溪校区,对于其他网络环境,仅供参考。
多设备
默认情况下校园网限制2个设备同时登录。接上路由器后,只需登录一次,连接同一路由器的设备就都能联网了。但多设备时仍有可能掉线,这时就需要 ua2f 等防检测手段。实测 ua2f + 防 ttl 检测就可以稳定多设备了,又听说只要 ua2f 就行?我没试过。
ua2f 是 openwrt 的一个插件,通过修改网络请求中的 UA 信息来规避多设备检测。如果你能够找到自带 ua2f 的固件,就比较方便。不然就需要自己编译固件。或者如果你恰好是 cr660x 路由器,也可以尝试我之前编译的固件(基于 x-wrt,含 ua2f, passwall)
编译固件
编译固件的选择比较多,官方的 openwrt 或是第三方改的 immortalwrt, x-wrt 等,都可以。
编译可能会用到的一些东西:
不同变体编译流程会略有不同,教程很多,我就不细讲了,只提几点:
编译固件需要 Linux 系统,WSL 也行,如果使用 WSL,最后 make 的时候要覆盖
PATH
环境变量,像这样:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin make -j1 V=s
不然,可能会编译报错(当时被坑了好久!)
编译前,要把需要的插件(ua2f, 代理插件, 主题等)的源码 clone 下来并在配置时启用它们以及它们的依赖项。
贴上我编译 x-wrt 的流程,以供参考:
git clone https://github.com/x-wrt/x-wrt.git cd x-wrt # 更新代码 tag: git fetch origin git fetch origin --tags # 切换到最新的 tag git checkout -f $(git describe --tags $(git rev-list --tags --max-count=1)) # 添加 passwall echo "src-git passwall_packages https://github.com/xiaorouji/openwrt-passwall-packages.git;main" >> "feeds.conf.default" echo "src-git passwall https://github.com/xiaorouji/openwrt-passwall.git;main" >> "feeds.conf.default" # 添加 ua2f git clone https://github.com/EOYOHOO/UA2F.git package/UA2F git clone https://github.com/lucikap/luci-app-ua2f package/luci-app-ua2f # 添加主题 argon git clone https://github.com/jerrykuku/luci-theme-argon.git package/luci-theme-argon #更新代码: ./scripts/feeds clean ./scripts/feeds update -a ./scripts/feeds install -a
编辑
.config
,加上下面这句CONFIG_NETFILTER_NETLINK_GLUE_CT=y
然后,跟着 x-wrt 编译教程完成剩下的步骤。在
make menuconfig
配置时,别忘了启用插件和依赖,根据你的实际需求。我启用了这些(ua2f 的依赖项参考这里):- LuCI > Applications > luci-app-passwall
- LuCI > Applications > luci-app-ua2f
- LUCI > Theme > luci-theme-argon
- Network > Routing and Redirection > ua2f
- Network > Firewall > iptables-mod-tproxy
- Network > Firewall > iptables-mod-socket
- Network > Firewall > iptables-mod-ipopt
- Network > Firewall > iptables-mod-iprange
- Network > Firewall > iptables-mod-conntrack-extra
- Kernel modules > Netfilter Extensions > kmod-ipt-nat
- Kernel modules > Netfilter Extensions > kmod-ipt-ipopt
- Languages > Python > python3-base
编译完刷入以后,登录路由器启用 ua2f。然后进入UA 检测,如果服务器获取的UA全部为 F,就说明成功了。
通过 ssh 连接路由器,可用下面的命令启用防 TTL 检测:
iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64
如果编译时添加了主题,刷入后发现是还是默认主题 ,在 系统 > 语言与界面 更改主题即可。
ipv6
校园网默认状态下能获取到 ipv6 地址,但接上路由器后,默认设置下,下属的设备就没有公网 ipv6 了。原因是校园网只给了一个 /64 的ipv6地址,没有 Prefix Delegation,需要将DHCP设置为中继模式才会向下分配公网ip。这就需要手动配置一下。
LAN, WAN6 的 DHCP 部分这样配置即可:
不过如果你的 openwrt 版本比较老的话,你会发现 wan6 里面没有 ipv6 设置。这时可以手动编辑dhcp配置文件来改设置:
备份 /etc/config/dhcp
cp /etc/config/dhcp /etc/config/dhcp.bak
编辑 /etc/config/dhcp
config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '150'
option leasetime '12h'
# 添加以下设置
option ra 'relay'
option dhcpv6 'relay'
option ndp 'relay'
# 添加 wan6 设置
config dhcp 'wan6'
option interface 'wan6'
option ra 'relay'
option dhcpv6 'relay'
option ndp 'relay'
option master '1'
重启 odhcp
/etc/init.d/odhcpd restart
(参考简单干净的Openwrt ipv6配置,局域网WAN6中继模式获取原生ipv6地址,无需PD-CSDN博客)
自动登录
即便路由器一直开机,过久了仍然可能掉登录,因此需要自动登录。
自动登录校园网,通用的方法应该是用Dr.COM 的脚本,但我这里用了更简单的办法。用浏览器开发者工具截取登陆请求,发现登录请求非常简单,一个单一的请求,账号密码写在 URL 的 query 里。那么好,只用 curl 就能解决了。
经过几次简单的测试,删去了几个不必要的参数,登录命令长这样(一些参数不知有用没,留着没管了):
curl "http://10.254.7.4:801/eportal/portal/login?callback=dr1004&login_method=1&user_account=%2C0%2C<用户名>&user_password=<密码>&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.2&terminal_type=1&lang=zh-cn&v=8002&lang=zh"
将<用户名>
和<密码>
替换掉,用上面的命令就能登录了。
再进一步,把命令放在计划任务(crontab)里,像这样:
* * * * * curl https://baidu.com || curl "http://10.254.7.4:801/eportal/portal/login?callback=dr1004&login_method=1&user_account=%2C0%2C<用户名>&user_password=<密码>&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.2&terminal_type=1&lang=zh-cn&v=8002&lang=zh"
每分钟运行,如果curl https://baidu.com
失败就请求登录。
就一行计划任务,是不是非常简单。目前运行稳定,我已经几个月都没有手动登录过了。