查阅了无数次的资料,参照了软路由论坛太美老大的文章,终于在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目录中。

freeradius.rar

现在,实现自动强制断线功能的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=zxd;Password=zxd"
Rst.Open "SELECT username FROM pppoe_user WHERE online<>'2' 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

作者:77run@齐齐奔跑 -- 骑士威科技
地址:http://blog.77run.com/routeros-Radius-login-user/
版权所有©转载时必须以链接形式注明作者和原始出处及本声明!

| |
0 Responses to "A Sample Post with Links"
发表评论
  • 昵称 [注册]
  • 密码 游客无需密码
  • 网址
  • 电邮
打开HTML 打开UBB 打开表情 隐藏 记住我