radtest 是一个用于测试和调试 RADIUS (Remote Authentication Dial-In User Service) 服务器的命令行工具,它非常实用,可以模拟一个 NAS(Network Access Server,如无线路由器、VPN服务器)向 RADIUS 服务器发送认证请求,从而快速验证用户认证流程是否正常工作。

radtest 是什么?
radtest 通常包含在 FreeRADIUS 软件包中,FreeRADIUS 是目前最流行、功能最强大的开源 RADIUS 服务器,如果你在 Linux 系统上安装了 FreeRADIUS,你就可以直接使用 radtest 命令。
它的核心功能是:构造一个标准的 RADIUS Access-Request 数据包,发送给指定的 RADIUS 服务器,并打印出服务器的响应。
命令语法
radtest 的基本语法如下:
radtest <username> <password> <radius_server> <nas_port_number> <secret>
让我们来分解一下每个参数的含义:

| 参数 | 描述 | 示例 |
|---|---|---|
username |
需要认证的用户名。 | testuser |
password |
对应用户名的密码。 | testpass |
radius_server |
RADIUS 服务器的 IP 地址或主机名。 | 168.1.100 或 radius.example.com |
nas_port_number |
NAS 的端口号,这个数字是逻辑上的,用于标识发起请求的端口,通常可以填一个任意数字(如 0, 10, 100),只要 NAS 和 RADIUS 服务器配置一致即可。 |
0 |
secret |
共享密钥,这是连接 NAS 和 RADIUS 服务器的关键。必须与 RADIUS 服务器配置文件中为该 NAS 定义的共享密钥完全一致(区分大小写)。 | testing123 |
一个完整的示例
假设我们有以下环境:
- RADIUS 服务器: IP 地址为
168.1.100 - 用户名:
bob - 密码:
letmein - 共享密钥:
supersecretkey - NAS 端口号:
10
在客户端(可以是另一台机器,也可以是 RADIUS 服务器本身)执行命令如下:
radtest bob letmein 192.168.1.100 10 supersecretkey
命令输出详解
radtest 的输出非常直观,分为两部分:请求 和 响应。
请求部分
这部分显示了 radtest 发送给 RADIUS 服务器的数据包内容。

Sending Access-Request of id 2 to 192.168.1.100 port 1812
User-Name = "bob"
User-Password = "letmein"
NAS-IP-Address = 192.0.2.1 # 通常是 radtest 所在机器的 IP
NAS-Port = 10
id 2: 数据包的唯一标识符,用于匹配请求和响应。port 1812: RADIUS 认证服务的标准 UDP 端口。- 后面跟着的是 RADIUS 属性,如用户名、密码、NAS IP 和端口。
响应部分
这部分显示了 RADIUS 服务器返回的响应。
认证成功 (Access-Accept)
rad_recv: Access-Accept packet from host 192.168.1.100 port 1812, id=2, length=20
Access-Accept: 这是成功的关键字,它表示 RADIUS 服务器验证了用户名和密码,授权该用户访问。length=20: 响应数据包的长度。
认证失败 (Access-Reject)
rad_recv: Access-Reject packet from host 192.168.1.100 port 1812, id=2, length=20
Access-Reject: 这表示认证失败,原因可能是密码错误、用户名不存在或账户被锁定。
RADIUS 服务器无响应
radclient: No response from server for ID 2 packet
- 这通常意味着网络不通、防火墙阻止了 1812/1813 端口,或者 RADIUS 服务器没有运行。
RADIUS 服务器请求挑战 (Access-Challenge)
rad_recv: Access-Challenge packet from host 192.168.1.100 port 1812, id=2, length=38
State = 0x12345678
Access-Challenge: 这用于更复杂的认证流程,如双因素认证(OTP)或挑战-响应认证,它表示服务器需要用户提供更多信息。
常见问题排查
当 radtest 失败时,可以按照以下步骤进行排查:
-
检查共享密钥:
- 这是最常见的问题,确保
radtest命令中使用的secret与 RADIUS 服务器配置文件(通常是/etc/raddb/clients.conf或/etc/raddb/client.conf)中为客户端(即运行radtest的机器)定义的secret完全一致,包括大小写和空格。
- 这是最常见的问题,确保
-
检查网络连接:
- 确认运行
radtest的机器能够ping通 RADIUS 服务器的 IP 地址。 - 检查防火墙规则,RADIUS 认证使用 UDP 1812 端口,计费使用 UDP 1813 端口,确保 RADIUS 服务器的防火墙允许来自客户端的流量访问这些端口。
- 确认运行
-
检查 RADIUS 服务器状态:
- 在 RADIUS 服务器上,确保
freeradius或radiusd服务正在运行。 - 使用
systemctl status freeradius(对于 systemd 系统) 或service radiusd status检查。
- 在 RADIUS 服务器上,确保
-
启用详细调试(高级):
- 如果问题仍然存在,可以在 RADIUS 服务器上启用调试模式来获取更详细的日志信息。
- 停止服务:
systemctl stop freeradius - 以调试模式运行:
freeradius -X - 然后在客户端再次运行
radtest,服务器终端会打印出详细的调试信息,包括收到的数据包、处理过程和决策依据,这对于定位问题非常有帮助。
radtest 是网络管理员和系统工程师手中一个非常强大的“瑞士军刀”,它简单、直接,能够快速验证 RADIUS 认证链路中的基本问题,它的核心作用是测试客户端与 RADIUS 服务器之间的连接和认证逻辑,而不是测试最终用户(如手机或电脑)的连接问题。radtest 成功,但用户设备无法连接,那么问题通常出在 NAS 设备的配置上。
