RAX3000M openwrt 校园网web认证+断网切换随身WiFi

本文章尚未完善, 有错误还请包涵, 有建议还请提出

学校环境:工作日晚上十一点到早上六点定时断网(气煞我也); 宿舍有LAN网络接口; 南校区 三营业厅都设基站在饭堂楼顶

需要设备: 路由RAX3000M(nand版); 网线若长; 可上网电脑; 随身WIFI(阿里云物联卡的); 

一 获得设备

路由: 我现在看到某鱼都炒到125+了,离谱,价格越来越高了

网线: 我学校宽带最高才100mpbs,超五类 绰绰有余.

电脑: 有台电脑更方便操作

随身WiFi: esim是阿里云认证的物联卡, 速度好, 流量虚标较少, 而且还有那种9.9/100G/1个月套餐, 划算, 还想继续折腾的可以把esim移植到其他设备上, 让这卡更 物有所值, 具体咋做不在此论述.

二 路由刷openwrt 

为啥要RAX3000M?因为我刚好有一台, 也刚好看到Krohnya-chan大神编译的固件. #我不会编译固件 :)

从各种渠道拿到路由后, 参考这篇教程,刷上不死U-Boot和Krohnya-chan编译的固件. #我选择刷入的是:压缩包里面叫 immortalwrt-mediatek-mt7981-cmcc_rax3000m-squashfs-sysupgrade.bin 的文件.

三 使用命令实现网络认证

步骤参考以下教程:

openwrt下实现校园网的web认证

实现使用软路由自动登录校园网等网页认证(零基础教程)

上面的很详细, #必须看看
请注意:

有些地方, 每个学校的认证方式可能不一样, 不要直接就复制拿去用, 一定要拿自己在学校获取的数据来做修改.

就比如我们学校锐捷这个:

curl "http://192.168.**.**:**/eportal/portal/login?callback=dr1003&login_method=1&user_account=******cmcc&user_password=******&wlan_user_ip=$IP&wlan_user_ipv6=&wlan_user_mac=***&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.1.3&terminal_type=1&lang=zh-cn&v=7375&lang=zh"

就跟那位ccpd_1openwrt下实现校园网的web认证里面写的差很多.

我学校的$IP那地方需要根据每次连接获取的IP做改变, 我在下面脚本会自己获取并更改.

mac, 每台设备肯定都是不一样的.

四 配置路由

用刷好的路由WAN口连上宿舍的LAN网络接口, 在路由后台应该就能看到对应网络信息,

在usbA口插上随身wifi, 在路由后台的接口里添加新接口, 随身WiFi需要在路由添加新的 DHCP客服端 才能通过usb共享网络 来使用.

#名称随意, 不碍事, 在脚本改成你改的名称就行.

不知道设备指定哪个,那就观察随身WiFi插上和没插上之间多了啥设备,选择对应的eth, 添加即可, 并且将此新添接口的防火墙归属于有WAN的一组里.

编写脚本,我主要参考了以下教程:openwrt校园网自动登录且断网重连 #建议必须看看

但是我学校环境特殊,所以我并没有使用教程的定时任务, 而是开机自启.

将以下程序, 复制放在/root/ping/ping.sh里

#附属教程Linux 文件与目录管理

sleep 30 # 等待系统完全启动
echo "ping脚本开始运行"
LOG_PATH="./log.txt" # 设置日志路径
count=0 # 初始化计数器

while true; do

    weekday=$(date "+%a")  # 获取星期几
    hour=$(date "+%H")     # 获取24小时制的小时
    minute=$(date "+%M")   # 获取分钟

    # 判断是否在断网时间范围内
    if ([ "$weekday" = "Mon" ] && [ "$hour" -ge 23 ]) || \
       ([ "$weekday" = "Tue" ] && [ "$hour" -lt 6 ] || ([ "$hour" -eq 6 ] && [ "$minute" -le 30 ])) || \
       ([ "$weekday" = "Tue" ] && [ "$hour" -ge 23 ]) || \
       ([ "$weekday" = "Wed" ] && [ "$hour" -lt 6 ] || ([ "$hour" -eq 6 ] && [ "$minute" -le 30 ])) || \
       ([ "$weekday" = "Wed" ] && [ "$hour" -ge 23 ]) || \
       ([ "$weekday" = "Thu" ] && [ "$hour" -lt 6 ] || ([ "$hour" -eq 6 ] && [ "$minute" -le 30 ])) || \
       ([ "$weekday" = "Thu" ] && [ "$hour" -ge 23 ]) || \
       ([ "$weekday" = "Fri" ] && [ "$hour" -lt 6 ] || ([ "$hour" -eq 6 ] && [ "$minute" -le 30 ])) || \
       ([ "$weekday" = "Sun" ] && [ "$hour" -ge 23 ]) || \
       ([ "$weekday" = "Mon" ] && [ "$hour" -lt 6 ] || ([ "$hour" -eq 6 ] && [ "$minute" -le 30 ])); then
       
        echo "开启SSWAN,等15秒"
        if ip link show dev eth2 | grep -q "state UP"; then
            echo "SSWAN 已开启"
        else
            echo "初始SSWAN 未开启,正在尝试开启"
            ifup SSWAN
        fi
        sleep 15  # 等待一段时间确保接口已经开启

        # 指定SSWAN(eth2) ping测试
        ping -c 1 -W 1 -I eth2 www.baidu.com > /dev/null
        ret1=$?
        ping -c 1 -W 1 -I eth2 www.bilibili.com > /dev/null
        ret2=$?
        
        if [[ $ret1 -eq 0 || $ret2 -eq 0 ]]; then
            echo '随身网络正常,关闭WAN,等15秒后开始下一轮循环'

            if ip link show dev eth1 | grep -q "state UP"; then
                echo "初始 WAN 已开启,正在尝试关闭"
                ifdown WAN
            else
                echo "WAN 本未开启"
            fi
            sleep 15  # 等待一段时间确保接口已经关闭
            # 重置失败计数器
            count=0
            continue
        else
            echo '随身网络异常,等8秒后开始下一轮循环'
            
            echo -n "$(date '+%Y-%m-%d %H:%M:%S') 异常!" >> $LOG_PATH
            echo '-> 随身网络异常' >> $LOG_PATH
            
            # 计数器加一
            ((count++))

            if [ $count -eq 5 ]; then
                echo "连续5次连接失败,增加每次循环的间隔时间到两分钟"
                sleep 120
            elif [ $count -eq 15 ]; then
                echo "连续15次连接失败,增加每次循环的间隔时间到20分钟"
                sleep 1200
            else
                sleep 8
            fi
        fi
    #######################分界线#######################
    else
        echo "开启WAN,等20秒"
        if ip link show dev eth1 | grep -q "state UP"; then
            echo "WAN 本已开启"
        else
            echo "初始 WAN 未开启,正在尝试开启"
            ifup WAN 
        fi
        sleep 20  #等待一段时间确保接口已经开启

        # 指定WAN(eth1) ping测试
        ping -c 1 -W 1 -I eth1 www.baidu.com > /dev/null
        ret3=$?
        ping -c 1 -W 1 -I eth1 www.bilibili.com > /dev/null
        ret4=$?

        if [[ $ret3 -eq 0 || $ret4 -eq 0 ]]; then
            echo  '校园网络正常,关闭SSWAN,等15秒后开始下一轮循环'

            if ip link show dev eth2 | grep -q "state UP"; then
                echo "SSWAN 已开启,正在尝试关闭"
                ifdown SSWAN
            else
                echo "SSWAN 本未开启"
            fi
            sleep 15 #等待一段时间确保接口已经关闭
            # 重置失败计数器
            count=0
            continue
        else
            echo '尝试连接校园网'
             
            # 获取 eth3 接口的当前 IP 地址
            IP=$(ip addr show dev eth1 | grep -oE '(inet [0-9.]+)' | cut -d ' ' -f 2)
            echo "WAN IP地址: $IP"
            
            # 使用获取的 IP 地址进行 curl 请求
            curl "http://192.168.**.**:**/eportal/portal/login?callback=dr1003&login_method=1&user_account=******cmcc&user_password=******&wlan_user_ip=$IP&wlan_user_ipv6=&wlan_user_mac=***&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.1.3&terminal_type=1&lang=zh-cn&v=7375&lang=zh"

            # 等待网络连接恢复
            echo '等网络连接恢复20秒'
            sleep 20
            
            ping -c 1 -W 1 -I eth1 www.baidu.com > /dev/null
            ret5=$?
            ping -c 1 -W 1 -I eth1 www.bilibili.com > /dev/null
            ret6=$?

            if [[ $ret5 -eq 0 || $ret6 -eq 0 ]]; then
                echo  '校园网连接成功,等15秒后开始下一轮循环'
                # 重置失败计数器
                count=0
            else
                echo  '校园网连接失败,等15秒后开始下一轮循环'

                echo -n "$(date '+%Y-%m-%d %H:%M:%S') 异常!" >> $LOG_PATH
                echo '-> 校园网连接异常' >> $LOG_PATH
                # 计数器加一
                ((count++))
                if [ $count -eq 5 ]; then
                    echo "连续5次连接失败,增加每次循环的间隔时间到两分钟"
                    sleep 120
                elif [ $count -eq 15 ]; then
                    echo "连续15次连接失败,增加每次循环的间隔时间到20分钟"
                    sleep 1200
                else
                    sleep 15
                fi
            fi
        fi
    fi    
done

以上命令需根据实地的环境该改的,改. 就比如 eth*\断网时间段\接口名字 等, 

不懂得地方问 文心一言, 有条件的问 chatGPT.

#今年4月1号GPT已经开放了部分地区, 没有GPT账号也能用了, 针不戳, 啥时候能国内用.

放上去后先用以下命令测试

./root/ping/ping.sh

如果运行不了,先输入以下命令添加权限

chmod +x /root/ping/ping.sh

测试可以了,且符合自身需求, 在启动项添加:

/root/ping/ping.sh &

不错的视频,值得学习:

【【正片】面对校园网的多设备检测,「我」的解决方案是——】

最后在此感谢:

Krohnya-chan的固件

1715173329的 U-boot

symon_chu的教程以及

in dreaming

ccpd_1

m0_66984299的教程

=========2024.11.20

CSDN审核限制太多了,用得少了不咋看评论,有后续和更新都转到新网址上了

还有我也是半桶水,没啥经验,有些问题我也不知道怎么回事,脚本里的计数判断其实有错 :)

OpenWrt是一个基于Linux的开源操作系统,可以安装在一些路由器设备上,用于增强设备的功能和性能。而校园网通常指的是大学或学校的内部络。如果你想在校园网中使用OpenWrt,你可以根据以下步骤进行设置: 1. 首先,你需要确认你的路由器支持OpenWrt固件的刷写。根据引用中的信息,有些路由器可能无法刷写OpenWrt固件,因此你需要确认你的路由器型号是否支持。 2. 如果你的路由器支持刷写OpenWrt固件,你可以按照引用中的说明,通过SSH登录到OpenWrt路由器的后台。你需要使用一个线将你的电脑与路由器的LAN口相连,并通过另一条线将路由器的WAN口与宿舍墙上的接口相连。然后,你可以使用SSH客户端(比如putty)连接到路由器的IP地址(默认为192.168.1.1),并使用OpenWrt设置的用户名和密码登录。 3. 一旦你成功登录到OpenWrt路由器的后台,你可以根据校园网提供的设置要求进行配置。校园网通常使用802.1x认证方式,你可能需要安装相应的拨号插件来完成拨号操作。根据引用的信息,你可以找到适用于你校园网的ZTE 802.1x路由器拨号插件,并进行相应的设置。 总结起来,如果你想在校园网中使用OpenWrt,你需要确认你的路由器支持刷写OpenWrt固件,然后通过SSH登录到OpenWrt路由器的后台,进行相应的配置,包括安装适用于你校园网的拨号插件。这样,你就可以在校园网中使用OpenWrt了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [中兴校园网openwrt插件](https://download.csdn.net/download/weixin_42567321/10505899)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [配置OpenWRT 校园网实现&nbsp…](https://blog.csdn.net/caoshunxin01/article/details/79355429)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [在OpenWrt上配置原生IPv6 NAT,,实现校园网路由器使用ipv6](https://blog.csdn.net/weixin_51558138/article/details/130778538)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值