校园网&openwrt记(七)断网重连,crontab,静态路由

本文介绍了一种利用crontab实现路由器自动检测网络状态并在断线后自动重连的方法。通过编写shell脚本并配置定时任务,确保网络连接稳定。文章详细解释了如何通过ping命令检查网络状态以及在不同情况下的重连策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  学校的pppoe服务器似乎不希望我们pppoe拨号一直在线,所以有时候会自己断线,或许一天,或许两天,有时候十几天才会断。但是断线后,需要重新发送获取权限的udp包并重新拨号才可以上网,所以为了让路由器全部自己处理好,省得我们重新启动路由器,我们可以简单地写一个脚本不断的检测上网状态,断网了,就自动重连。之前说了可以在启动脚本加上一个循环检测的脚本,让它在路由器启动后,自动在后台不断地运行,这是一种方法。但是,我在这里,使用的是系统的crontab,crontab文件包含送交cron守护进程的一系列作业和指令。cron进程会获取这些指令和用户定义的对这个指令要执行的周期,在时间到来时cron进程会运行它们。
  crontab文件的语法如下:

#六列,每行代表一个周期作业
#分 时 日 月 周 |<==============命令串========================>|

代表意义 分钟 小时 日期 月份 周    命令 
数字范围 0-59 0-23 1-31 1-12 0-7   要运行的指令 

有几个特殊的符号
*(星号) 任何数值。如果每月1号的每一分钟都要运行该命令,则:
* * 1 * * cmd
,(逗号) 代表分隔时段。如果要运行的命令是整整9点或21点,那么: 
0 9,21 * * * cmd
-(减号) 代表一段时间范围内,若9点到21点之间的每小时的30分都运行一条命令,那么: 
30 9-21 * * * cmd
/n(斜线) n代表数字,是“每隔n个单位间隔”的意思,例如每五分钟运行一次,则:
*/5 * * * * cmd 

  所以,假设我的断网重连的脚本的名称为cronconnect的话,其所在目录假设为/root/pppoe,那么我可以在openwrt的/etc/crontab/root文件中添加如下任务:

* * * * * /root/pppoe/cronconnect

  即每分钟检测一次上网状态,确保断网重连,虽然检测密度不如循环,但是也足以接受了。
  那么,应该如何检测上网状态呢?这里我只是简单使用ping命令来ping几个固定的常用的国内DNS,ping成功的结果超过半数即视为联网状态正常。
  shell中可以这样写

cnt=0  # ping成功的DNS个数
ping -c 2 114.114.114.119 -W 3
[ $? -eq 0 ] && cnt=$(($cnt + 1))
...

  这里需要注意的是,根据过程,假设需要接收我们所发送的udp包的服务器ip地址为192.168.66.123,而校园网的网关为192.168.66.254,那么我们wan口通过dhcp获取得到一个为192.168.66.66的校园网ip后,路由表的默认路由将会为校园网的网关,但是当我们pppoe拨号成功后获取得到了isp分配给我们的ip(假设为10.66.66.166),isp的pppoe服务器为10.66.66.1,那么我们的默认网关将会变成10.66.66.1,所以此时我们就不能够上我们学校内的内部网站了,上不了图书馆网站,就连服务器192.168.66.123也连接不到了。所以此时如果我们的pppoe断开了,那么由于我们不能够连接192.168.66.123,自然发送不了udp包给该服务器,就不能够重新拨号了。
  这时,可以有两种处理方法,一种是重启wan口,这将会使wan口重新dhcp获取ip,并添加默认路由为校园网的网关,这时就可以连接服务器192.168.66.123,自然可以重新获取权限并重新拨号上网了。还有一种方法就是添加一条静态路由,指定某些ip走哪一个网关,这里,由于我们的wan接口是物理接口,得到的是校园网ip,而pppoe连接是建立在wan接口之上的,我们需要连接服务器192.168.66.123,那么就可以像下面这样添加一条静态路由,使得访问192.168.66.123时从校园网网关走,从而正常访问:

ip route add 192.168.66.123 via 192.168.66.254

  当然如果知道校园网内网网站站点的ip范围,也可以指定一段:

ip route add 192.168.66.0/24 via 192.168.66.254

  这样就可以在可以访问外网的情况下同时访问学校内部站点。而且此时即使pppoe接口断开之后没有了默认路由,只要我们dhcp获取得到的校园网ip没有过期,就可以直接重新发送udp包到服务器192.168.66.123并重新拨号,当然,最好还是多写几条语句,判断如若不能连接服务器192.168.66.123,说明我们的ip过期了,需要重新获取ip,这时就要重新启动wan口,再发送udp包。
  所以最终crontab方法检测断网重连的步骤是:
  1. ping几个DNS,得到成功ping通的个数,如果过半则退出,否则进入步骤2
  2. 判断是否能够连接服务器192.168.66.123,是则直接发送udp,重启pppoe接口并退出,否则进入步骤3
  3. 重新启动wan口,等待几秒,获取得到校园网ip再发送udp重启pppoe接口并退出。
  至此,任务已经基本完成,应用已经达到目标了。记得当时,我将程序放在自己的路由和那位大神的路由上,发现都能成功,并且断线后还能自动重连,心里那个高兴呀~虽然花了不少时间折腾,但是所带来的收获却是很大的!

OpenWrt是一个开源的嵌入式操作系统,它可以用于路由器和其他络设备。校园网可能有多种原因,以下是一些常见的可能原因和解决方法: 1. 络故障:首先,检查校园网是否正常工作。可以尝试连接其他设备或者询问其他人是否也遇到了问题。如果是整个校园网,建议联系学校的络部门或者管理员进行处理。 2. 路由器配置问题:如果只有你的设备无法连接到校园网,可能是路由器的配置问题。可以尝试路由器,或者检查路由器的设置是否正确。确保你的路由器已经正确设置了校园网的用户名和密码。 3. IP地址冲突:如果多个设备使用了相同的IP地址,可能会导致。可以尝试更改设备的IP地址,确保每个设备都有唯一的IP地址。 4. 防火墙设置:有时候防火墙设置可能会阻止设备连接到校园网。可以检查路由器或者设备上的防火墙设置,并确保允许校园网的流量通过。 5. 络线路问题:检查络线路是否连接正确,确保线路没有损坏或者松动。 6. DNS设置问题:如果无法访问特定的站或者域名,可能是DNS设置问题。可以尝试更改设备的DNS服务器地址,或者使用公共的DNS服务器,如谷歌的8.8.8.8。 以上是一些常见的解决方法,如果问题仍然存在,建议联系学校的络部门或者管理员寻求进一步的帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值