导读:本期聚焦于梦乃创作的《如何在Ubuntu上搭建FreeRADIUS服务器实现RADIUS认证?》,敬请观看详情。RADIUS协议在网络认证领域应用广泛,企业级WiFi的802.1X认证、VPN用户验证、交换机管理登录等都离不开它。FreeRADIUS作为开源RADIUS服务器的代表,功能完善且性能稳定,配合Ubuntu系统可以快速搭建一套可用的认证环境。本文从RADIUS协议的基本工作原理讲起,介绍认证、授权、计费三个环节的协作机制,随后在Ubuntu环境下完成FreeRADIUS的安装与基础配置,包括客户端配置、用户管理、测试工具radtest的使用方法,并进一步演示接入MySQL数据库实现集中式账号管理的完整流程,最后附上日志排查和常见报错的处理思路,帮助读者少走弯路。

RADIUS(Remote Authentication Dial In User Service)是一种广泛应用于网络接入认证的协议,典型场景包括企业无线网络的802.1X认证、VPN拨号验证、交换机telnet登录管理等。FreeRADIUS是目前最流行的开源RADIUS实现,在Ubuntu系统上搭建一套FreeRADIUS服务,是网络工程师和运维人员经常需要面对的任务。本文将完整演示从安装、配置到测试验证的全过程,并补充数据库接入和常见问题排查方法。

如何在Ubuntu上搭建FreeRADIUS服务器实现RADIUS认证?

一、RADIUS协议工作原理简介

在动手安装之前,有必要先理解RADIUS的工作模型。RADIUS采用客户端/服务器架构,但这里的客户端并不是最终用户,而是网络设备,比如无线控制器、交换机、VPN网关等,这些设备被称为NAS(Network Access Server)。当用户尝试接入网络时,NAS将用户输入的用户名密码打包成RADIUS报文发给RADIUS服务器,由服务器完成验证并返回结果。

RADIUS的三个核心环节分别是认证、授权和计费,也就是常说的AAA。认证负责确认用户身份,授权决定用户能访问哪些资源、分配什么VLAN或IP地址,计费则记录用户的上网时长和流量。FreeRADIUS对这三部分都有完整支持,默认监听1812端口处理认证授权,1813端口处理计费。

传输层上RADIUS使用UDP协议,报文简单轻量,这也意味着它自身不保证可靠性,需要依靠客户端的重传机制。了解这一点在后期排错时很重要,如果服务器没有响应,客户端会按配置的次数重发请求。

二、Ubuntu下安装FreeRADIUS

Ubuntu官方软件源中已经收录了FreeRADIUS,安装非常直接。执行以下命令即可完成主程序和实用工具的安装:

sudo apt update
sudo apt install freeradius freeradius-utils -y

安装完成后服务会自动启动,可以用systemctl查看运行状态:

sudo systemctl status freeradius

如果需要修改配置后使其生效,可以重启服务:sudo systemctl restart freeradius。FreeRADIUS的默认配置目录在/etc/freeradius/3.0/,这个目录下有几十个配置文件,初学者容易眼花缭乱,但实际常用的只有少数几个:clients.conf负责定义RADIUS客户端,users文件用于本地用户验证,radiusd.conf是主配置文件。

一个非常重要的调试技巧是以前台调试模式运行FreeRADIUS,这种模式下服务器会把每个请求的处理过程详细打印到终端,包括读取了哪些模块、匹配了哪条用户记录,是排错的第一利器。先停止服务再进入调试模式:

sudo systemctl stop freeradius
sudo freeradius -X

当终端最后出现Ready to process requests字样时,说明配置加载无误,服务器已经就绪,此时可以另开一个终端进行测试。

三、配置客户端和测试用户

首先配置RADIUS客户端,也就是允许哪些网络设备向本服务器发起认证请求。编辑/etc/freeradius/3.0/clients.conf,在文件末尾追加一段客户端定义:

client my-switch {
    ipaddr  = 192.168.1.10
    secret  = testing123
    shortname = sw1
}

其中ipaddr是NAS设备的IP地址,secret是双方共享的密钥,必须与网络设备上配置的完全一致,否则会出现握手失败的报错。shortname只是备注用途。如果NAS设备较多,也可以用subnet代替ipaddr来定义一个网段。

接着添加一个测试用户,编辑/etc/freeradius/3.0/mods-config/files/authorize文件(旧版本直接是users文件),在文件顶部加入:

testuser Cleartext-Password := "test123"
    Reply-Message = "Hello, auth success"

保存后在调试模式的终端中可以看到配置被重新提示的信息,调试模式会自动检测文件变更。然后使用radtest工具发起本地测试:

radtest testuser test123 127.0.0.1 0 testing123

命令中的参数依次是用户名、密码、服务器地址、端口、共享密钥。如果看到Access-Accept的返回,说明认证链路已经打通;如果返回Access-Reject则是用户名密码不匹配;返回超时则要检查防火墙是否放行了1812端口。注意本机测试默认使用clients.conf中定义的localhost客户端,其secret默认就是testing123。

四、接入MySQL实现集中账号管理

users文件适合少量测试账号,生产环境中通常需要把用户数据放到数据库里,方便与其他系统对接和批量管理。安装FreeRADIUS的MySQL模块:

sudo apt install freeradius-mysql -y

安装后需要创建数据库并导入表结构,FreeRADIUS自带了SQL脚本:

mysql -u root -p -e "CREATE DATABASE radius;"
mysql -u root -p radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql
mysql -u root -p -e "GRANT ALL ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'radiuspass';"

然后修改/etc/freeradius/3.0/mods-available/sql文件中的数据库连接参数,将dialect设为mysql,填写数据库地址、账号密码等信息。再启用该模块并重启服务:

sudo ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/sql
sudo systemctl restart freeradius

用户账号存放在radius库的radcheck表中,插入一条记录后即可用radtest验证:

mysql -u root -p radius -e "INSERT INTO radcheck (username, attribute, op, value) VALUES ('dbuser', 'Cleartext-Password', ':=', 'dbpass');"

导入后再次执行radtest测试dbuser账号,能返回Access-Accept就代表数据库认证配置成功。这种架构下,后续还可以扩展radreply表下发属性、结合radusergroup做分组授权,实现更精细的控制。

五、常见问题排查思路

实际部署中遇到问题时,优先使用freeradius -X调试模式观察请求的完整处理链路,绝大多数问题都能从中直接找到答案。常见的几类错误包括:一是secret不匹配,调试日志中会出现Shared secret is incorrect提示,需要核对客户端和服务端配置;二是认证返回Reject,检查用户属性书写格式是否正确,注意密码属性使用的是:=操作符。

三是端口冲突,如果系统上有其他程序占用了1812端口,FreeRADIUS会启动失败,可以用ss -ulnp | grep 1812确认。四是防火墙阻断,云服务器上需要放行UDP 1812和1813端口。五是SELinux或AppArmor的限制,Ubuntu上AppArmor一般不会拦截标准路径,但如果自定义了日志路径就可能遇到权限问题。

建议在调试通过后再把服务切回后台守护模式运行,并配置开机自启:sudo systemctl enable freeradius。对于企业级802.1X场景,还需要额外配置EAP认证相关的eap模块和证书,这部分可以在基础环境验证可用后再逐步深入。

FreeRADIUSUbuntu搭建RADIUSRADIUS认证服务器修改时间:2026-09-09 06:00:37

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260909/53235.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。