简介
现实生活中大多数网民会租用运营商 PPPoE 线路作为自家互联网出口,但同时也会遇到网络用着用着突然断掉的情况。一般情况下,运营商为节省有限的公网地址资源,会在 server 端启用命令,让 client 端定时重新拨号。如果 client 端响应则会有 10-20 秒的断网,如果 client 没有重新拨号,就将直接断网。这种机制因地区不同所间隔的时间也不相同,有 8 小时,24 小时,96 小时,一周或者一个月不等。我们现在针对这个问题有两种解决方案,第一种,打电话给运营商,让运营商那边进行时间上的更改;第二种,我们这边提供了一个脚本,可将断线时间设置在网络空闲的时候。本文介绍如何编写脚本使得 PPPoE 可以自行断线重播。
网络拓扑及说明
(1)拓扑说明运营商线路模拟 PPPoE 拨号进入。ETH0 连接光猫,ETH1 连接台式机,ETH4 连接 AP 广播 WIFI 信号。
(2)需求 & 方案明确断网原因,本文章仅解决因运营商强制下线所引起的网络中断事件。运营商采用累计时间记法,记录该用户已累计在线 X 小时后,触发重新拨号。启用定时任务,定时执行脚本每天凌晨 3 点进行 PPPoE 重拨,使 server 端不会累积到 X 小时,主动进行重新拨号。
(1)查看自己 PPPoE 拨号的虚拟接口
查看到我的 edgerouter 使用的拨号接口是 pppoe1
(2)更改时区
edgerouter 默认使用的是 UTC 时间,需要将时区更改为我们当前所在地区。
(3)查看系统时间date //保证系统时间和我们本地的时间是一致的
(4)配置脚本cd /config/scripts //进入 scripts 文件夹echo '#!/bin/vbash' >> redial //编辑命令进入 redial 脚本中echo 'run=/opt/vyatta/bin/vyatta-op-cmd-wrapper' >> redialecho '$run disconnect interface pppoe1' >> redial // pppoe1 断开echo 'sleep 10' >> redial //断开10秒echo '$run connect interface pppoe1' >> redial // pppoe1 连接cat redial //查看脚本 redial 配置#!/bin/vbashrun=/opt/vyatta/bin/vyatta-op-cmd-wrapper$run disconnect interface pppoe1sleep 10$run connect interface pppoe1chmod +x redial./redial //立即执行脚本Bringing interface pppoe1 down...Bringing interface pppoe1 up...pwd //查看路径/config/scriptsconfigure //进入配置模式set system task-scheduler task redial crontab-spec '55 3 * * *' //启用定时任务“分 时 日 月 星期几” ,我们这里定每天的凌晨3点55分执行set system task-scheduler task redial executable path /config/scripts/redial //执行脚本路径commit //立即执行save //保存
(3)测试
查看 PPPoE 拨号时间和获取的地址是否有变化,如果 PPPoE 连接的时间重置了,或者获取到的地址发生变化,就表明重播成功。