ROS软路由论坛 ROSABC.com 网络方案网络工程交流

 找回密码
 会员注册

QQ登录

只需一步,快速开始

查看: 14164|回复: 0

[交流] PPPOE拨号自动推送续费和停网提醒

[复制链接]
发表于 2010-3-19 08:46:05 | 显示全部楼层 |阅读模式

马上注册成为ROSABC会员,随时发帖回复。

您需要 登录 才可以下载或查看,没有账号?会员注册

x
關於PPPOE拨号自动推送续费和停网提醒,網絡上很多朋友都采用其它軟件進行管理PPPOE(raidus或者其它軟件),這裡我看了一篇關於大河的一篇[PPPOE拨号自动推送续费和停网提醒]文章,只看懂了基本意思,在操作時出現了一些問題,比如代碼運行沒有自動通過PPPOE用戶備註時間進行修改profile屬性,另外在manle標記上也有些看不懂;在這裡請有時間的朋友分析一下;
下面是大河的一篇[PPPOE拨号自动推送续费和停网提醒]文章鏈接:
http://ewangsoft.blog.163.com/blog/static/77215582201182665515107/
本想去問他本人的,我就放在這裡和大家討論一下,我操作的地方出現什麼問題?
manle標記代碼如下:(理解大河的[PPPOE拨号自动推送续费和停网提醒]文章做的自己操作
0 chain=prerouting action=mark-connection new-connection-mark=HTTP
passthrough=no connection-state=new src-address-list=pppoe1
dst-address-list=!192.168.41.0/24 content=www.
1 chain=prerouting action=add-src-to-address-list
address-list=pppoefornormal address-list-timeout=4s
connection-mark=HTTP
2 chain=prerouting action=mark-connection new-connection-mark=notice_conn
passthrough=yes
3 chain=prerouting action=add-src-to-address-list src-address-list=pppoe
address-list=pppoefornotice address-list-timeout=3s
connection-mark=HTTP

下面編碼是大河的一篇[PPPOE拨号自动推送续费和停网提醒]文章原意,上面代碼則我是通過文章理解後的操作
編碼0是:
标记出要重定向到提醒页的访问外网时的连接(源为内部要发通知提醒的IP段,目标要排除本地网段,in interface要选择到外网访问时进的ROS软路由接口,只标记HTTP,标记连接状态选new,最好指定content=www.)

編碼1是:
对先前做过标记的连接,执行add src to address list,只要第一步够精确,此处不需要附加条件,如果发现此处添加到地址列表里有不期望的,那就需要进一步在规则上筛选条件。src address地址选择要通知的网段且不在已通知列表noticelist中的地址,设置timeout为1-3秒,添加的此地址列表叫首次要执行提醒通知的地址列表

編碼2是:
如果想让重定向到提醒页面后等待几秒自动打开先前访问的网页,则需要在上述第二步后增加一条标记连接notice_conn,此标记连接的src.address为首次要提醒的地址列表。然后在计划任务里添加自动清除连接的脚本:
:foreach conn in [/ip firewall connection find connection-mark="notice_conn"] do={/ip firewall connection remove $conn}
要执行上述清除连接的脚本的原因是,当用户打开网页重定向后,此连接及NAT映射关系已经存在。如果不关闭浏览器,则是同一个会话,因此不会重定向到需要打开的外网网页。

編碼3是:
对先前做过标记的连接,执行add src to address list,只要第一步够精确,此处不需要附加条件,如果发现此处添加到地址列表里有不期望的,那就需要进一步在规则上筛选条件。设置的timeout值为第一次通知后到再次通知的时间间隔。此地址列表叫已经通知过的地址列表。


NAT:
4 ;;; pppoefornormal
chain=srcnat action=masquerade src-address-list=pppoefornormal
5 ;;; pppoefornotice
chain=dstnat action=dst-nat to-addresses=192.168.41.102 to-ports=8081
protocol=tcp src-address-list=pppoefornotice dst-port=80
6 ;;; pppoeforforbidden
chain=dstnat action=dst-nat to-addresses=192.168.41.104 to-ports=80
protocol=tcp src-address-list=pppoeforforbidden dst-port=80

4.5.6編號是:
对在首次通知列表里的地址的HTTP访问做DST-NAT,将访问转向内部的HTTP页面,注意服务器回程包要能走ROS软路由,也就是DST-NAT的到内部服务器的包经LAN时要SRC-NAT。(本人對這裡的最後一句不知道如何做修

通過PPPOE備註時間來確認PPPOE用戶是否到期,到期則NAT到指定WEB頁面,腳本如下:(下面代碼我大概讀懂了用意,不過有幾句不大清楚,運行沒有自動通過PPPOE用戶備註時間進行修改profile屬性
:local daysofnoticebeforeend
:local profilefornormal
:local profilefornotice
:local profileforforbidden
:local daysafterendtoforbidden
:set daysofnoticebeforeend 4
:set profilefornormal normal
:set profilefornotice notice
:set profileforforbidden forbidden
:set daysafterendtoforbidden 0
:local nyr [/system clock get date]
:local month ([:find jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec [:pick $nyr 0 3]]+1)
:if ($month=$nyr && ($numcomment - $nyr)=$nyr && ($numcomment - $nyr)>$daysofnoticebeforeend && $oneprofile!=$profilefornormal) do={
/ppp secret set [/ppp secret find name=$onename] profile=$profilefornormal;
:log warning ("用户【" . $onename . "】恢复上网!")
};
:if ($nyr>$numcomment && ($nyr - $numcomment)>$daysafterendtoforbidden && $oneprofile!=$profileforforbidden) do={
:if ([:len [/ppp active find name=$onename]]>0) do={/ppp active remove [/ppp active find name=$onename]}
/ppp secret set [/ppp secret find name=$onename] profile=$profileforforbidden;:set ii ($ii - 1)
:log error ("用户【" . $onename . "】已过期停用并强制下线!")
};
} else={:log error ("用户【" . $onename . "】的备注【" . $onecomment . "】格式有误,请重新备注!")};
}
:log warning ("有效用户数【" . $ii . "】")

嘿嘿,有時間朋友或懂的一起討論一起學習,完成這個習題後,我會再做完整修改,重新貼出來給大家學習或參考!
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

不良信息举报Q:2000617

软路由

不良信息举报Q:2000617|Archiver|ROS软路由论坛 ROSABC.com 网络方案网络工程交流

GMT+8, 2025-8-6 03:53 , Processed in 0.272653 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表