通过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前的注释,保存退出
?
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?
注意将上述配置添加到出现DEFAULT之前的位置;
其中test就是客户端拨vpn时所使用的用户名,Framed-IP-Address即要分配给客户端的ip,Framed-IP-Netmask是子网掩码了
?
添加上去后保存退出,并重启radius,这样客户端再接入时分配的地址就是192.168.11.100了
?
?
②:给所有客户端动态分配ip
?
这个其实跟上述配置差不多,一点小改动就可以
?
同样,在出现DEFAULT之前添加如下配置:
写道DEFAULT Service-Type = Framed-User改动很小,无非就是将用户名改成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?
很显然,通过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?
这里可以看到,客户端已经从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添加过上述配置,那么users文件再怎么修改都将无动于衷
?
解决方法理论上有两个:
?
1、删除mysql中的对应Framed-IP-Address表项;
?
2、调整sites-enabled/default中authorize{}的files,sql的前后位置,将两者对调,这样就能改变他们加载时的先后顺序;
?
第一种方法肯定可行的;
命令如下:
写道mysql> delete from radgroupreply where attribute = "Framed-IP-Address";?
?
?
第二个方法,很抱歉,不可行,it doesn't work;至于为什么,我也不太清楚;
?
?
?
OK,先就这样吧
?
?