每个版本的不同组合都有不同的坑,折腾了两三天,总算把最新版freeRadius2.2.3+jradius1.1.4配置成功。
虽然jradius1.0.0和freeradius整合很容易配置,但是它本身是一个beta版,已知的bug太多。高版本虽然有也存在bug,但至少修改了之前低版本已知的bug。所以还是以高版(1.1.4)为基础进行折腾。freeRadius的最新稳定版是2.2.3, 基于相同的原因当然相信高版本的bug要少。
一. 编译freeRadius2.2.3
svn co http://dev.coova.org/svn/cjradius/trunk/freeradius/rlm_jradius
wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.2.3.tar.gz
tar zxvf freeradius-server-2.2.3.tar.gz
cd freeradius-server-2.2.3
echo rlm_jradius >> src/modules/stable
cp ../rlm_jradius/*.c src/modules/rlm_jradius/.
注意只能copy这一个文件,jradius的svn的rlm_jradius目录中只有.c文件是正确的,Makefile错误。而freeradius目录中src/modules/rlm_jradius/下.c文件是错误的,其它文件正确。
./configure --prefix=your_path
make;make install
${your_path}/sbin/radiusd -X
下面的是选做的项目,我是为了以admin用户启动:
chown root:admin ${your_path}/sbin/radiusd
chmod +s ${your_path}/sbin/radiusd
cp -r ${your_path}/etc/raddb ${deploy_home}
chown admin:admin ${deploy_home}/raddb
以后启动我会以admin身份启动 ${your_path}/sbin/radiusd -d ${deploy_home}/raddb
修改radius.conf,将其中的
modules {
$INCLUDE ${confdir}/modules/
$INCLUDE eap.conf
}
改为:
modules {
jradius {
name = "yourname" # Name of the JRadius Application
primary = "xxxxxx"
#primary = "127.0.0.1" # Primary JRadius Server
#secondary = "192.168.1.2:1815" # Secondary JRadius Server (port 1815)
#tertiary = "192.168.1.2:1816" # Tertiary JRadius Server
timeout = 1 # JRadius Server Connect Timeout (default 5)
onfail = NOOP # What to do if no JRadius
keepalive = yes # Keep connections to JRadius pooled
connections = 8 # Number of pooled JRadius connections
allow_codechange = yes # Allow the changing the RADIUS code/type
allow_idchange = yes # Allow the change of the RADIUS pkt id
}
$INCLUDE ${confdir}/modules/
$INCLUDE eap.conf
}
如果以admin启动在上面加上
group = admin
user = admin
修改sites-enabled/default,将其中的
authorize{
............
}所以内容删除修改为
authorize {
jradius
}
ok.可以直接启动了。
二.配置jradius 1.1.4
默认配置是不能工作的,直接修改jradius-config.xml,和网上介绍的1.0.0不同,必须启用session管理模块,是终结果是:
<?xml version="1.0" encoding="UTF-8"?>
<jradius-config debug="true">
<debug>true</debug>
<timeout>0</timeout>
<dictionary name="jradius-dictionary">
<description>RADIUS Dictionary</description>
<class>bean:attributeDictionary</class>
</dictionary>
<packet-handlers>
<packet-handler name="LocalUsers">
<description>Generic FreeRADIUS Local Users Handler</description>
<class>net.jradius.example.LocalUsersHandler</class>
<users>
<user username="test" password="test">
Reply-Message = Hello test user!
Session-Timeout = 3600
Idle-Timeout = 300
User-Name = any
</user>
</users>
</packet-handler>
</packet-handlers>
<listeners>
<listener name="FreeRadiusListener">
<description>FreeRADIUS rlm_jradius module listener (TCP)
</description>
<class>bean:radiusListener</class>
<processor-class>bean:radiusProcessor</processor-class>
<processor-threads>32</processor-threads>
<!-- 定义太多,一旦重连需要一个一个重试,太少处理能力不足,所以要根据需要确定 -->
<packet-handler type="authorize" handler="LocalUsers" />
<!-- <packet-handler type="post_auth" handler="LocalUsers" /> <event-handler
handler="event-handler" /> -->
<property>
<name>port</name>
<value>1814</value>
</property>
<property>
<name>backlog</name>
<value>1024</value>
</property>
<property name="keepAlive" value="true" />
</listener>
</listeners>
<session-manager class="bean:sessionManager" key-provider="bean:sessionKeyProvider"
session-factory="bean:sessionFactory" />
</jradius-config>
修改一下log4j.properties把ERROR改成INFO或debug,否则无声工作有点不放心,等以后稳定了再修改回ERROR.
注意点:
在连接用户身份不能验证时,freeradius并不做任何响应,测试时没有任何反映,所以你很难判断服务是否正常,所以除了第一次以radiusd -X初始化以后,后期调试期间仍然加-X选择,默认的client.conf中协商码是testing123,如果你不以-X方式启动,你试一下testing124看看就没有任何响应。但以-X方式启动服务端就可以打印是什么原因。
jradius1.1.4的src有很多问题,建议直接下载release包。但是我要做工程化需要把安装目录的运行目录分开,在源码上需要扩展,在编译时需要排除applet模块,因为现在你不可能下载到它的依赖包了,其它模块有的要手工下载jar包放在本地mvn库中,有的还需要vnp翻墙才能编译,总之,自求多福吧。
以上配置刚刚能run起来,下一步是精简。