:ROS PPPOE服务器账号到期web提醒设置

来源:百度文库 编辑:九乡新闻网 时间:2024/04/27 23:59:47

 

查阅了很多资料,大部分都是说怎么到期停止的,没有到期提醒的,找了许多,现在整合起来,暂时可以用了,希望有能力的人可以完善一下

 

实现功能 账号到期后仍然可以连接,但是所有的WEB 访问都转到一个特定的IP上的80端口,此IP可以设置成WEB服务器,设置催费页面(希望有能力的人可以完善到期多少天后自动禁用这个账号的功能,本人是个菜鸟)

首先设置PPPOE的地址池,

设置2个,一个是正常的,另外一个就是已经到期停止的

 

比如 正常的设置 10.1.11-10.1.1.254 名字叫做 PPPOE

到期的地址池叫 STOP 地址为 172.0.0.1-172.0.0.254  

加入针对以上172网段的一个NAT 强制跳转到 192.168.0.1 的80端口, 这个后面我们会用到

/ip firewall nat add chain=dstnat src-address=172.0.0.0/16 src-address-list=!notify protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.0.1 to-ports=80

在终端加入一下命令

{
:local nyr [/system clock get date]
:local yy ([:find jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec [:pick $nyr 0 3]]+1)
:if ($yy<10) do={:set yy (0 . $yy)}
:set nyr ([:pick $nyr 7 11] . $yy . [:pick $nyr 4 6])
:local ii "0";
/ppp secret;
:foreach puse in [find disabled=no comment!="" comment!="admin"] do={
:local pcom [get $puse comment];
:local pnam [get $puse name];
:if ([:len $pcom] >= 8) do={
:local pcom8 [:tonum [:pick $pcom 0 8]];
:if ($pcom8>1) do={
:if ($nyr>=$pcom8) do={
/ppp secret set [/ppp secret find name=$pnam] profile=stop;/ppp active remove [/ppp active find name=$pnam];
:log error ("\BD\FB\D3\C3\D3\C3\BB\A7 [" . $pnam . "]");
}} else={:log error ("\B4\ED\CE\F3\B5\C4\B1\B8\D7\A2\B8\F1\CA\BD [" . $pnam . "] [" . $pcom . "]");}
} else={:log error ("\C8\D5\C6\DA\B1\B8\D7\A2\B2\BB\D7\E38\CE\BB [" . $pnam . "] [" . $pcom . "]")}}
:log warning ("\D3\D0\D0\A7\D3\C3\BB\A7\CA\FD [" . $ii . "]");
}

 

注意倒数第⑦行 profile=stop 这个profile的名字就是STOP

以上命令需要在PPPOE账户的备注里添加到期日期   比如 2010年 10月1日到期 就写 20101001

系统检测到这个账号在今天到期就把它的模板改为STOP ,这样他获得的IP地址就只能是 我们前面设置的172.0.0.0/16这个段了, 前面还有个针对这个地址段的NAT设置,就把这个段的IP 80端口的请求都跳转到 192.168.0.1了 这样我们的任务就完成了

现在需要注意的是

到期后如果续费了,需要手动吧这个到期的账户的profile改为正常的, 检测到期的脚本可以设置为每天运行一次

 

可以这样设置

/system scheduler add name=userstop interval=24h start-time=15:35:00 on-event={
:local nyr [/system clock get date]
:local yy ([:find jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec [:pick $nyr 0 3]]+1)
:if ($yy<10) do={:set yy (0 . $yy)}
:set nyr ([:pick $nyr 7 11] . $yy . [:pick $nyr 4 6])
:local ii "0";
/ppp secret;
:foreach puse in [find disabled=no comment!="" comment!="admin"] do={
:local pcom [get $puse comment];
:local pnam [get $puse name];
:if ([:len $pcom] >= 8) do={
:local pcom8 [:tonum [:pick $pcom 0 8]];
:if ($pcom8>1) do={
:if ($nyr>=$pcom8) do={
/ppp secret set [/ppp secret find name=$pnam] profile=stop;
/ppp active remove [/ppp active find name=$pnam];
:log error ("\BD\FB\D3\C3\D3\C3\BB\A7 [" . $pnam . "]");
}} else={:log error ("\B4\ED\CE\F3\B5\C4\B1\B8\D7\A2\B8\F1\CA\BD [" . $pnam . "] [" . $pcom . "]");}
} else={:log error ("\C8\D5\C6\DA\B1\B8\D7\A2\B2\BB\D7\E38\CE\BB [" . $pnam . "] [" . $pcom . "]")}}
:log warning ("\D3\D0\D0\A7\D3\C3\BB\A7\CA\FD [" . $ii . "]");
} disabled=no

如果不想做到期提醒 直接禁用 把倒数第⑦行换成

/ppp secret disable [/ppp secret find name=$pnam];:set ii ($ii-1);

好了 祝大家都成功

转载请注明出处, 感谢QQ47771885 提供的到期停用脚本,我只是简单修改了一下.