找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6680|回复: 8

[radius] 在Steel-Belted-Radius中将routeros中的拨号用户踢下线的方法

[复制链接]
发表于 2008-4-21 12:09:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
查阅了无数次的资料,参照了太美老大的文章,终于在windows下、在Steel-Belted-radius中实现了将routeros中的拨号用户踢下线。
       这段时间在给别人做国外VPN代理服务器管理(通过radius认证实现管理多台服务器),VPN服务器用的是RouterOS,radius服务器用的是Steel-Belted-Radius,通过sql server 2000和asp,实现web管理。但是这里有一个令大家都头痛的难题,就是:怎样强制到期用户下线。看了太美老大的文章后,终于看到了希望。想通过抓包,然后编程实现。不过太美老大的文章讲的是linux下的实现方法,我不想费劲安装一个linux,所以在windows下安装了freeradius for windows,网上找不到配置资料,今天早上瞎捣鼓了半天,终于可以实现认证了,用了太美的方法实现强制断线,也抓到了udp数据包,终于可以编程实现了。不过,我后来发现了更省事的办法,就是把radclient.exe和cygwin1.dll这2个文件拷到装有Steel-Belted-Radius的机器中,同时把freeradius中的etc和share文件夹也拷过去,注意,这些文件和文件夹一定要按照原来的目录结构放好,然后就可以以这样的命令实现强制断线了:
echo User-Name=ppp7  | radclient.exe -d ../etc/raddb -x 192.168.0.1:1700 disconnect vpn
       命令含义,太美的文章中都有,这里就是多加了一个参数:-d ../etc/raddb ,是用来说明各种radius设备的协议标准的文件所在的目录的。另外,命令中只需指定需要强制断线的用户名就行了,其他参数可以省略。
       到这里,基本功能已经实现,接下来就可以使用简单的编程方法,自动定时到数据库里查询,发现到期用户,用shell(以VB为例)的方法向VPN服务器发出命令……
       太美的文章地址:http://bbs.routerclub.com/viewthread.php?tid=27203&page=1#pid185529

       已把freeradius for windows中的radclient.exe以及相关文件打包上传。radclient.exe在bin目录中。

[ 本帖最后由 bfrader 于 2008-4-21 14:34 编辑 ]

freeradius.rar

702.82 KB, 下载次数: 209

routeros
 楼主| 发表于 2008-4-21 19:32:09 | 显示全部楼层
现在,实现自动强制断线功能的VB程序已完成。
routeros
回复

使用道具 举报

 楼主| 发表于 2008-4-23 09:22:44 | 显示全部楼层
VB程序很简单,只需一个定时器控件,加上以下代码,就可以在每天0时检查到期用户,并踢下线。
Private Sub Timer1_Timer()
If Val(Time) = 0 Then
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Conn.Open "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=radius;User ID=sa;password=sa"
Rst.Open "SELECT username FROM username WHERE online='yes' and DATEDIFF(" + Chr(34) + "d" + Chr(34) + ",disable_time,GETDATE())>=0", Conn, adOpenStatic, adLockOptimistic
While Not Rst.EOF
Dim rec As String
Dim ip As String
rec = Rst.Fields("username")
ip=Rst.Fields("nas_ip")
Shell "cmd /c echo User-Name=" + rec + " | radclient.exe -d ../etc/raddb -x "+ip+":1700 disconnect vpn", vbHide
Rst.MoveNext
Wend
End If
End Sub
以上代码中所用的sql server数据库名是radius,管理员和密码都是sa,用于记录拨号用户资料和拨号状态的表是username,里面最少有这几个字段:username(用户名)、online(是否在线)、disable_time(到期时间)

[ 本帖最后由 bfrader 于 2008-4-23 09:26 编辑 ]
routeros
回复

使用道具 举报

发表于 2008-4-23 15:41:22 | 显示全部楼层
能抓老鼠的猫就是好猫,不错,另辟蹊径!
routeros
回复

使用道具 举报

 楼主| 发表于 2008-4-25 13:08:07 | 显示全部楼层
如果Steel-Belted-Radius和sql server 2000配合使用,还有更简单的方法,不用radclient.exe,不用编程,就可以让用户到期后自动下线。

[ 本帖最后由 bfrader 于 2008-4-26 08:44 编辑 ]
routeros
回复

使用道具 举报

发表于 2008-6-25 21:13:52 | 显示全部楼层
楼上的用什么方法呀
routeros
回复

使用道具 举报

发表于 2008-9-25 10:10:39 | 显示全部楼层
look@#
routeros
回复

使用道具 举报

发表于 2009-9-25 13:33:59 | 显示全部楼层
lihai a
routeros
回复

使用道具 举报

发表于 2010-1-24 14:17:58 | 显示全部楼层
不错。我己在我的系统用上该方法
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-11-24 13:07 , Processed in 0.059128 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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