本指南将以最常用、功能强大的 FreeRADIUS 为例,详细讲解在 CentOS 7/8/9 上搭建一个 RADIUS 服务器的完整过程。

核心概念
- RADIUS Server (认证服务器): 运行 FreeRADIUS 软件,负责接收客户端(如 AP、交换机)的认证请求,验证用户名和密码,然后返回
Access-Accept(接受) 或Access-Reject(拒绝) 响应。 - RADIUS Client (客户端): 网络设备,如无线 AP、VPN 服务器、交换机,它们将用户的认证请求发送给 RADIUS Server。
- NAS (Network Access Server): RADIUS Client 的另一种称呼,指提供网络接入服务的设备。
- Secret (共享密钥): RADIUS Server 和 RADIUS Client 之间必须配置一个完全相同的密钥,用于加密和验证通信内容。这是安全的关键!
- User/Password (用户/密码): 存储在 RADIUS Server 中的用户凭证信息。
第一步:环境准备
- 操作系统: 一台干净的 CentOS 7/8/9 服务器。
- 网络配置: 确保服务器有静态 IP 地址,RADIUS Client 可以访问到该 IP。
- 防火墙: RADIUS 默认使用 UDP 1812 (认证) 和 UDP 1813 (计费) 端口,需要确保防火墙允许这些端口的流量。
第二步:安装 FreeRADIUS
FreeRADIUS 在 CentOS 的官方软件仓库中通常有提供,我们可以直接使用 yum 或 dnf 进行安装。
# 对于 CentOS 7 sudo yum install -y freeradius freeradius-utils # 对于 CentOS 8/9 sudo dnf install -y freeradius freeradius-utils
安装完成后,freeradius 服务会自动启动并设置为开机自启,我们可以检查一下状态:
sudo systemctl status radiusd
如果服务未启动,可以使用以下命令:
sudo systemctl start radiusd sudo systemctl enable radiusd
第三步:配置用户
FreeRADIUS 的用户信息默认存储在 /etc/raddb/mods-config/files/authorize 文件中,这个文件实际上是 /etc/raddb/users 文件的一个符号链接。

我们来添加一个测试用户,编辑 /etc/raddb/users 文件:
sudo vi /etc/raddb/users
在文件末尾添加以下内容:
# 用户名 密码 认证类型
testuser Cleartext-Password := "testpass123"
Service-Type = Framed-User,
Framed-Protocol = PPP,
Framed-IP-Address = 192.168.1.100,
Framed-IP-Netmask = 255.255.255.0
解释:
testuser: 用户名。Cleartext-Password: 表示密码是明文存储。在生产环境中,强烈建议使用Crypt-Password并使用radpass命令加密密码。"testpass123": 用户的密码。Service-Type = Framed-User: 定义用户类型为“帧用户”,常用于 PPP/SLIP 连接。- 后几行是分配给用户的网络属性,如 IP 地址、子网掩码等,可以根据需要修改。
保存并退出文件。

第四步:配置 RADIUS 客户端
这一步至关重要,告诉 RADIUS Server 允许哪些设备(客户端)来请求认证。
编辑客户端配置文件 /etc/raddb/clients.conf:
sudo vi /etc/raddb/clients.conf
在文件中添加你的 RADIUS Client(一台 IP 地址为 168.1.50 的无线 AP)的配置:
client test-network {
ipaddr = 192.168.1.50
netmask = 32
secret = testing123 # <-- 共享密钥,必须与客户端设备上的配置完全一致!
}
解释:
client test-network: 为这个客户端定义一个别名,方便管理。ipaddr = 192.168.1.50: RADIUS Client 的 IP 地址。netmask = 32: 表示这是一个单机地址,如果是整个网段,可以设置为255.255.0。secret = testing123: 共享密钥,这个密钥必须在你的 AP、交换机等所有 RADIUS Client 上进行完全相同的配置。请务必使用一个强密码替换testing123。
保存并退出文件。
第五步:配置 FreeRADIUS
为了简化调试,我们先让 FreeRADIUS 输出更详细的调试信息。
编辑主配置文件 /etc/raddb/radiusd.conf:
sudo vi /etc/raddb/radiusd.conf
找到 log 部分,确保 auth 和 auth_detail 的日志级别足够高。
log {
...
auth = yes
auth_badpass = yes
auth_goodpass = yes
...
}
更简单的方法是,在调试时,直接在命令行运行 radiusd -X,它会以调试模式启动,输出所有详细信息。
第六步:测试认证
我们可以开始测试了,有两种测试方法:使用命令行工具和使用网络设备。
使用 radtest 命令行工具
radtest 是一个简单的测试客户端,可以直接在服务器上运行来测试 RADIUS 服务。
# 格式: radtest <用户名> <密码> <RADIUS服务器IP> <端口号> <共享密钥> radtest testuser testpass123 127.0.0.1 0 testing123
解释:
testuser: 我们在users文件中创建的用户名。testpass123: 用户的密码。0.0.1: 本地回环地址,表示测试服务器自身。0: 使用默认的 RADIUS 端口(1812)。testing123: 我们在clients.conf中为0.0.1配置的共享密钥。
预期成功输出:
你会看到以 Sent Access-Request 开头,并以 Received Access-Accept 结尾的输出,这表示认证成功。
Sent Access-Request ID 220, length 44
User-Name = "testuser"
User-Password = "testpass123"
NAS-IP-Address = 127.0.1.1
NAS-Port = 0
...
Received Access-Accept ID 220, length 20
Service-Type = Framed-User
Framed-Protocol = PPP
...
如果失败,请仔细检查 /var/log/radius/radius.log 日志文件,里面会有详细的错误信息。
使用真实网络设备(如华为/思科交换机)
这是实际应用场景,你需要配置你的网络设备。
以华为交换机为例:
# 进入系统视图 system-view # 配置RADIUS方案 radius scheme MY_RADIUS # RADIUS服务器IP primary authentication 192.168.1.100 1812 # 共享密钥 shared-key cipher YourStrongSecretKey # 计费服务器(可选) primary accounting 192.168.1.100 1813 quit # 配置认证方法 aaa authentication-scheme default authentication-mode radius quit # 在接口上应用802.1X认证 interface Vlanif10 dotx port-method macbased dotx port-control auto quit
关键点:
primary authentication 192.168.1.100 1812: 指定你的 RADIUS Server IP 和认证端口。shared-key cipher YourStrongSecretKey: 这里的YourStrongSecretKey必须和/etc/raddb/clients.conf中的secret完全一致!
第七步:集成后端认证(可选,但推荐)
在生产环境中,用户通常存储在数据库(如 MySQL/MariaDB)或 LDAP 目录中,这里以集成 MariaDB 为例。
-
安装 MariaDB 和 FreeRADIUS 的数据库模块
sudo dnf install -y mariadb-server freeradius-mariadb
-
初始化数据库并创建用户表
sudo mysql_secure_installation # 初始化
