归档 FreeRadius:安装Radius全家桶的方法

3,482 阅读5分钟

特别提示

MYSQL 5.7 之后需要sudo,这一块坑我很久。

sudo mysql --user=root mysql

这样是不行的,不管口令对不对都是不行的:

mysql -u root -p

网上给出一堆的改口令的方法,都没有啥用。 ref:stackoverflow.com/a/52742386/…

其中的最直接的答案,并没有被选中打钩的,建议大家去点击提示此答案。

另外,后来某天我有使用了psql,他也类似的妖儿子,必须得这样:

sudo -u postgres psql

正文开始

全家桶包括LAMP,FreeRadius,DaloRadius。

DaloRadius - manage FreeRADIUS from the web browser. FreeRadius - A free AAA Server LAMP - 其中包括了Apache ,Mysql ,PHP .L = Linux.

选择Linux分发版本

最佳的选择的Linux发行版本是安装ubuntu server ,记得选择LAMP,其中包括了Apache ,Mysql ,PHP .L = Linux.

我最开始使用的是WSL(Windows Linux Subsystem),当输入service mysql start 时,总是提示,无解。好处就是这个玩意是在Windows Store内的,下载速度奇快。

mysql: unrecognized service

LAMP安装好后,需要记得安装php的Pear和它的DB模块,因为DaloRadius要用此模块:

sudo apt install php-pear
sudo pear install DB

配置数据库

现在,LAMP我们都有了,其中包括Mysql。可以执行命令:

sudo mysql -u root -p

一定要加sudo,否则一直报错。是5.7以来的一个新的安全机制,必须这样做。

进入mysql控制台,然后执行命令创建radiusdb,和radius用户,然后刷新授权,退出:

CREATE DATABASE radiusdb;
GRANT ALL ON radiusdb.* TO radius@localhost IDENTIFIED BY "1";
FLUSH PRIVILEGES;
EXIT;

一个空的数据库和对应的权限准备完毕。后面的FreeRadius和DaloRadius要用。

Install FreeRADIUS

接着安装freeradius套件:

apt-get install freeradius freeradius-mysql freeradius-utils

这里居然说找不到包。在网站https://packages.ubuntu.com/是可以找到的。怎么办?先更新下再说:

sudo apt-get update

执行update的目的,是获得最新的包列表,这样我们就可以找到包了。

完成后,把数据库模式sql导入到radiusdb内:

mysql -u root -p radiusdb < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql

可能会提示你不能有权限访问...../schema.sql文件。那么可以:

sudo su

然后在执行此命令行。

然后创建一个符号链接(symbolic link),把mods-available的sql链接到mods-enabled内:

ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/

再次登录mysql,切换数据库,然后显示表清单:

mysql -u root -p
use radiusdb;
 show tables;

可以看到这样的输出:

+--------------------+
| Tables_in_radiusdb |
+--------------------+
| nas                |
| radacct            |
| radcheck           |
| radgroupcheck      |
| radgroupreply      |
| radpostauth        |
| radreply           |
| radusergroup       |
+--------------------+

说明数据库模式导入成功。

编辑/etc/freeradius/3.0/mods-enabled/sql 文件,设置数据库访问:

nano /etc/freeradius/3.0/mods-enabled/sql

内容如下:

sql {
driver = "rlm_sql_mysql"
dialect = "mysql"
# Connection info:
server = "localhost"
port = 3306
login = "radius"
password = "1"
# Database table configuration for everything except Oracle
radius_db = "radiusdb"
}
read_clients = yes
client_table = "nas"

修改模块文件的权属:

chgrp -h freerad /etc/freeradius/3.0/mods-available/sql
chown -R freerad:freerad /etc/freeradius/3.0/mods-enabled/sql

启动服务:

systemctl restart freeradius

查看状态:

systemctl status freeradius

BOOM! 出错了。

sudo service freeradius restart
OUTPUT: Job for freeradius.service failed because the control process exited with error code. See "systemctl status freeradius.service" and "journalctl -xe" for details.

按照错误提示,执行它说的命令:

journalctl -xe" 

可以看到详细错误信息:MySql Error:Access Deny for user'freerad' .

管他的,重启大法启动一下。再查状态就对了。

systemctl status freeradius
freeradius.service - FreeRADIUS multi-protocol policy server

如果你没有sytemctl ,也可以调试模式启动。首先找到freeradius的位置:

whereis freeredius

执行调试模式:

/usr/sbin/freeradius -X

看到消息Ready to process request.说明这一步成功。

Install daloRADIUS

首先下下载安装包:

wget https://github.com/lirantal/daloradius/archive/master.zip

解压:

unzip master.zip

把解压内容放到Apache的public内:

mv daloradius-master /var/www/html/daloradius

导入Dalo的数据库表:

 cd /var/www/html/daloradius
 mysql -u root -p radiusdb < contrib/db/fr2-mysql-daloradius-and-freeradius.sql
 mysql -u root -p radiusdb < contrib/db/mysql-daloradius.sql

设置权限:

chown -R www-data:www-data /var/www/html/daloradius/
chmod 664 /var/www/html/daloradius/library/daloradius.conf.php

编辑数据库连接文件:

nano /var/www/html/daloradius/library/daloradius.conf.php

属于内容如下,一遍可以连接数据库:

$configValues['DALORADIUS_VERSION'] = '1.1-1';
$configValues['DALORADIUS_DATE'] = '28 Jul 2019';
$configValues['FREERADIUS_VERSION'] = '2';
$configValues['CONFIG_DB_ENGINE'] = 'mysqli';
$configValues['CONFIG_DB_HOST'] = 'localhost';
$configValues['CONFIG_DB_PORT'] = '3306';
$configValues['CONFIG_DB_USER'] = 'radius';
$configValues['CONFIG_DB_PASS'] = '1';
$configValues['CONFIG_DB_NAME'] = 'radiusdb';

重启FreeRadius和apache2,或者就重启电脑:

systemctl restart freeradius
 systemctl restart apache2

查看apache2状态:

systemctl status apache2

You should see the following command:

? apache2.service - The Apache HTTP Server

VISIT WEB

访问Web页面,可以输入地址: http://your-server-ip/daloradius/login.php.

即可看到登录页面。

此时如果是虚拟机,如何在主机访问虚拟内的apache呢?请看:

coderwall.com/p/yx23qw/ac…

提供用户名和密码,然后登录:

administrator / radius

可以看到dashboard。

成功。

www.howtoforge.com/how-to-inst…

troubleshooting

访问Web的时候,如果遇到了HTTP 500 ,查看

/var/log/apache2/error.log

获得具体报错: failed open 'db.php' class DB

需要安装pear-db库:

sudo apt install php-pear
sudo pear install DB

再次登录,终于...............

NTRadPing 验证

NTRadPing可以模拟NAS等RADIUS Client ,发起登录(Authenication),记账(Account)。

首先,在Web内添加用户,并保存:

UserName:a
Password:a

再添加NAS,并保存:

NAS IP/Host:192.168.1.189 // 你的NTRadPing所在电脑的IP,设置错了的话,从这里发来的包会被服务器丢弃
NAS Secret:sharedkey
NAS Type:other
Short Name:ClientNew

然后启动NTRadPing,填写:

Server 192.168.1.165  //Radius Address
Port :1812            // 1812 认证端口,如果是记账Account,需要改为1813
Secret :sharedkey     // 和你添加的NAS的secret一样
User-Name : a
Password :a
Require type : Authentication Request

点击Send,应该看到Access-Accept。

成功

NTRadPing 记账

在软件界面内,修改如下内容:

Port :1813            // 1812 认证端口,如果是记账Account,需要改为1813
Require type : Accounting Start

点击Send,发现没有接到响应。查看后台,发现调试模式的FreeRadius在控制台打印:

rlm_sql_mysql: MySQL error 'Unknown column 'acctupdatetime' in 'field list''

添加需要的字段:

ALTER TABLE radacct ADD acctupdatetime datetime NULL default NULL AFTER acctstarttime;
ALTER TABLE radacct ADD acctinterval int(12) default NULL AFTER acctstoptime;
ALTER TABLE radacct ADD KEY(acctinterval);
ALTER TABLE radacct ADD UNIQUE KEY(acctuniqueid);
ALTER TABLE radacct DROP column acctstartdelay;
ALTER TABLE radacct DROP column acctstopdelay;
ALTER TABLE radacct DROP column xascendsessionsvrkey;

再次发起记账消息,应看到Accounting-Response。

成功。