首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

透过radius给ppp客户端分配ip地址

2012-07-27 
通过radius给ppp客户端分配ip地址radius给ppp客户端自动分配ip地址有两种方法,一种是通过users文件,一种是

通过radius给ppp客户端分配ip地址

radius给ppp客户端自动分配ip地址有两种方法,一种是通过users文件,一种是使用ippool模块

?

第一种方法非常简单;第二种方法非常难,本人也还未实现,摸索ing;

?

今天介绍如何通过users文件来静态或动态分配ip地址;

?

使用下述方法之前,你必须确保整个radius对接过程是通过的,对接过程可以参考我博客中的radius标签下的文章;

?

整个过程只需要修改radius server上的文件,其他不需要配置;

?

1、配置sites-enabled/default文件

?

主要是去掉files的注释,保证在验证之前能够先加载files模块,file对应的即是users文件

?

default文件一共有3处提到了files,一个是authorize{}部分;一个是preacct{}部分;一个是pre-proxy{}部分

当然,如果你不通过radius来分配ip地址,这3个files完全可以注释掉,并且注释掉可以减少处理时间

?

如果通过radius来分配ip地址的话,也只需要注释掉authorize{}部分即可

?

大概在default文件的第169行,找到如下代码

写道# Read the 'users' file
files

?

去掉files前的注释,保存退出

?

2、配置users文件

?

user文件里面包含了很多配置例子,包括拒绝特定用户啊,发送hello消息啊,其中也包括了给特定用户分配ip地址的配置

?

其中Framed-IP-Address就是客户端所需要获得的地址,这个地址可以配置成为你想要配置的任何可用ip地址;

必须注意的是,若是将Framed-IP-Address配置成255.255.255.254,说明客户端从VPN服务器获取ip地址而不是radius

?

①:绑定用户名并配置静态ip

?

添加如下配置:

写道test Service-Type = Framed-User
Framed-Protocol = PPP,
Framed-IP-Address = 192.168.11.100,
Framed-IP-Netmask = 255.255.255.0

?

注意将上述配置添加到出现DEFAULT之前的位置;

其中test就是客户端拨vpn时所使用的用户名,Framed-IP-Address即要分配给客户端的ip,Framed-IP-Netmask是子网掩码了

?

添加上去后保存退出,并重启radius,这样客户端再接入时分配的地址就是192.168.11.100了

?

?

②:给所有客户端动态分配ip

?

这个其实跟上述配置差不多,一点小改动就可以

?

同样,在出现DEFAULT之前添加如下配置:

写道DEFAULT Service-Type = Framed-User
Framed-Protocol = PPP,
Framed-IP-Address = 192.168.11.100+,
Framed-IP-Netmask = 255.255.255.0
?

改动很小,无非就是将用户名改成DEFAULT,Framed-IP-Address后面在加个“+”,意思就是从192.168.11.100开始,依次分配;

?

保存退出,并重启radius,这样所有接入客户端将会从radius得到ip地址;

?

查看debug信息,可以看到相关log

写道Sending Access-Accept of id 227 to 192.168.4.130 port 53889
Framed-Protocol = PPP
Framed-IP-Address = 192.168.11.100
Framed-IP-Netmask = 255.255.255.0
Service-Type := Framed-User

?

很显然,通过users文件能够直接决定radius向nas发送Access-Accept数据包中所包含的相关attribute信息,其中最重要的就是Framed-IP-Address属性信息了

?

有一点不要忘了,那就是必须在nas(radius client)上添加对应的nat iptables,这个肯定少不了的


3、与数据库配置的关系

?

一开始,我也弄了很久,不管怎么配置users文件,就是不起作用,以为是需要其他修改配置文件,反复查找资料,十分确定就是修改users文件;但是为什么我都配置好了却不起作用呢?

?

整个radius对接过程中,查看debug log可以发现,在验证客户端的用户名密码时,radius会先加载files模块,然后根据用户名去匹配users中的配置,查看匹配那一行,若没有精确到用户名的配置,则最终会跟default相匹配,同时会打印出log

写道[files] users: Matched entry test at line 85
++[files] returns ok

?

这里可以看到,客户端已经从users匹配了相关信息,并会将获取的这些attribute信息,等于这时已经向Accept-Access数据包中添加了相关信息;

?

但是radius接下来会加载sql模块,如果sql里配置了相关Framed-IP-Address信息的话,那么Accept-Access数据包的Framed-IP-Address信息就会被修改成数据中读取到的值

?

比如我就悲催的以前添加过下述配置

写道mysql> insert into radgroupreply (groupname,attribute,op,value) values ('user','Auth-Type',':=','Local');

mysql> insert into radgroupreply (groupname,attribute,op,value) values ('user','Service-Type',':=','Framed-User');

mysql> insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Address',':=','255.255.255.254');

mysql> insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Netmask',':=','255.255.255.0');

?

很显然,如果mysql添加过上述配置,那么users文件再怎么修改都将无动于衷

?

解决方法理论上有两个:

?

1、删除mysql中的对应Framed-IP-Address表项;

?

2、调整sites-enabled/default中authorize{}的files,sql的前后位置,将两者对调,这样就能改变他们加载时的先后顺序;

?

第一种方法肯定可行的;

命令如下:

写道mysql> delete from radgroupreply where attribute = "Framed-IP-Address";

mysql> delete from radgroupreply where attribute = "Framed-IP-Netmask";
?

?

?

?

第二个方法,很抱歉,不可行,it doesn't work;至于为什么,我也不太清楚;

?

?

?

OK,先就这样吧

?

?

热点排行