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行,找到如下代码
files
去掉files前的注释 ,保存退出
2、配置users文件
user文件里面包含了很多配置例子,包括拒绝特定用户啊,发送hello消息啊,其中也包括了给特定用户分配ip地址的配置
其中Framed-IP-Address就是客户端所需要获得的地址,这个地址可以配置成为你想要配置的任何可用ip地址;
必须注意的是,若是将Framed-IP-Address 配置成255.255.255.254 ,说明客户端从VPN服务器获取ip地址而不是radius
①:绑定用户名并配置静态ip
添加如下配置:
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之前添加如下配置:
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
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] 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','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-Netmask";
第二个方法,很抱歉,不可行,it doesn't work ; 至于为什么,我也不太清楚;
OK,先就这样吧