CQU校园网的折腾指南:ipv6、多设备与自动登录

NitroFire2024/3/22日常openwrt 网络

使用路由器,可以极大地提升校园网的使用体验,但也免不了折腾一番。这篇文章基于我自己折腾的经验,希望能帮助 CQU 的同学更愉快地使用校园网。

本文探讨的内容适用于重庆大学虎溪校区,对于其他网络环境,仅供参考。

多设备

默认情况下校园网限制2个设备同时登录。接上路由器后,只需登录一次,连接同一路由器的设备就都能联网了。但多设备时仍有可能掉线,这时就需要 ua2f 等防检测手段。实测 ua2f + 防 ttl 检测就可以稳定多设备了,又听说只要 ua2f 就行?我没试过。

ua2f 是 openwrt 的一个插件,通过修改网络请求中的 UA 信息来规避多设备检测。如果你能够找到自带 ua2f 的固件,就比较方便。不然就需要自己编译固件。或者如果你恰好是 cr660x 路由器,也可以尝试我之前编译的固件open in new window(基于 x-wrtopen in new window,含 ua2f, passwall)

编译固件

编译固件的选择比较多,官方的 openwrt 或是第三方改的 immortalwrtopen in new window, x-wrtopen in new window 等,都可以。

编译可能会用到的一些东西:

不同变体编译流程会略有不同,教程很多,我就不细讲了,只提几点:

  • 编译固件需要 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 的依赖项参考这里open in new window):

    • 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 检测open in new window,如果服务器获取的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博客open in new window

自动登录

即便路由器一直开机,过久了仍然可能掉登录,因此需要自动登录。

自动登录校园网,通用的方法应该是用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失败就请求登录。

就一行计划任务,是不是非常简单。目前运行稳定,我已经几个月都没有手动登录过了。

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.5