freeRadius+mysql+ROS
1.安装freeRaidus
安装前需依赖的安装包:
yum �Cy install gcc* make openssl openssl-devel wget mysql mysql-devel
wget -c ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.2.2.tar.gz
tar zxvf freeradius-server-2.2.2.tar.gz
cd freeradius-server-2.2.2
./configure --prefix=/usr/local/freeradius--with-mysql-dir=/var/lib/mysql
--with-mysql-lib-dir=/usr/lib/mysql
####/usr/local/freeradius freeradius 安装目录默认安装/usr/local 下
####--with-mysql-dir 指定mysql的家目录。如果是用rpm或yum的方式安装mysql,这个目录为/var/lib/mysql
####--with-mysql-lib-dir 指定mysql库文件目录。如果是用rpm或yum的方式安装mysql,这个目录为/usr/lib/mysql
make && make install
1.1、基本文件的本地测试(选做)
vim /usr/local/etc/raddb/users
查找 steve Cleartext-Password :="testing" (76-84行), 取消该段内容的注释。
# 大写X,意思是以debug模式运行。
/usr/local/sbin/radiusd -X
#新开一个窗口执行,看到 "Access-Accept packet" 表示成功了,"Access-Reject" 表示失败了。
/usr/local/bin/radtest steve testinglocalhost 0 testing123
1.2创建数据库
mysql -u root -p
CREATE DATABASE radius;
GRANT ALL ON radius.* TO radius@localhost IDENTIFIED BY"radpass";
Exit
MySQL中表结构的定义
针对FreeRadius2,数据表的设计和结构定义在下面的文件中:
/etc/raddb/sql/mysql/schema.sql 主数据库定义,7个表,包括
radcheck 用户检查信息表
radreply 用户回复信息表
radgroupcheck 用户组检查信息表
radgroupreply 用户组检查信息表
radusergroup 用户和组关系表
radacct 计费情况表
radpostauth 认证后处理信息,可以包括认证请求成功和拒绝的记录。
/etc/raddb/sql/mysql/nas.sql 网络设备定义,只有一个表
nas 网络设备表
下面的表用于一些扩展功能,可以按需导入。
ippool.sql ip池
wimax.sql wimax设备支持
cui.sql cui 支持
详细的表定义参见:http://wiki.freeradius.org/MySQL_DDL_script
导入和建立表结构
mysql -u root -p radius </etc/raddb/sql/mysql/schema.sql
mysql -u root -p radius </etc/raddb/sql/mysql/nas.sql
mysql -uroot -p123456 radius < ippool.sql
mysql -uroot -p123456 radius < wimax.sql
mysql -uroot -p123456 radius < cui.sql
上述命令执行schema.sql和nas.sql的sql语句,建立相应的数据库结构。
1.3 启用Freeradius sql认证模式
vim /usr/local/freeradius/etc/raddb/radiusd.conf
//搜索 $INCLUDE sql.conf 去掉行首的注释
打开从数据库查询nas支持
默认从"/usr/local/etc/raddb/clients.conf" 文件读取,开启后可从数据库nas表读取。
sed -i's/\#readclients/readclients/g' /usr/local/etc/raddb/sql.conf
打开在线人数查询支持
# 查找simul_count_query将279-282行注释去掉
vim /usr/local/etc/raddb/sql/mysql/dialup.conf
修改sites-enabled目录配置文件
vim/usr/local/etc/raddb/sites-enabled/default
找到authorize {}模块,注释掉files,去掉sql前的#号
找到accounting {}模块,注释掉radutmp,注释掉去掉sql前面的#号。
找到session {}模块,注释掉radutmp,去掉sql前面的#号。
找到post-auth {}模块,去掉sql前的#号,去掉sql前的#号。
vim /usr/local/etc/raddb/sites-enabled/inner-tunnel
找到authorize {}模块,注释掉files,去掉sql前的#号。
找到session {}模块,注释掉radutmp,去掉sql前面的#号。
找到post-auth {}模块,去掉sql前的#号,去掉sql前的#号。
用户权限管理
连接 MySQL数据库
mysql -uroot -p123456;
# 使用 radius 数据库
USE radius;
# 添加用户demo,密码demo,注意是在radchec表
INSERT INTO radcheck(username,attribute,op,VALUE) VALUES ('demo','Cleartext-Password',':=','demo');
# 将用户demo加入VIP1用户组
INSERT INTO radusergroup(username,groupname) VALUES ('demo','VIP1');
# 限制同时登陆人数,注意是在radgroupcheck表
INSERT INTO radgroupcheck(groupname,attribute,op,VALUE) VALUES ('normal','Simultaneous-Use',':=','1');
# 其他
INSERT INTO radgroupreply(groupname,attribute,op,VALUE) VALUES ('VIP1','Auth-Type',':=','Local');
INSERT INTO radgroupreply(groupname,attribute,op,VALUE) VALUES('VIP1','Service-Type',':=','Framed-User');
INSERT INTO radgroupreply(groupname,attribute,op,VALUE) VALUES ('VIP1','Framed-Protocol',':=','PPP');
INSERT INTO radgroupreply(groupname,attribute,op,VALUE) VALUES ('VIP1','Framed-MTU',':=','1500');
INSERT INTO radgroupreply(groupname,attribute,op,VALUE) VALUES('VIP1','Framed-Compression',':=','Van-Jacobson-TCP-IP');
启动
cp /usr/local/sbin/rc.radiusd/etc/init.d/radiusd
/etc/init.d/radiusd start
测试客户端:
radtest demo demo localhost 1812testing123
radtest 为radius 测试命令
demo demo 前面为用户名 后面为密码
127.0.0.1 1812 freeradius 服务器IP地址及端口 默认1812
testing123 为 client.conf 中配置的secret 字段。
"Access-Accept packet" 表示成功了,"Access-Reject" 表示失败了。
验证数据库,请仔细查看用户demo字段属性:
基中ppoe 拨号 radcheck 表中attribute 字段值必为:Cleartext-Password 否则用户登陆不成功。 ps:这个字段值可以修改,请有心童鞋费心一下。
ROS连接:
clients.conf 文件(主配置文件)
这个文件主要是配置与ROS的对接程序!
设置以下字段:
client 192.168.1.156 { // ros IP地址
secret = ros //与ros服务器的密钥,与ros对接的唯一标识号
shortname = routeros //名字可以随便写,作用还不知
nastype = other //一般固定的
}
ROS 添加设置:
选择Incoming 然后要勾选Accept端口可以不修改.
Client配置样例:
设置freeRadiu 帐户到期下线:
INSERT INTO `radius`.`radcheck` (`id` , `username` , `attribute` , `op` , `value`) VALUES ( NULL , 'sxy', 'Expiration', ':=', '06 Jun 2006 14:55:22');
切记,此记录存在后,用户拨号到期即可下线。(曾测试,先将用户名与密码填写后,用户拨号成功在线,再添加Expiration字段填写到期时间,发现到期未能下线,如下教你将过期用户踢下线:)
将在线用户踢下线:
[root@radiusmysql]# echo User-Name=demo | radclient 192.168.1.156:1700 disconnect 123456
User-Name=demo #####剔除在线的用户名称
192.168.1.156:1700 ######Nas pope IP地址及端口默认1700端口
disconnect123456 ######disconnect 断开命令 123456 即与ros 对应的secret 密钥字段
排错:
一会可以发现freeradius服务器,一会查找不到报:
radclient:Failed to find IP address for radius
radclient:Nothing to send
此问题解决办法:
将主机名添加到/etc/hosts中,即可!
启动时报错未发现sql模块:
修改/usr/local/freeradius/etc/raddb/radiusd.conf 配置文件:
将 $INCLUDE sql.conf 去掉行首的注释