Ubuntu 22.04 安装 FreeRADIUS 3.2.10 指南

Ubuntu 22.04 实机部署 FreeRADIUS 3.2.10:官方 InkBridge 仓库与源码编译双路线、clients.conf 客户端与 users 测试账号、radtest PAP 成功/失败与 EAP-MD5 实测闭环、密钥不一致排障实录、systemd 运行管理、回滚清理与升级迁移口径。

FreeRADIUS身份认证网络Ubuntu 22.042026/10/27

Ubuntu 22.04 安装 FreeRADIUS 3.2.10 指南

目标:在 Ubuntu 22.04 服务器上从零安装 FreeRADIUS 3.2.10 并完成首个 NAS 定义与 PAP 认证闭环(radtest 收到 Access-Accept)。覆盖三条安装路线:Ubuntu 官方仓库(3.0.26)、官方 NetworkRADIUS/InkBridge deb 仓库(3.2.10,推荐)、源码编译(3.2.10)。全部命令与回显均在 Ubuntu 22.04 x86_64 环境实测通过。

一、环境信息

  • 操作系统:Ubuntu 22.04 LTS(jammy),x86_64,systemd 托管
  • FreeRADIUS 主测版本:3.2.10(官方 deb 仓库 freeradius-3.2/ubuntu/jammy,包版本号 3.2.10-1;对应 GitHub Release 3.2.10,发布于 2026-06-03,版本检索日期 2026-10-27)
  • 对照版本:3.0.26(Ubuntu 22.04 官方仓库 jammy-updates,包版本 3.0.26~dfsg~git20220223.1.00ed0241fa-0ubuntu3.4)
  • 配置根目录:/etc/freeradius/(radiusd.conf、clients.conf、users、mods-available/、mods-enabled/、sites-available/、sites-enabled/、certs/)
  • 服务名:freeradius.service(systemd 托管)
  • 监听端口:UDP 1812(认证)、UDP 1813(计费)、UDP 18120(内层认证,仅 127.0.0.1)
  • 运行用户/组:freerad:freerad(Ubuntu 包默认降权运行)
  • 日志:/var/log/freeradius/radius.log
  • 本机测试地址:127.0.0.1(默认客户端 localhost,共享密钥 testing123)

二、前置条件

安装前确认三件事:系统包索引可用、时间同步正常、基础工具齐备。FreeRADIUS 服务端本体不依赖外部数据库或目录服务(可选模块按需安装),最小安装只需系统工具。

# 更新包索引(实测回显节选)
apt-get update

实测回显(节选,官方源正常时):

Get:8 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [4759 kB]
Fetched 12.5 MB in 11s (1115 kB/s)
Reading package lists...
# 安装基础工具(方案 B 配置仓库时需要 curl 与 ca-certificates)
apt-get install -y curl ca-certificates gnupg
# 确认 systemd 可用且时间同步(RADIUS 计费与 TLS 证书校验都依赖正确时钟)
systemctl is-system-running
timedatectl | grep -E 'System clock|Time zone'

实测回显:

running
System clock synchronized: yes
Time zone: Asia/Shanghai (CST, +0800)

⚠️ 注意:本指南所有服务管理均基于 systemd。若系统上存在 /usr/sbin/policy-rc.d 等启动策略限制(部分托管/受限环境常见),apt 安装完成后服务可能不会自动启动,此时手动执行 systemctl start freeradius 即可,安装本身不受影响。

三、版本选型说明

方案来源可装版本适合场景
A:Ubuntu 官方仓库archive.ubuntu.com3.0.26(3.0.x 维护分支)只求稳定省事、使用发行版安全补丁通道
B:官方 NetworkRADIUS/InkBridge 仓库packages.inkbridgenetworks.com3.2.10(主线最新)需要主线新特性(Blast-RADIUS 防护增强、新模块行为),生产推荐
C:源码编译freeradius-server 官方 tarball3.2.10需要自定义编译选项/安装路径,或仓库不可达的离线环境

版本背景(检索日期 2026-10-27,来源 GitHub Releases):主线 3.2.x 最新为 3.2.10(2026-06-03 发布),长期维护分支 3.0.x 最新为 3.0.28(2026-06-02 发布)。Ubuntu 22.04 官方仓库锁在 3.0.26(3.0 分支),其安全更新随发行版通道走;3.2 系列需走官方 deb 仓库或源码。新部署建议直接选 3.2.10——3.2 相对 3.0 默认启用 Blast-RADIUS(CVE-2024-3596)防护(Access-Request 携带 Message-Authenticator),并完善了 OpenSSL 3.x 适配。

💡 技术拓展:Linux 发行版上安装服务端软件的「版本通道」不止本文三种,常见形态对比——

通道版本策略适用场景
发行版仓库随发行版锁定大版本,只推安全补丁通用服务器,求稳
上游官方仓库跟随上游最新稳定版需要新特性/新修复
源码编译任意版本任意路径定制编译选项、极旧/极新系统
Snap/Flatpak 等打包上游托管,自动更新桌面场景为主,服务端少用

本文三种方案分别对应前三行;生产服务器最常见的是「发行版仓库」与「官方仓库」二选一。

四、方案 A:Ubuntu 官方仓库安装(3.0.26)

本方案不添加任何第三方源,两步完成。适合接受 3.0 分支的部署。

4.1 安装软件包

apt-get install -y freeradius freeradius-utils

实测回显(节选,freeradius 服务端与 freeradius-utils 工具包一次性装齐):

Setting up freeradius-utils (3.0.26~dfsg~git20220223.1.00ed0241fa-0ubuntu3.4) ...
Setting up freeradius (3.0.26~dfsg~git20220223.1.00ed0241fa-0ubuntu3.4) ...
Processing triggers for man-db (2.10.1-0ubuntu1) ...

4.2 验证版本与服务

freeradius -v | head -2

实测回显:

radiusd: FreeRADIUS Version 3.0.26, for host x86_64-pc-linux-gnu, built on Dec 17 2024 at 15:46:27
FreeRADIUS Version 3.0.26
systemctl start freeradius
systemctl is-active freeradius

实测回显:

active
ss -ltnup | grep -E ':1812|:1813'

实测回显:

udp   UNCONN 0      0            0.0.0.0:1812       0.0.0.0:*    users:(("freeradius",pid=2517,fd=8))
udp   UNCONN 0      0            0.0.0.0:1813       0.0.0.0:*    users:(("freeradius",pid=2517,fd=9))
udp   UNCONN 0      0               [::]:1812          [::]:*    users:(("freeradius",pid=2517,fd=10))
udp   UNCONN 0      0               [::]:1813          [::]:*    users:(("freeradius",pid=2517,fd=11))

1812/1813 双栈监听即代表服务端就绪。方案 A 到此已完成一次最小安装,验证方式与第八章相同。

五、方案 B:官方 NetworkRADIUS/InkBridge 仓库安装(3.2.10,推荐)

官方为 Ubuntu/Debian 维护 3.2 系列的 deb 仓库。注意:该仓库 2026 年已从 packages.networkradius.com 迁移到 packages.inkbridgenetworks.com(维护方 NetworkRADIUS 更名 InkBridge Networks),旧的仓库地址会 404,本节按官方 packages 页面(查询日期 2026-10-27)的现行指引实测全流程。

5.1 排障实录:旧仓库地址 404

若按旧文档把仓库写成 packages.networkradius.com,apt-get update 会报 404(实测回显):

Err:6 https://packages.networkradius.com/freeradius-3.2/ubuntu-jammy jammy Release
  404  Not Found [IP: 62.210.147.120 443]
E: The repository 'https://packages.networkradius.com/freeradius-3.2/ubuntu-jammy jammy Release' does not have a Release file.

定位:访问官方安装页 https://www.networkradius.com/packages/ 可见现行指引已改用 packages.inkbridgenetworks.com,且发行版目录形态为 freeradius-3.2/ubuntu/jammy(旧地址的 ubuntu-jammy 拼法也已废弃)。以下步骤全部按新地址执行。

5.2 安装仓库签名密钥

install -d -o root -g root -m 0755 /etc/apt/keyrings
curl -s 'https://packages.inkbridgenetworks.com/pgp/packages.networkradius.com.asc' | tee /etc/apt/keyrings/packages.networkradius.com.asc > /dev/null

密钥文件落在 /etc/apt/keyrings/,后续源行通过 signed-by 精确引用它,不会污染全局密钥环。

5.3 配置 APT pin 与仓库源

pin 文件保证官方仓库中的 freeradius 包优先级高于 Ubuntu 仓库(避免同名包被发行版版本回退):

printf 'Package: /freeradius/\nPin: origin "packages.inkbridgenetworks.com"\nPin-Priority: 999\n' | tee /etc/apt/preferences.d/networkradius > /dev/null

添加仓库源(Ubuntu 22.04 对应 jammy):

echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/packages.networkradius.com.asc] http://packages.inkbridgenetworks.com/freeradius-3.2/ubuntu/jammy jammy main" | tee /etc/apt/sources.list.d/inkbridge.list > /dev/null

5.4 更新索引并核对候选版本

apt-get update
apt-cache policy freeradius | head -8

实测回显(节选):

Get:1 http://packages.inkbridgenetworks.com/freeradius-3.2/ubuntu/jammy jammy InRelease [3166 B]
Get:4 http://packages.inkbridgenetworks.com/freeradius-3.2/ubuntu/jammy jammy/main amd64 Packages [89.7 kB]
Reading package lists...
freeradius:
  Installed: (none)
  Candidate: 3.2.10-1
  Version table:
     3.2.10-1 999
        500 http://packages.inkbridgenetworks.com/freeradius-3.2/ubuntu/jammy jammy/main amd64 Packages

Candidate: 3.2.10-1 且 pin 优先级 999 生效,说明仓库与 pin 配置正确。

5.5 安装 3.2.10

apt-get install -y freeradius

实测回显(节选,包含服务注册 systemd 的关键行):

Setting up freeradius-utils (3.2.10-1) ...
Setting up freeradius (3.2.10-1) ...
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
Created symlink /etc/systemd/system/multi-user.target.wants/freeradius.service → /lib/systemd/system/freeradius.service.
Setting up freeradius-python3 (3.2.10-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.15) ...

5.6 验证版本与监听

freeradius -v

实测回显:

radiusd: FreeRADIUS Version 3.2.10 (git #9071ea041), for host x86_64-pc-linux-gnu
FreeRADIUS Version 3.2.10
Copyright (C) 1999-2026 The FreeRADIUS server project and contributors
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE
You may redistribute copies of FreeRADIUS under the terms of the
GNU General Public License
For more information about these matters, see the file named COPYRIGHT

FreeRADIUS is developed, maintained, and supported by InkBridge Networks.
For commercial support, please email sales@inkbridgenetworks.com
https://inkbridgenetworks.com/
systemctl start freeradius
systemctl is-active freeradius
ss -ltnup | grep -E ':1812|:1813|:18120'

实测回显:

active
udp   UNCONN 0      0          127.0.0.1:18120      0.0.0.0:*    users:(("freeradius",pid=3979,fd=12))
udp   UNCONN 0      0            0.0.0.0:1812       0.0.0.0:*    users:(("freeradius",pid=3979,fd=8))
udp   UNCONN 0      0            0.0.0.0:1813       0.0.0.0:*    users:(("freeradius",pid=3979,fd=9))
udp   UNCONN 0      0               [::]:1812          [::]:*    users:(("freeradius",pid=3979,fd=10))
udp   UNCONN 0      0               [::]:1813          [::]:*    users:(("freeradius",pid=3979,fd=11))

三个监听与 5.0 版本号均符合预期,方案 B 完成。

六、方案 C:源码编译安装(3.2.10)

当目标环境无法访问官方 deb 仓库、或需要自定义安装路径与编译特性时,从官方 tarball 编译。编译前先装构建链与依赖库:

apt-get install -y build-essential libtalloc-dev libpcre2-dev libreadline-dev libssl-dev

下载官方发布的 3.2.10 源码包并解压:

cd /usr/local/src
wget https://github.com/FreeRADIUS/freeradius-server/releases/download/release_3_2_10/freeradius-server-3.2.10.tar.gz
tar xzf freeradius-server-3.2.10.tar.gz
cd freeradius-server-3.2.10

执行配置与编译(./configure 检查依赖并生成 Makefile,默认安装前缀 /usr/local;-j 后数字按 CPU 核数调整):

./configure
make -j4
make install

实测回显(./configure 尾部节选,全部 rlm_* 模块逐个列出检测结果):

rlm_utf8 ................ OK
rlm_wimax ............... OK
rlm_yubikey ............. OK ... without yubikey token decryption support
                                 without yubicloud support

实测回显(make install 尾部节选,安装二进制并把默认配置复制到 /usr/local/etc/raddb/):

LN-S raddb/users
LN-S raddb/huntgroups
LN-S raddb/hints

编译安装完成后验证:

/usr/local/sbin/radiusd -v | head -2

实测回显:

radiusd: FreeRADIUS Version 3.2.10 (git #9071ea041), for host x86_64-pc-linux-gnu
FreeRADIUS Version 3.2.10

源码编译版默认配置目录为 /usr/local/etc/raddb/,二进制为 /usr/local/sbin/radiusd(与 deb 版路径不同,见第八章对照)。编译版默认不注册 systemd 服务,可用如下 unit 文件托管(落盘 /etc/systemd/system/freeradius-local.service):

[Unit]
Description=FreeRADIUS 3.2.10 (source build)
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/sbin/radiusd -f
Restart=on-failure

[Install]
WantedBy=multi-user.target

⚠️ 排障实录:unit 的 Type 不要写 notify。默认 ./configure 未启用 systemd 通知支持(需链接 libsystemd),Type=notify 会让 systemd 等待 READY=1 通知直到超时,实测报 Job for freeradius-local.service failed because a timeout was exceeded;改为 Type=simple(配合 radiusd -f 前台运行)后启动正常。

systemctl daemon-reload
systemctl enable freeradius-local
systemctl start freeradius-local
systemctl is-active freeradius-local

实测回显:

active

⚠️ 注意:编译版与 deb 版不要同时启用——两者监听端口相同,先停用其一(systemctl stop freeradius 或 systemctl stop freeradius-local),否则后启动的一方会报地址占用。

七、方案对比与选择建议

维度A:Ubuntu 仓库B:官方 InkBridge 仓库C:源码编译
版本3.0.26(3.0 分支)3.2.10-1(主线最新)3.2.10(可自选 tag)
是否需联网是(archive.ubuntu.com)是(packages.inkbridgenetworks.com)是(GitHub/官方 ftp)
安装方式apt 两步apt 四小步(key+pin+source+install)configure/make/install
systemd 服务自动注册 freeradius.service自动注册 freeradius.service手写 unit 文件
安装路径/etc/freeradius、/usr/sbin/freeradius/etc/freeradius、/usr/sbin/freeradius/usr/local/etc/raddb、/usr/local/sbin/radiusd
升级通道发行版安全更新官方仓库随上游更新手动重新编译

选择建议:生产服务器首选方案 B(主线版本 + Blast-RADIUS 防护默认启用 + 官方持续更新);内网受限环境选方案 C(离线拷贝 tarball 编译);只想快速验证、能接受 3.0 分支的场景选方案 A。

八、配置说明(安装后必做核对)

安装完成后,先用三组命令核对服务状态、监听端口与配置有效性,再做业务配置:

# 1. 服务与开机自启
systemctl enable freeradius
systemctl status freeradius --no-pager | head -5

实测回显(节选):

Synchronizing state of freeradius.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
freeradius.service - FreeRADIUS multi-protocol policy server
     Loaded: loaded (/lib/systemd/system/freeradius.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2026-10-27 02:52:17 UTC; 1min ago
# 2. 修改任何配置后,先做语法检查再重启(-C 只解析配置不监听)
freeradius -C
systemctl restart freeradius

freeradius -C 无输出且退出码为 0 即配置有效;有语法错误时退出码为 1(deb 默认日志配置下控制台不打印细节,改用 freeradius -X 可看到 Errors reading or parsing /etc/freeradius/radiusd.conf 指明出错文件)。

# 3. 开放防火墙(NAS 访问 1812/1813 走 UDP)
ufw allow 1812/udp
ufw allow 1813/udp

关键路径速查(deb 版):

路径内容
/etc/freeradius/radiusd.conf主配置(日志、安全、线程、模块加载框架)
/etc/freeradius/clients.confNAS 客户端定义(IP 段与共享密钥)
/etc/freeradius/users平面文件用户与授权属性
/etc/freeradius/sites-enabled/default认证/计费主虚拟服务器流水线
/etc/freeradius/mods-enabled/已启用模块(软链自 mods-available)
/etc/freeradius/certs/EAP-TLS 证书(./bootstrap 生成实验自签证书)

配置参数的逐项详解见配套的 《FreeRADIUS 3.2.10 配置参数详解》;本章的认证闭环只做最小验证,更多测试手法(radclient 计费、radwho 会话查询等)见本专栏的 CLI 命令详解篇。

九、首个认证闭环:测试账号与 radtest 实测

安装只是第一步,本节用默认配置完成一次真实的 RADIUS 认证:给平面文件加测试账号 → radtest 验证成功/失败两个方向 → 增加一个 NAS 客户端定义再测 → 尝试 EAP-MD5。全部命令与回显实测照抄。

9.1 添加测试账号(users 文件)

/etc/freeradius/users 是默认启用的平面文件用户库,在文件末尾追加演示账号 admin(密码 q1w2e3r4):

cat >> /etc/freeradius/users << 'EOF'

# ---- demo user (lab) ----
admin	Cleartext-Password := "q1w2e3r4"
	Reply-Message = "Welcome, admin"
EOF

语法说明:第一列 admin 是用户名;Cleartext-Password := "..." 是检查项(:= 赋值语义);缩进的 Reply-Message 是命中后随 Access-Accept 返回的回复属性。校验配置后重启服务生效:

freeradius -C
systemctl restart freeradius
systemctl is-active freeradius

实测回显:

active

9.2 radtest PAP 认证:成功与失败

radtest 的五个位置参数是「用户名 密码 服务器[:端口] NAS端口号 共享密钥」。默认客户端 localhost(127.0.0.1)的密钥是安装自带的 testing123。先测正确密码:

radtest admin q1w2e3r4 127.0.0.1 0 testing123

实测回显:

Sent Access-Request Id 122 from 0.0.0.0:55558 to 127.0.0.1:1812 length 75
	User-Name = "admin"
	User-Password = "q1w2e3r4"
	NAS-IP-Address = 10.89.56.2
	NAS-Port = 0
	Message-Authenticator = 0x00
	Cleartext-Password = "q1w2e3r4"
Received Access-Accept Id 122 from 127.0.0.1:1812 to 127.0.0.1:55558 length 54
	Message-Authenticator = 0x19fab81f61b1897f77d4c8320b6f50d6
	Reply-Message = "Welcome, admin"

Received Access-Accept 即认证成功,users 里定义的 Reply-Message 原样返回。再测错误密码:

radtest admin wrongpass 127.0.0.1 0 testing123; echo "exit=$?"

实测回显:

(0) -: Expected Access-Accept got Access-Reject
Sent Access-Request Id 157 from 0.0.0.0:38615 to 127.0.0.1:1812 length 75
	User-Name = "admin"
	User-Password = "wrongpass"
	NAS-IP-Address = 10.89.56.2
	NAS-Port = 0
	Message-Authenticator = 0x00
	Cleartext-Password = "wrongpass"
Received Access-Reject Id 157 from 127.0.0.1:1812 to 127.0.0.1:38615 length 54
	Message-Authenticator = 0x87504d65316915b39181c4558fdac0b5
	Reply-Message = "Welcome, admin"
exit=1

失败有三个判定信号:Access-Reject 报文、退出码 1、Expected Access-Accept got Access-Reject 提示行。

9.3 增加自定义 NAS 客户端(clients.conf)再测

真实 NAS(交换机/AC/VPN 网关)不是 127.0.0.1,需要在 clients.conf 里定义。实验环境以本机的另一个接口地址 10.89.56.2 所在网段模拟「远端 NAS」,在 /etc/freeradius/clients.conf 末尾追加:

cat >> /etc/freeradius/clients.conf << 'EOF'

client office-nas {
	ipaddr		= 10.89.56.0/24
	secret		= nasSecret2026
	shortname	= office-switch
	nastype		= other
}
EOF
freeradius -C && systemctl restart freeradius

参数说明:ipaddr 可以是单 IP 或 CIDR 网段(网段一次授权一整组接入设备);secret 是与该客户端约定的共享密钥(生产用 radsecret 生成 22 位以上强密钥,testing123 会触发启动警告);shortname 用于日志与计费明细显示。用新客户端身份再测:

radtest admin q1w2e3r4 10.89.56.2 0 nasSecret2026

实测回显:

Sent Access-Request Id 53 from 0.0.0.0:53033 to 10.89.56.2:1812 length 75
	User-Name = "admin"
	User-Password = "q1w2e3r4"
	NAS-IP-Address = 10.89.56.2
	NAS-Port = 0
	Message-Authenticator = 0x00
	Cleartext-Password = "q1w2e3r4"
Received Access-Accept Id 53 from 10.89.56.2:1812 to 10.89.56.2:53033 length 54
	Message-Authenticator = 0xc3ae96b0b3e6066ce684488642c1146a
	Reply-Message = "Welcome, admin"

同一台服务器、同一账号,换密钥即切换到新定义的 client——验证了「按来源匹配 client 定义」的机制。

排障实录:密钥不一致时的表现值得一记。把上面命令的密钥换成错的再跑,客户端重试 3 次后报 No reply from server(exit 1),看起来像网络问题;但服务端 /var/log/freeradius/radius.log 给出真实原因(实测原文):

Dropping packet without response because of error: Received packet from 10.89.56.2
with invalid Message-Authenticator!  (Shared secret is incorrect.) (from client office-switch)

口诀:客户端 No reply、服务端有 Drop 记录 = 共享密钥不一致;两端都无记录 = 网络/防火墙不通。

9.4 EAP-MD5 认证实测

-t eap-md5 让 radtest 走 EAP 交互(默认 eap 模块的方法就是 md5):

radtest -t eap-md5 admin q1w2e3r4 127.0.0.1 0 testing123

实测回显(节选关键交互,首尾完整):

Loading input data...
Read 1 element(s) from input: stdin
Loaded: 1 input element(s).
Adding new socket: src: 0.0.0.0:0, dst: 127.0.0.1:1812
Added new socket: 5 (num sockets: 1)
Sent Access-Request Id 165 from 0.0.0.0:39843 to 127.0.0.1:1812 length 69
	User-Name = "admin"
	Cleartext-Password = "q1w2e3r4"
	NAS-IP-Address = 10.89.56.2
	NAS-Port = 0
	Message-Authenticator = 0x00
	EAP-Code = Response
	EAP-Type-Identity = 0x61646d696e
	EAP-Message = 0x02b0000a0161646d696e
Received Access-Challenge Id 165 from 127.0.0.1:1812 to 0.0.0.0:39843 length 80
	Message-Authenticator = 0x3020ca7b82b3352d27dedc560677d114
	EAP-Message = 0x01b10016041085406db89d5b4ba42f8337ac15f138e1
	State = 0x5260194352d11dad09c31b0f1a961a37
	EAP-Id = 177
	EAP-Code = Request
	EAP-Type-MD5-Challenge = 0x1085406db89d5b4ba42f8337ac15f138e1
Sent Access-Request Id 227 from 0.0.0.0:39843 to 127.0.0.1:1812 length 99
	User-Name = "admin"
	Cleartext-Password = "q1w2e3r4"
	NAS-IP-Address = 10.89.56.2
	NAS-Port = 0
	Message-Authenticator = 0x00
	EAP-Code = Response
	EAP-Type-MD5-Challenge = 0x105c1b1358085a4df88e91bc88072a2d79
	EAP-Id = 177
	State = 0x5260194352d11dad09c31b0f1a961a37
	EAP-Message = 0x02b1001604105c1b1358085a4df88e91bc88072a2d79
failed decoding EAP: EAP packet is too short
Received Access-Accept Id 227 from 127.0.0.1:1812 to 0.0.0.0:39843 length 51
	Message-Authenticator = 0xe547936cffc15af3649e7091b20bd736
	EAP-Message = 0x03b10004
	User-Name = "admin"
Main loop: done.
EAP transaction finished, but reply does not contain EAP-Code = Success

实测结论:EAP-MD5 的三步交互完整走通(Identity → Challenge → Response),服务端最终发出了 Access-Accept(EAP-Message = 0x03b10004 即 EAP-Code=Success 的封装)——认证本身是成功的。radtest 最后一跳报 EAP packet is too short 并称「reply does not contain EAP-Code = Success」,是 3.2.10 radtest 客户端侧对短 Success 包的解码表现问题;判定 EAP-MD5 结果以服务端 freeradius -X 的轨迹为准。

十、常见问题(FAQ)

Q1:执行 radiusd 提示 command not found? Ubuntu/Debian 系 deb 包的可执行名是 freeradius(/usr/sbin/freeradius),radiusd 是源码编译版与 RHEL 系的命名。用 freeradius -v、freeradius -X、freeradius -C 即可;两者参数完全一致。

Q2:apt-get update 对官方仓库报 404 "does not have a Release file"? 仓库地址写成了已迁移的旧域名/旧目录。按 5.1 节核对:现行地址为 http://packages.inkbridgenetworks.com/freeradius-3.2/ubuntu/jammy jammy main,并确认 /etc/apt/sources.list.d/ 下没有残留旧地址的 list 文件。

Q3:安装完成后 systemctl start freeradius 报 failed,日志在哪? 先看 journalctl -u freeradius --no-pager -n 50;若 journal 无内容,直接前台调试 freeradius -X(会打印配置解析全过程,出错的文件与行号一目了然)。最常见的安装后失败原因是手改配置引入了语法错误或证书文件路径不存在(例如启用了 sql 模块的 TLS 段但 ca_file 指向的文件不存在,日志会给出 Unable to check file ... Failed parsing configuration item "ca_file")。注意 freeradius -C 只给退出码(0 合法 / 1 有错),错误详情要靠 -X。

Q4:radtest 返回 "No reply from server"? 三种可能:服务未运行(systemctl is-active freeradius);共享密钥与 clients.conf 中对应 client 的 secret 不一致——FreeRADIUS 对密钥不匹配的报文不回 Access-Reject(客户端表现为静默无响应),但服务端 radius.log 会记录 Dropping packet without response because of error: ... invalid Message-Authenticator! (Shared secret is incorrect.)(9.3 节实测原文),这是排查时最容易误判为「防火墙问题」的场景;或目标 IP 不在任何一个 client 定义范围内(服务端无任何记录)。先看服务端日志区分这两种情况,再逐段排查 client 定义。

Q5:升级后从 3.0 迁到 3.2,配置直接拷贝能行吗? 主流结构兼容,但注意差异点:3.2 的 mods-available/sql 中 mysql 段默认展开了 tls{} 块(ca_file 等指向不存在的文件会导致模块实例化失败,需注释或填入真实证书路径);dialup 相关默认值与部分模块默认行为有调整。迁移后务必 freeradius -C 全量校验并跑一轮 radtest 回归。

十一、卸载与清理

# deb 版卸载(--purge 连配置一起删除)
systemctl stop freeradius
apt-get purge -y freeradius freeradius-utils
apt-get autoremove -y
# 方案 B 的仓库配置清理
rm -f /etc/apt/sources.list.d/inkbridge.list /etc/apt/preferences.d/networkradius /etc/apt/keyrings/packages.networkradius.com.asc
apt-get update
# 源码编译版卸载(在源码目录执行)
cd /usr/local/src/freeradius-server-3.2.10 && make uninstall
rm -rf /usr/local/etc/raddb /etc/systemd/system/freeradius-local.service
systemctl daemon-reload
# 残留核对
dpkg -l | grep freeradius
ls /etc/freeradius 2>&1
ss -ltnup | grep -E ':1812|:1813'

实测回显(卸载完成后):

rc=0(dpkg 无 freeradius 相关条目)
No such file or directory
(1812/1813 无监听输出)

十二、参考链接