Ubuntu上安装和配置FreeRadius和DaloRadius

按照后面的那篇文章的步骤做就行了,由于我使用的是xampp作为mysql server和apache server,php5相关包就不需要安装了,但是需要如下设置:

  1. 使用的xampp版本是xampp-linux-x64-5.5.19,需要下载php-db,将其中的usr/share/php/{DB.php,DB}目录拷贝至lampp/lib/php目录

  2. ln -sv /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock
    否则freeradius服务启动报错,无法连接mysql server

  3. 配置lampp/apache2/conf/httpd.conf,添加

    <VirtualHost *:80>
     DocumentRoot "/opt/www/daloradius"
     ServerName "your.server.domain"
     ServerAlias "your.server.domain"
     <Directory "/opt/www/daloradius">
         Options Indexes FollowSymLinks Includes ExecCGI
         AllowOverride All
         Require all granted
     </Directory>
     ErrorLog "logs/daloradius-error_log"
     CustomLog "logs/daloradius-access_log" common
    </VirtualHost>
  4. 为了能显示Reports/Logs下的log内容
    修改/opt/www/daloradius/daloradius.conf.php

    $configValues['CONFIG_LOG_FILE'] = '/opt/lampp/logs/daloradius-access_log';
    

修改/etc/default/freeradius,添加

if [ ! -e /var/run/mysqld/mysqld.sock ]; then
    mkdir -p /var/run/mysqld
    ln -sv /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock
fi

if [ ! -e /var/log/freeradius ]; then
    mkdir -p /var/log/freeradius
    touch /var/log/freeradius/radius.log
    chown -R freerad.freerad /var/log/freeradius
fi

if [ -e /var/log/freeradius/radius.log ]; then
    chmod 644 /var/log/freeradius/radius.log
fi

做完这些 基本就可以了,从网页打开daloradius服务,创建完用户,然后用VPN连接

如果有问题,可以 freeradius -X 查看更多出错信息


配置流量控制

  1. 在/etc/freeradius/dictionary中添加:
    ATTRIBUTE Max-Monthly-Traffic 3003 integer
    ATTRIBUTE Monthly-Traffic-Limit 3004 integer

  2. 在/etc/freeradius/sql/mysql/counter.conf末尾添加:

    sqlcounter monthlytrafficcounter {
     counter-name = Monthly-Traffic
     check-name = Max-Monthly-Traffic
     reply-name = Monthly-Traffic-Limit
     sqlmod-inst = sql
     key = User-Name
     reset = monthly
     query = "SELECT SUM(acctinputoctets + acctoutputoctets) FROM radacct WHERE UserName='%{Ek}' AND UNIX_TIMESTAMP(AcctStartTime) > '%b'"
    }
    
  3. 在/etc/freeradius/sites-enabled/default的authorize里添加monthlytrafficcounter

    authorize {
     ...
     monthlytrafficcounter
    }
    
  4. 在数据库中插入以下数据:

    INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Auth-Type',':=','Local');
    INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Service-Type',':=','Framed-User');
    INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Framed-IP-Address',':=','255.255.255.255');
    INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Framed-IP-Netmask',':=','255.255.255.0');
    INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Acct-Interim-Interval',':=','600');
    INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES ('user','Max-Monthly-Traffic',':=','5368709120');
    INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES ('user','Simultaneous-Use',':=','1');
    

另外参考:
《CentOS 6安装lnmp+pptp+freeradius+daloradius》 下载
《CentOS下给pptp限速》 下载



【zz】http://blog.atime.me/note/freeradius_daloradius_install_config_on_ubuntu.html

总结我在Ubuntu上安装FreeRadius和DaloRadius的步骤及遇到的问题,以供日后查询,系统为Ubuntu 12.04.3 X86_64,本文的FreeRadius配置使用MySQL作为后端存储相关数据。

FreeRadius可以为pptp和l2tp提供验证和统计等功能,DaloRadius为FreeRadius提供一个网页界面。阅读本文前确保已经正确安装了pptpd或xl2tpd服务器。相关安装配置教程可参考使用pptpd搭建VPN在Ubuntu12.04上安装l2tp/ipsec VPN服务器

开始安装前建议先通读一下wikipedia:RADIUSradius介绍,了解一些radius的概念。

安装必要的软件

sudo apt-get install freeradius freeradius-mysql radiusclient1 php5 php5-mysql php5-gd php5-cgi php5-fpm php-pear php-db mysql-server-5.5

配置FreeRadius


FreeRadius的配置文件位于/etc/freeradius目录。

添加client


修改/etc/freeradius/clients.conf,添加如下内容,注意将IP_ADDRESSSHARED_SECRET换为你的服务器IP和你的共享密钥。

client IP_ADDRESS {
ipaddr = IP_ADDRESS
secret = SHARED_SECRET
require_message_authenticator = no
}

启用MySQL支持

/etc/freeradius/radiusd.conf


取消如下一行的注释来包含FreeRadius的sql配置文件/etc/freeradius/sql.conf

$INCLUDE sql.conf

/etc/freeradius/sql.conf


修改/etc/freeradius/sql.conf,设置MySQL数据库的端口,radius数据库的用户名密码等内容。取消如下一行的注释,使FreeRadius从数据库读取客户端信息。

readclients = yes


/etc/freeradius/sql/mysql文件夹下的众多sql脚本文件用于构建FreeRadius的数据库,首先在admin.sql里修改数据库名称,用户名和密码等内容,这些内容必须和/etc/freeradius/sql.conf的设置相同。

/etc/freeradius/sql/mysql/dialup.conf


修改/etc/freeradius/sql/mysql/dialup.conf,取消如下几行的注释来提供在线人数统计功能。

simul_verify_query  = “SELECT radacctid, acctsessionid, username, \
nasipaddress, nasportid, framedipaddress, \
callingstationid, framedprotocol \
FROM ${acct_table1} \
WHERE username = ‘%{SQL-User-Name}’ \
AND acctstoptime IS NULL”

创建FreeRadius数据库radius


登录mysql

cd /etc/freeradius/sql/mysql
mysql -u root -p


输入以下命令

create database radius;

source admin.sql;
source cui.sql;
source ippool.sql;
source nas.sql;
source schema.sql;
source wimax.sql;

/etc/freeradius/sites-enabled


/etc/freeradius/sites-enabled/default做如下修改

找到authorize {}模块,注释掉files,去掉sql前的#号

找到accounting {}模块,注释掉radutmp,注释掉去掉sql前面的#号。

找到session {}模块,注释掉radutmp,去掉sql前面的#号。

找到post-auth {}模块,去掉sql前的#号,去掉sql前的#号(Post-Auth-Type REJECT内)。
/etc/freeradius/sites-enabled/inner-tunnel做如下修改

找到authorize {}模块,注释掉files,去掉sql前的#号。

找到session {}模块,注释掉radutmp,去掉sql前面的#号。

找到post-auth {}模块,去掉sql前的#号,去掉sql前的#号(Post-Auth-Type REJECT内)。

配置RadiusClient


RadiusClient用于将pptpd和xl2tpd的radius插件的验证请求发送给FreeRadius服务器,充当nas的角色,其配置文件位于/etc/radiusclient内。

添加字典


RadiusClient的字典主要负责参数的映射,默认配置没有包含dictionary.microsoft,因此无法处理使用mschapv2加密的请求头。下载dictionary.microsoft并包含到主dictonary文件中。

cd /etc/radiusclient
sudo wget http://blog.atime.me/static/resource/dictionary.microsoft


/etc/radiusclient/dictionary文件的最后添加如下一行以包含dictionary.microsoft

INCLUDE /etc/radiusclient/dictionary.microsoft


为解决FreeRadius的radacct表不更新的问题,需要在/etc/radiusclient/dictionary中加入如下一行,以保证RadiusClient能够识别Acct-Interim-Interval。

ATTRIBUTE Acct-Interim-Interval 85 integer


另外,记得在daloRadius里为用户添加Acct-Interim-Interval reply attribute(对应MySQL的radgroupreply表)。

设置共享密钥


修改’/etc/radiusclient/servers’文件,添加如下一行,注意SHARED_SECRET必须和你在/etc/freeradius/clients.conf里设置的共享密钥相同。

localhost   SHARED_SECRET

配置VPN服务器


为pptpd和xl2tpd启用radius插件,首先查找插件的位置。

sudo updatedb
locate radius.so


插件通常位于/usr/lib/pppd/2.4.5/radius.so

配置pptpd


查看/etc/pptpd.conf,获取pptpd的ppp配置文件位置

option /etc/ppp/pptpd-options


修改/etc/ppp/pptpd-options文件,在最后添加如下两行,注意修改插件的具体位置。

plugin /usr/lib/pppd/2.4.5/radius.so
radius-config-file /etc/radiusclient/radiusclient.conf


重启pptpd

sudo service pptpd restart

配置xl2tpd


查看/etc/xl2tpd/xl2tpd.conf,获取xl2tpd的ppp配置文件位置

pppoptfile = /etc/ppp/xl2tpd-options


修改/etc/ppp/xl2tpd-options,在最后添加如下两行,注意修改插件的具体位置。

plugin  /usr/lib/pppd/2.4.5/radius.so
radius-config-file /etc/radiusclient/radiusclient.conf


重启xl2tpd

sudo service xl2tpd restart

配置DaloRadius

下载并配置daloRadius


daloRadius的项目托管在sourceforge上,下载并解压。

# 下载并解压
cd /tmp
sudo wget http://sourceforge.net/projects/daloradius/files/daloradius/daloradius0.9-9/daloradius-0.9-9.tar.gz
cd /var/www
sudo tar -xvf /tmp/daloradius-0.9-9.tar.gz
sudo mv daloradius-0.0.9 daloradius

修改权限

sudo chown -R www-data:www-data daloradius
sudo chmod 644 daloradius/library/daloradius.conf.php

修改/var/www/daloradius/library/daloradius.conf.php,设置关于FreeRadius数据库的各个变量,注意和/etc/freeradius/sql.conf的配置相同。

$configValues[‘FREERADIUS_VERSION’] = ‘2’;
$configValues[‘CONFIG_DB_ENGINE’] = ‘mysql’;
$configValues[‘CONFIG_DB_HOST’] = ‘localhost’;
$configValues[‘CONFIG_DB_PORT’] = ‘3306’;
$configValues[‘CONFIG_DB_USER’] = ‘radius’;
$configValues[‘CONFIG_DB_PASS’] = ‘raduser’;


其他需要修改的变量,其中SHARED_SECRET要和/etc/freeradius/clients.conf设置的共享密钥相同。

$configValues[‘CONFIG_PATH_DALO_VARIABLE_DATA’] = ‘/var/www/daloradius/var’;
$configValues[‘CONFIG_MAINT_TEST_USER_RADIUSSECRET’] = ‘SHARED_SECRET’;

为daloRadius创建MySQL数据表


由于之前已经为FreeRadius创建了相应的表结构,这里只需要为daloRadius创建表即可

cd /var/www/daloradius/contrib/db/
mysql -u root -p radius < mysql-daloradius.sql


由于daloRadius向FreeRadius的数据库radius添加了若干新表,我们需要为FreeRadius的数据库用户添加这几张表的访问权限。 FreeRadius的数据库名称和用户可查看/etc/freeradius/sql.conf,这里使用默认数据库radius和默认用户radius。

登录MySQL数据库

mysql -u root -p


输入如下命令

revoke all privileges on . from ‘radius’@’localhost’;
grant all privileges on radius.* to ‘radius’@’localhost’;
flush privileges;
exit

配置nginx


首先在dns服务商添加一条新的A记录daloradius,然后添加新的nginx配置文件/etc/nginx/sites-available/daloradius.conf,确定已正确安装并启动了php5-fpm。

注意将server_name中的your.domain改为你自己的域名。

server {
listen 80;
server_name daloradius.your.domain;
root /home/wilbur/www/daloradius;

access_log  /var/log/nginx/daloradius.access.log main;
error_log   /var/log/nginx/daloradius.error.log warn;

location / {
    index index.php;
    try_files $uri $uri/ /index.php;
}

location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

location ~ /\.ht {
    deny all;
}

}

链接到/etc/nginx/sites-enabled/目录后重启相关服务程序。

cd /etc/nginx/sites-enabled/
sudo ln -s ../sites-available/daloradius.conf .

#sudo service php5-fpm restart
sudo service nginx restart
sudo service freeradius restart

dns更改生效后,访问http://daloradius.your.domain即可配置FreeRadius,默认的用户名是administrator,密码是radius。

daloRadius界面指南


daloRadius的管理账户存储在MySQL的radius.operators表中,密码使用明文存储。

Management => Users 管理VPN用户,注意添加新用户时,应选择Cleartext-Password(默认)密码类型

Config => Operators 管理daloRadius的登录账户,包括修改密码和权限设置等
Config => Interface Settings => Enable Password Hiding 设为yes可以将界面上的明文密码改为点号隐藏

排查错误

使用调试模式启动FreeRadius

freeradius -X

使用radtest


radtest可以向freeradius服务器发送请求,不过目前不支持mschapv2加密模式,详情见man radtest

radtest user password localhost 0 shared_secret

异常掉线的用户在daloRadius显示为在线用户


异常掉线的client无法在退出时更新radius.radacct表的acctstoptime,这些client在daloRadius里会被显示为在线用户。使用如下的命令可修复该问题,最好使用cron定期执行该任务。

mysql -uroot -p -e “UPDATE radius.radacct SET acctstoptime = acctstarttime + acctsessiontime WHERE ((UNIX_TIMESTAMP(acctstarttime) + acctsessiontime + 240 - UNIX_TIMESTAMP())<0) AND acctstoptime IS NULL;”

阅读资料


  1. PPTP/L2TP + FreeRADIUS + MySQL 安装与配置

  2. 在PPTP VPN服务器上配置FreeRADIUS+daloRADIUS实现用户跟踪管理

  3. RadiusClient配置

  4. daloRADIUS Ubuntu help