EdgeMax - PPPoE 自动断线重播

简介

      现实生活中大多数网民会租用运营商 PPPoE 线路作为自家互联网出口,但同时也会遇到网络用着用着突然断掉的情况。一般情况下,运营商为节省有限的公网地址资源,会在 server 端启用命令,让 client 端定时重新拨号。如果 client 端响应则会有 10-20 秒的断网,如果 client 没有重新拨号,就将直接断网。这种机制因地区不同所间隔的时间也不相同,有 8 小时,24 小时,96 小时,一周或者一个月不等。我们现在针对这个问题有两种解决方案,第一种,打电话给运营商,让运营商那边进行时间上的更改;第二种,我们这边提供了一个脚本,可将断线时间设置在网络空闲的时候。本文介绍如何编写脚本使得 PPPoE 可以自行断线重播。

网络拓扑及说明

__.png

(1)拓扑说明

  • 运营商线路模拟 PPPoE 拨号进入。
  • ETH0 连接光猫,ETH1 连接台式机,ETH4 连接 AP 广播 WIFI 信号。

(2)需求 & 方案

  • 明确断网原因,本文章仅解决因运营商强制下线所引起的网络中断事件。
  • 运营商采用累计时间记法,记录该用户已累计在线 X 小时后,触发重新拨号。
  • 启用定时任务,定时执行脚本每天凌晨 3 点进行 PPPoE 重拨,使 server 端不会累积到 X 小时,主动进行重新拨号。

 

配置

(1)查看自己 PPPoE 拨号的虚拟接口

__3.png

  • 查看到我的 edgerouter 使用的拨号接口是 pppoe1

(2)更改时区

C__3__QO3Z5C1_IRLLLI1AK.png

  • edgerouter 默认使用的是 UTC 时间,需要将时区更改为我们当前所在地区。

(3)查看系统时间

date      //保证系统时间和我们本地的时间是一致的

(4)配置脚本

cd /config/scripts      //进入 scripts 文件夹
echo '#!/bin/vbash' >> redial      //编辑命令进入 redial 脚本中
echo 'run=/opt/vyatta/bin/vyatta-op-cmd-wrapper' >> redial
echo '$run disconnect interface pppoe1' >> redial      // pppoe1 断开
echo 'sleep 10' >> redial      //断开10秒
echo '$run connect interface pppoe1' >> redial      // pppoe1 连接
cat redial      //查看脚本 redial 配置
#!/bin/vbash
run=/opt/vyatta/bin/vyatta-op-cmd-wrapper
$run disconnect interface pppoe1
sleep 10
$run connect interface pppoe1
chmod +x redial
./redial     //立即执行脚本
Bringing interface pppoe1 down...
Bringing interface pppoe1 up...
pwd     //查看路径
/config/scripts
configure      //进入配置模式
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)测试

__2.png

  • 查看 PPPoE 拨号时间和获取的地址是否有变化,如果 PPPoE 连接的时间重置了,或者获取到的地址发生变化,就表明重播成功。