RADIUS (Remote Authentication Dial-In User Service) 是一种广泛使用的网络协议,用于对远程用户进行认证、授权和计费,在 Linux 生态中,最经典和强大的 RADIUS 服务器实现是 FreeRADIUS。

下面我将从以下几个方面为您详细介绍:
- RADIUS 核心概念 (为什么需要它)
- 主流 Linux RADIUS 服务器软件
- 以 FreeRADIUS 为例的详细部署与配置步骤
- 应用场景与排错
RADIUS 核心概念
在开始配置之前,理解 RADIUS 的工作模式至关重要。
-
三个核心组件:
- NAS (Network Access Server): 网络接入服务器,这是用户尝试连接网络的“门卫”,无线接入点、VPN 服务器、以太网交换机、防火墙等,NAS 负责接收用户的凭据(用户名/密码),并将其打包成 RADIUS 请求包发送给 RADIUS 服务器。
- RADIUS Server: 认证服务器,它接收来自 NAS 的请求,验证用户凭据,并根据预设的策略返回“Access-Accept”(允许接入)或“Access-Reject”(拒绝接入)等响应,它还可以执行授权(该用户能访问哪些资源)和计费(记录用户的上网时长、流量等)。
- RADIUS Client: 通常就是 NAS,因为它作为 RADIUS 服务器的客户端。
-
工作流程 (以认证为例):
(图片来源网络,侵删)- 用户在 NAS(如 Wi-Fi)上输入用户名和密码。
- NAS 将用户名和密码打包成一个 Access-Request 数据包,发送给 RADIUS 服务器。
- RADIUS 服务器收到请求后,会使用共享密钥 对数据包进行解密和验证,确保请求来自可信的 NAS。
- 服务器根据用户名在本地文件、数据库或外部服务(如 LDAP, Active Directory)中查找对应的密码,并进行比对。
- 如果密码正确,服务器返回 Access-Accept 响应,并可能附带授权属性(如分配 IP 地址、设置 VLAN 等),如果错误,则返回 Access-Reject。
- NAS 收到响应后,决定是允许还是拒绝用户的连接请求。
-
关键端口:
- UDP 1812: 用于认证请求。
- UDP 1813: 用于计费请求。
- UDP 1645 / 1646: 旧版认证/计费端口,现在不推荐使用。
主流 Linux RADIUS 服务器软件
在 Linux 上,您有几个选择:
| 软件名称 | 描述 | 优点 | 缺点 |
|---|---|---|---|
| FreeRADIUS | 业界黄金标准,功能最强大、最灵活、最广泛使用的开源 RADIUS 服务器。 | - 功能极其强大 - 模块化设计,支持多种数据库后端 - 社区活跃,文档丰富 - 支持最新的安全标准 |
- 配置复杂,学习曲线陡峭 - 默认配置文件非常庞大,初学者容易迷失 |
| Daloradius | 一个基于 Web 的 FreeRADIUS 管理界面,它本身不是 RADIUS 服务器,而是 FreeRADIUS 的图形化前端。 | - 提供直观的 Web 界面管理用户、客户端和统计 - 大大简化了 FreeRADIUS 的日常管理 |
- 依赖于 LAMP/LNMP 环境 - 性能和灵活性不如直接配置 FreeRADIUS |
| openNDS | 一个专注于网络接入控制的开源项目,核心是一个 RADIUS 服务器。 | - 非常适合热点、访客网络等场景 - 配置简单,开箱即用 - 提供 Captive Portal 功能 |
- 功能相对 FreeRADIUS 较为单一,专注特定场景 |
| Cisco Secure ACS / ISE | 商业 RADIUS 服务器,通常用于大型企业网络。 | - 功能强大,与 Cisco 设备集成度高 - 提供高级策略和报告功能 |
- 价格昂贵,闭源 |
对于绝大多数 Linux 环境下的 RADIUS 部署需求,FreeRADIUS 是不二之选,虽然配置复杂,但一旦掌握,您将拥有一个无比强大和灵活的认证引擎。
以 FreeRADIUS 为例的详细部署与配置
这里我们以一个最常见的场景为例:使用 FreeRADIUS 对本地用户文件进行认证,并配置一台 NAS (模拟为另一台 Linux 服务器) 来使用它。

环境准备
- 服务器端: 一台安装了
Ubuntu 22.04的服务器,IP 为168.1.10。 - 客户端 (NAS): 另一台安装了
Ubuntu 22.04的服务器,IP 为168.1.20。 - 目标: 让客户端服务器上的用户
testuser通过mysecretpassword认证成功。
在服务器端安装和启动 FreeRADIUS
# 更新软件包列表 sudo apt update # 安装 freeradius sudo apt install freeradius # 启动并设置开机自启 sudo systemctl enable --now freeradius
配置 FreeRADIUS
FreeRADIUS 的配置文件位于 /etc/freeradius/3.0/,主配置文件是 radiusd.conf,但通常我们不需要修改它,我们主要修改以下几个文件:
clients.conf: 定义哪些 NAS (客户端) 可以连接到 RADIUS 服务器。users: 定义用户及其密码和权限。sites-available/default: 定义处理请求的“站点”和流程。
配置客户端 (clients.conf)
sudo nano /etc/freeradius/3.0/clients.conf
找到类似下面这样的部分,取消注释并根据你的 NAS IP 和共享密钥进行修改:
client nas_client {
# NAS 的 IP 地址
ipaddr = 192.168.1.20
# 共享密钥,必须和 NAS 上的配置完全一致!
secret = testing123
# 短名称,用于日志
nas_type = other
}
注意:
testing123是默认的测试密钥,在生产环境中务必修改为一个复杂且唯一的密钥!
配置用户 (users)
sudo nano /etc/freeradius/3.0/users
在文件末尾添加我们的测试用户,格式为 用户名 密码 = "属性"。
# 添加以下行 testuser User-Password == "mysecretpassword"
这里我们只做了最简单的认证,属性 User-Password 表示这是一个明文密码的请求(在传输中会被加密),FreeRADIUS 还支持 Cleartext-Password,但 User-Password 是更标准的做法。
检查并启用默认站点 (sites-available/default)
sudo nano /etc/freeradius/3.0/sites-available/default
确保 authorize 和 authenticate 部分包含了 files 模块,这是读取 users 文件的关键。
authorize {
# ...
files # 确保这行存在且未被注释
# ...
}
authenticate {
# ...
Auth-Type PAP {
pap
}
# ...
}
pap 模块用于处理 PAP 认证,这是一种基础的认证方式,FreeRADIUS 默认支持多种认证方式,PAP 最简单。
重启 FreeRADIUS 服务
sudo systemctl restart freeradius
在客户端 (NAS) 上安装和测试 radeclient
客户端需要安装一个工具来发送 RADIUS 请求,radclient 是 FreeRADIUS 自带的,非常方便。
# 在客户端服务器 (192.168.1.20) 上执行 sudo apt update sudo apt install freeradius-utils # 包含 radclient
我们使用 radclient 在客户端服务器上向 RADIUS 服务器发起认证请求:
# 格式: radclient <服务器IP> <端口> <共享密钥> # 使用 -x 参数可以输出详细调试信息 radclient -x 192.168.1.10 auth testing123
然后它会提示你输入用户名和密码:
User-Name: testuserUser-Password: mysecretpassword
如果一切配置正确,你会看到类似下面的成功响应:
radclient: Received Access-Accept from id 10 192.168.1.10:1813 length 38
如果失败,你会看到 Access-Reject,此时请仔细检查:
- 服务器和客户端的防火墙是否放行了
1812/udp和1813/udp。 clients.conf中的ipaddr和secret是否完全正确。users文件中的用户名和密码格式是否正确。
应用场景与排错
常见应用场景
- 1X 网络认证: 在企业有线和无线网络中,交换机和 AP 作为 NAS,通过 RADIUS 对员工的电脑或手机进行认证,确保只有授权设备才能接入内网。
- VPN 认证: VPN 服务器作为 NAS,将用户的登录请求转发给 RADIUS 服务器进行统一认证,可以实现与 AD 集成。
- Wi-Fi 认证: 无线控制器或 AP 作为 NAS,对连接 Wi-Fi 的用户进行认证。
- 访客网络管理: 为访客提供临时账户,通过 RADIUS 进行认证和管理。
排错技巧
-
查看日志: 这是最重要的排错手段。
- 系统日志:
journalctl -u freeradius或tail -f /var/log/syslog | grep radius - FreeRADIUS 内部日志:
/var/log/freeradius/radius.log,这个日志非常详细,会显示数据包的收发、模块的加载和执行过程,是定位问题的金钥匙。
- 系统日志:
-
使用
radtest(或radclient): 像上面演示的那样,从客户端直接发起测试请求,可以快速判断是网络问题、NAS 配置问题还是 RADIUS 服务器本身的问题。 -
使用
tcpdump抓包: 如果怀疑 NAS 和 RADIUS 服务器之间的通信有问题,可以在服务器端或客户端上使用tcpdump抓取 1812 端口的流量。# 在 RADIUS 服务器上抓包 sudo tcpdump -i any -n port 1812
这样可以看到 NAS 是否在发请求,请求内容是什么,以及服务器是否回复了。
在 Linux 上部署 RADIUS 服务器,FreeRADIUS 是功能最全面、最可靠的解决方案,虽然其配置初看复杂,但只要理解了 RADIUS 的基本工作流程,并掌握了 clients.conf, users, sites-available/default 这几个核心文件的作用,就能应对绝大多数场景。
部署流程可以概括为: 安装 -> 配置客户端 -> 配置用户 -> 测试 -> 集成到生产环境 (如与 AD/LDAP 集成)。
对于需要图形化管理的用户,可以额外安装 Daloradius 来简化日常的用户管理工作,掌握 FreeRADIUS 将为您构建安全、统一、可扩展的网络认证体系打下坚实的基础。
