本指南部署方案,按“规划 → FreeRADIUS部署 → 华为AC/AP配置 → 终端接入 → AP纳管 → 验证排错 → 生产进阶”的顺序展开。华为AP通过CAPWAP上联AC,由AC作为RADIUS客户端(NAS)与FreeRADIUS交互,AP本身不直接与RADIUS服务器通信。
一、方案架构与规划
1.1 组网架构
text
[无线终端/STA] ←无线→ [Fit AP] ←CAPWAP→ [华为AC (认证者/NAS)] ←RADIUS→ [FreeRADIUS服务器]
- · STA(终端) :Supplicant角色,发起802.1X认证
- · AP/AC:Authenticator角色,AP通过CAPWAP注册到AC,AC将EAP报文封装为RADIUS消息转发给服务器
- · FreeRADIUS:Authentication Server,验证用户身份并返回授权结果
1.2 角色与设备对照
|
角色 |
设备/软件 |
作用 |
|
认证服务器 |
Ubuntu + FreeRADIUS |
接收RADIUS认证/计费请求,返回Accept/Reject |
|
认证点/NAS |
华为AC |
接收终端802.1X请求,转发给FreeRADIUS |
|
无线接入 |
华为AP |
通过CAPWAP注册到AC,提供SSID |
|
终端 |
笔记本/手机 |
通过WPA2-Enterprise + 802.1X接入 |
1.3 前期规划
|
项目 |
规划值(示例) |
|
FreeRADIUS服务器IP |
10.23.103.1/24 |
|
AC管理IP |
10.23.100.1/24(VLANIF100) |
|
AP管理VLAN |
VLAN 100(10.23.100.0/24) |
|
业务VLAN |
VLAN 101(10.23.101.0/24) |
|
AC与RADIUS通信VLAN |
VLAN 103(10.23.103.0/24) |
|
SSID名称 |
Corp-WiFi |
|
认证方式 |
WPA2 + 802.1X + AES |
|
认证域名 |
example.com |
|
RADIUS共享密钥 |
Radius@2026!Secure(自定义强密码) |
|
RADIUS认证端口 |
UDP 1812 |
|
RADIUS计费端口 |
UDP 1813 |
服务器硬件建议:2核CPU及以上,2GB以上内存,操作系统推荐Ubuntu 20.04/22.04 LTS。需开放UDP 1812和1813端口。
1.4 认证协议选型建议
|
EAP方法 |
适用场景 |
特点 |
|
PEAP-MSCHAPv2 |
通用场景,对接AD/LDAP账号 |
部署成本低,服务端证书+账号口令 |
|
EAP-TLS |
高安全场景,公司自有终端 |
双向证书认证,抗钓鱼能力最强 |
|
EAP-TTLS |
对接老旧目录系统 |
隧道内可用PAP承载 |
本方案以PEAP-MSCHAPv2为主要认证方式,兼顾安全性与部署便利性。
二、FreeRADIUS服务器部署
2.1 安装FreeRADIUS
Ubuntu/Debian系统:
bash
sudo apt update
sudo apt install -y freeradius freeradius-utils freeradius-common
CentOS/RHEL/Rocky Linux系统:
bash
sudo dnf install -y freeradius freeradius-utils
安装完成后验证版本:
bash
radiusd -v
2.2 基本配置自检
修改配置前先执行配置检查:
bash
radiusd -XC
预期输出应包含“Configuration appears to be OK”。
2.3 配置RADIUS客户端(NAS)
编辑客户端配置文件:
bash
sudo nano /etc/freeradius/3.0/clients.conf
# CentOS路径为 /etc/raddb/clients.conf
添加华为AC的客户端条目:
conf
client huawei-ac {
ipaddr = 10.23.100.1
secret = Radius@2026!Secure
shortname = huawei-ac
nastype = other
}
如果AC有多个源地址,可按网段添加:
conf
client huawei-ac-subnet {
ipaddr = 10.23.103.0/24
secret = Radius@2026!Secure
shortname = huawei-ac-net
nastype = other
}
注意:secret必须与后续华为AC上配置的radius-server shared-key完全一致。
2.4 生成TLS证书
PEAP认证需要服务端证书。进入证书目录生成CA和服务器证书:
bash
cd /etc/freeradius/3.0/certs
# 删除旧的测试证书
rm -f *.pem *.der *.csr *.crt *.key *.pl2 serial* index.txt*
# 生成CA根证书(有效期10年)
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
-keyout ca.key -out ca.crt \
-subj “/C=CN/O=YourCompany/CN=YourCompany-RADIUS-CA”
# 生成RADIUS服务器证书
openssl req -newkey rsa:2048 -nodes -keyout server.key -out server.csr \
-subj “/C=CN/O=YourCompany/CN=radius.yourdomain.internal”
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-out server.crt -days 825 -sha256
关键提示:服务器证书的CN或SAN字段必须与终端连接时使用的地址匹配,否则终端会因证书校验失败而拒绝连接。如果需要通过IP地址连接,需在证书的SAN字段中包含该IP地址。FreeRADIUS也支持使用其内置的Makefile方式生成证书:编辑ca.cnf和server.cnf后执行make ca.pem和make server.pem即可。
2.5 配置EAP模块
编辑EAP模块配置文件:
bash
sudo nano /etc/freeradius/3.0/mods-available/eap
确保以下关键配置正确:
conf
eap {
default_eap_type = peap
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
tls-config tls-common {
private_key_file = ${certdir}/server.key
certificate_file = ${certdir}/server.crt
ca_file = ${certdir}/ca.crt
dh_file = ${certdir}/dh
random_file = /dev/urandom
ca_path = ${cadir}
cipher_list = “DEFAULT”
tls_min_version = “1.2”
}
peap {
tls = tls-common
default_eap_type = mschapv2
}
mschapv2 {
# 如果对接AD,需配置ntlm_auth
}
}
2.6 配置用户账号
方式一:本地文件认证(测试环境)
编辑用户文件:
bash
sudo nano /etc/freeradius/3.0/mods-config/files/authorize
添加测试用户:
conf
testuser Cleartext-Password := “Test@1234”
Service-Type = Framed-User,
Reply-Message := “Welcome, %{User-Name}”
方式二:MySQL数据库认证(生产环境)
安装MySQL模块后,在mods-available/sql中配置数据库连接信息,并将用户数据存储在radcheck、radreply等标准表中。需将mods-available/sql软链接到mods-enabled/目录以启用模块。
2.7 启动服务并验证
bash
sudo systemctl enable freeradius
sudo systemctl start freeradius
sudo systemctl status freeradius
使用调试模式验证(建议在配置阶段使用):
bash
sudo systemctl stop freeradius
sudo freeradius -X
看到“Ready to process requests”表示服务正常启动。
使用radtest工具进行本地验证:
bash
radtest testuser Test@1234 127.0.0.1 0 testing123
预期输出包含“Access-Accept”,表示认证成功。如果返回Access-Reject,请检查clients.conf中localhost的密钥是否为testing123。
三、华为AC配置(设备纳管与认证对接)
3.1 基础网络规划
以下配置在华为AC命令行界面完成。首先配置AP、AC和上层网络设备之间的二层互通。
bash
[HUAWEI] sysname AC
# 创建VLAN
[AC] vlan batch 100 101 103
# 配置AC连接AP的接口
[AC] interface GigabitEthernet 0/0/1
[AC-GigabitEthernet0/0/1] port link-type trunk
[AC-GigabitEthernet0/0/1] port trunk pvid vlan 100
[AC-GigabitEthernet0/0/1] port trunk allow-pass vlan 100 101
[AC-GigabitEthernet0/0/1] quit
# 配置管理VLAN接口(AP管理)
[AC] interface Vlanif 100
[AC-Vlanif100] ip address 10.23.100.1 24
[AC-Vlanif100] quit
# 配置业务VLAN接口
[AC] interface Vlanif 101
[AC-Vlanif101] ip address 10.23.101.1 24
[AC-Vlanif101] quit
# 配置AC与RADIUS通信VLAN接口
[AC] interface Vlanif 103
[AC-Vlanif103] ip address 10.23.103.254 24
[AC-Vlanif103] quit
3.2 配置DHCP服务器
bash
[AC] dhcp enable
# AP地址池(接口地址池方式)
[AC] interface Vlanif 100
[AC-Vlanif100] dhcp select interface
[AC-Vlanif100] dhcp server dns-list 8.8.8.8
[AC-Vlanif100] quit
# STA地址池
[AC] interface Vlanif 101
[AC-Vlanif101] dhcp select interface
[AC-Vlanif101] dhcp server dns-list 8.8.8.8
[AC-Vlanif101] quit
3.3 配置RADIUS服务器模板
创建RADIUS服务器模板,指定FreeRADIUS服务器的IP、端口和共享密钥:
bash
[AC] radius-server template freeradius-1
[AC-radius-freeradius-1] radius-server authentication 10.23.103.1 1812
[AC-radius-freeradius-1] radius-server accounting 10.23.103.1 1813
[AC-radius-freeradius-1] radius-server shared-key cipher Radius@2026!Secure
[AC-radius-freeradius-1] radius-server retransmit 2
[AC-radius-freeradius-1] radius-server source ip-address 10.23.103.254
[AC-radius-freeradius-1] quit
参数说明:radius-server source ip-address用于指定AC向RADIUS服务器发送请求时的源IP地址,确保FreeRADIUS的clients.conf中配置的IP与该源IP一致。
3.4 配置AAA认证方案
bash
[AC] aaa
# 创建认证方案
[AC-aaa] authentication-scheme wlan-auth
[AC-aaa-authen-wlan-auth] authentication-mode radius
[AC-aaa-authen-wlan-auth] quit
# 创建计费方案
[AC-aaa] accounting-scheme wlan-acct
[AC-aaa-accounting-wlan-acct] accounting-mode radius
[AC-aaa-accounting-wlan-acct] accounting realtime 15
[AC-aaa-accounting-wlan-acct] quit
# 创建认证域并绑定方案和服务器模板
[AC-aaa] domain example.com
[AC-aaa-domain-example.com] authentication-scheme wlan-auth
[AC-aaa-domain-example.com] accounting-scheme wlan-acct
[AC-aaa-domain-example.com] radius-server freeradius-1
[AC-aaa-domain-example.com] quit
[AC-aaa] quit
accounting realtime 15表示每15分钟上报一次计费信息,便于后续审计和在线用户统计。
3.5 配置802.1X接入模板和认证模板
bash
# 创建802.1X接入模板
[AC] dot1x-access-profile name wlan-dot1x
[AC-dot1x-access-profile-wlan-dot1x] dot1x authentication-method eap
[AC-dot1x-access-profile-wlan-dot1x] quit
# 创建认证模板,绑定802.1X接入模板和认证域
[AC] authentication-profile name wlan-auth-profile
[AC-authentication-profile-wlan-auth-profile] dot1x-access-profile wlan-dot1x
[AC-authentication-profile-wlan-auth-profile] access-domain example.com force
[AC-authentication-profile-wlan-auth-profile] quit
AC作为EAP中继模式,将终端的EAP报文转发给RADIUS服务器处理,兼容EAP-PEAP、EAP-TLS等多种认证方式。
3.6 测试AC与RADIUS服务器连通性
在AAA视图下使用测试命令验证AC与FreeRADIUS的通信:
bash
[AC] aaa
[AC-aaa] test-aaa testuser Test@1234 radius-template freeradius-1
预期输出:Info: Account test succeed.
如果测试失败,请检查:AC与FreeRADIUS服务器之间路由是否可达;共享密钥是否一致;FreeRADIUS的clients.conf中是否已添加AC的源IP;防火墙是否放行UDP 1812/1813。
四、WLAN业务配置(AP纳管与无线接入)
4.1 配置AP上线认证模式
bash
[AC] wlan
[AC-wlan-view] ap auth-mode mac-auth
4.2 手动添加AP
bash
[AC-wlan-view] ap-id 1
[AC-wlan-ap-1] ap-mac 00e0-fc12-3456
[AC-wlan-ap-1] ap-name AP-Floor1-01
[AC-wlan-ap-1] ap-group default
[AC-wlan-ap-1] quit
AP上电后通过DHCP获取IP地址,然后通过CAPWAP协议自动发现AC并上线。可以通过display ap all命令查看AP上线状态,确认AP状态为normal。
4.3 配置SSID模板
bash
[AC-wlan-view] ssid-profile name corp-ssid
[AC-wlan-ssid-prof-corp-ssid] ssid Corp-WiFi
[AC-wlan-ssid-prof-corp-ssid] quit
4.4 配置安全模板(WPA2-802.1X-AES)
bash
[AC-wlan-view] security-profile name corp-sec
[AC-wlan-sec-prof-corp-sec] security wpa2 dot1x aes
[AC-wlan-sec-prof-corp-sec] quit
4.5 配置VAP模板并绑定所有模板
bash
[AC-wlan-view] vap-profile name corp-vap
[AC-wlan-vap-prof-corp-vap] forward-mode tunnel
[AC-wlan-vap-prof-corp-vap] service-vlan vlan-id 101
[AC-wlan-vap-prof-corp-vap] ssid-profile corp-ssid
[AC-wlan-vap-prof-corp-vap] security-profile corp-sec
[AC-wlan-vap-prof-corp-vap] authentication-profile wlan-auth-profile
[AC-wlan-vap-prof-corp-vap] quit
关键步骤:VAP模板需绑定SSID模板、安全模板和认证模板,确保无线用户接入时触发802.1X认证。forward-mode tunnel表示隧道转发模式,数据流量经CAPWAP隧道集中到AC转发。
4.6 将VAP模板应用到AP组
bash
[AC-wlan-view] ap-group name default
[AC-wlan-ap-group-default] radio 0
[AC-wlan-ap-group-default-radio-0] vap-profile corp-vap wlan 1
[AC-wlan-ap-group-default-radio-0] quit
[AC-wlan-ap-group-default] radio 1
[AC-wlan-ap-group-default-radio-1] vap-profile corp-vap wlan 1
[AC-wlan-ap-group-default-radio-1] quit
[AC-wlan-ap-group-default] quit
[AC-wlan-view] quit
4.7 保存配置
bash
[AC] save
五、认证测试与验证
5.1 FreeRADIUS端验证
在FreeRADIUS服务器上启动调试模式,实时观察认证过程:
bash
sudo systemctl stop freeradius
sudo freeradius -X
5.2 终端连接测试
Windows终端连接SSID Corp-WiFi:
1. 选择WPA2-企业或WPA3-企业
2. 安全类型选择WPA2-企业
3. 加密类型选择AES
4. 认证方式选择PEAP
5. 内部认证选择MS-CHAPv2
6. 输入账号testuser,密码Test@1234
7. 如果服务器使用自签名证书,首次连接需确认证书
Android终端类似设置:EAP方法选择PEAP,阶段2认证选择MSCHAPV2。
5.3 认证成功验证
在FreeRADIUS调试输出中,应看到以下关键日志:
text
(0) Received Access-Request Id 0 from 10.23.103.254:xxxxx
(0) User-Name = “testuser”
(0) Sent Access-Challenge Id 0
…
(0) Sent Access-Accept Id 1
在AC上验证在线用户:
bash
[AC] display access-user access-type dot1x
[AC] display dot1x
5.4 使用eapol_test工具测试
eapol_test是wpa_supplicant提供的802.1X认证测试工具,可以在服务器端模拟完整的EAP认证过程,无需真实终端即可验证PEAP认证链路是否正常。
安装方式一(Ubuntu包管理器):
bash
sudo apt install eapoltest
安装方式二(从源码编译):
bash
sudo apt install -y git make gcc libssl-dev
git clone
cd eap-test-suite
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
# 脚本会自动编译eapol_test并安装依赖
配置测试文件peap-test.conf:
conf
network={
ssid=”Corp-WiFi”
key_mgmt=WPA-EAP
eap=PEAP
identity=”testuser”
password=”Test@1234″
phase1=”peaplabel=0″
phase2=”auth=MSCHAPV2″
}
执行测试:
bash
eapol_test -c peap-test.conf -s Radius@2026!Secure -a 10.23.103.1 -p 1812
该工具会输出完整的认证过程日志,包括EAP方法协商、TLS握手和最终认证结果(Access-Accept或Access-Reject)。
六、常见问题排查
6.1 认证失败排查步骤
AC侧排查:
bash
# 查看用户上线失败记录
[AC] display aaa online-fail-record mac-address xxxx-xxxx-xxxx
# 查看802.1X认证信息
[AC] display dot1x
# 查看在线用户信息
[AC] display access-user
# 查看RADIUS服务器模板状态
[AC] display radius-server template freeradius-1
# 实时调试RADIUS交互(生产环境谨慎使用)
[AC] debug radius all
[AC] terminal debugging
display aaa online-fail-record mac-address H-H-H命令可查看STA上线失败记录,输出中的User online fail reason字段会显示具体失败原因。
FreeRADIUS侧排查:
使用freeradius -X调试模式启动,观察完整的RADIUS报文交互过程。重点检查是否收到Access-Request、证书是否加载成功、用户是否在authorize文件中匹配到、EAP认证流程是否完整。
网络侧排查:
bash
# 在FreeRADIUS服务器上抓包
sudo tcpdump -i eth0 udp port 1812 -vv
sudo tcpdump -i eth0 udp port 1813 -vv
确认AC是否向FreeRADIUS发送了Access-Request。
6.2 常见问题速查表
|
问题现象 |
可能原因 |
排查方法 |
|
AC测试命令超时 |
共享密钥不一致或路由不通 |
检查clients.conf和AC的shared-key,确认网络连通性 |
|
终端弹出证书警告 |
使用自签名证书 |
终端信任CA证书或更换受信任证书 |
|
终端连接后反复弹出认证框 |
EAP方法不匹配 |
确认AC为EAP中继模式,FreeRADIUS的default_eap_type配置 |
|
AP无法上线 |
CAPWAP隧道建立失败 |
检查DHCP分配、AC的源接口配置和AP白名单 |
|
认证通过但无法获取IP |
业务VLAN配置错误 |
检查VAP模板的service-vlan和DHCP地址池 |
|
用户认证被拒绝 |
用户不在数据库中 |
检查authorize文件或数据库中的用户记录 |
|
FreeRADIUS日志出现 |
AC IP或网段未加入clients.conf |
在clients.conf中添加AC的源IP |
|
“Ignoring request from unknown client” |
|
|
|
FreeRADIUS日志出现 |
共享密钥不一致 |
检查AC和FreeRADIUS的密钥配置 |
|
“Received malformed packet” |
|
|
6.3 认证排错常用工具
- · AC侧:display aaa online-fail-record、display dot1x、trace object mac-address、debug radius all
- · FreeRADIUS侧:freeradius -X(调试模式)、radtest(本地测试)、eapol_test(EAP测试)
- · 网络层:ping、traceroute验证AC与RADIUS服务器之间路由可达;tcpdump抓包确认报文交互
七、生产环境优化与进阶配置
7.1 基础优化建议
1. 共享密钥复杂化:避免使用testing123、admin123等弱密钥,使用包含大小写字母、数字和特殊字符的强密钥。
2. 证书规范化:生产环境建议使用企业CA签发的证书,确保证书CN/SAN与终端访问的地址匹配,避免终端频繁确认证书。
3. 防火墙放行:确保AC到FreeRADIUS的UDP 1812、1813可达。
4. 日志轮转:启用FreeRADIUS日志轮转策略,防止日志文件过大。
5. 监控告警:配置对FreeRADIUS服务状态和认证成功率的监控。
6. 定期备份:备份FreeRADIUS的配置文件和证书。
7. 安全加固:生产环境中关闭调试模式,限制客户端IP访问范围。
8. 高可用部署:在AC上配置主备RADIUS服务器模板,提高认证可用性。
7.2 动态VLAN下发
通过FreeRADIUS在Access-Accept报文中下发VLAN属性,实现按用户组分配业务VLAN,按部门隔离网络流量。
RADIUS属性要求:动态VLAN下发必须同时使用以下三个标准RADIUS属性,缺一不可:
|
属性 |
属性号 |
必须设置的值 |
说明 |
|
Tunnel-Type |
064 |
13 |
表示VLAN类型 |
|
Tunnel-Medium-Type |
065 |
6 |
表示IEEE-802介质 |
|
Tunnel-Private-Group-ID |
081 |
VLAN ID |
目标VLAN编号 |
FreeRADIUS用户文件配置示例(mods-config/files/authorize):
conf
# 财务部用户 → VLAN 101
user_finance Cleartext-Password := “Fin@2026”
Tunnel-Type = VLAN,
Tunnel-Medium-Type = IEEE-802,
Tunnel-Private-Group-Id = 101
# 技术部用户 → VLAN 102
user_tech Cleartext-Password := “Tech@2026”
Tunnel-Type = VLAN,
Tunnel-Medium-Type = IEEE-802,
Tunnel-Private-Group-Id = 102
华为AC侧:AC收到Access-Accept报文后,会自动解析上述三个属性并将用户动态切换到指定VLAN。需注意AC上必须已创建对应的VLAN,否则VLAN授权将失效。
基于LDAP组的动态VLAN:结合LDAP模块,可以利用LDAP-Group实现按用户角色自动分配VLAN。例如通过if条件判断用户所属组并返回不同的Tunnel-Private-Group-Id值,从而实现不同角色的权限分离。
7.3 AD/LDAP对接
使用企业目录账号替代本地用户文件,实现统一认证管理。
启用LDAP模块:
bash
sudo ln -s /etc/freeradius/3.0/mods-available/ldap /etc/freeradius/3.0/mods-enabled/ldap
编辑LDAP模块配置(mods-enabled/ldap):
conf
ldap {
server = “ad.example.com”
port = 389
identity = “cn=radius-bind,ou=ServiceAccounts,dc=example,dc=com”
password = “BindPassword”
base_dn = “dc=example,dc=com”
user {
base_dn = “ou=Users,${..base_dn}”
filter = “(sAMAccountName=%{%{Stripped-User-Name}:-%{User-Name}})”
scope = sub
}
group {
base_dn = “ou=Groups,${..base_dn}”
filter = “(objectClass=group)”
scope = sub
name_attribute = cn
membership_filter = “(|(member=%{control:Ldap-UserDn})(memberUid=%{%{Stripped-User-Name}:-%{User-Name}}))”
}
}
说明:在Microsoft Active Directory环境中,建议使用rlm_winbind进行认证,使用rlm_ldap进行组成员资格检查,因为winbind协议不支持LDAP可用的完整组检查范围。如果使用Samba的ntlm_auth对接AD,在mods-available/mschap中配置ntlm_auth路径即可。
在authorize和authenticate部分启用LDAP:编辑sites-available/default,在authorize部分的eap之后添加ldap,在authenticate部分按需添加。
7.4 日志纳管与后续对接
1. 日志接入SIEM/监控平台:将FreeRADIUS日志接入ELK、Graylog或现有监控告警平台。
2. 关键字告警:对radius.log做关键字告警,例如Reject、Ignoring request、malformed packet。
3. 计费数据统计:通过RADIUS Accounting统计在线用户数、上下线时间、流量。
4. 多AC管理:如果有多台AC,在FreeRADIUS的clients.conf中逐个添加AC的IP或网段。
5. 性能优化:对于大规模部署,考虑启用MySQL后端存储用户数据,并配置FreeRADIUS缓存策略。
7.5 eapol_test自动化测试
利用前文安装的eap-test-suite工具,可实现自动化EAP认证测试:
bash
# 测试PEAP认证
python3 -m eap_test_suite.cli –eap PEAP
# 启用调试模式
python3 -m eap_test_suite.cli –debug
编辑config/config.json可配置RADIUS服务器地址、端口、共享密钥和测试凭据,方便批量回归测试。
本指南覆盖了从FreeRADIUS安装配置、华为AC/AP对接、无线用户802.1X认证到AP上线纳管、在线用户验证、动态VLAN下发和AD/LDAP对接的完整流程。实际部署时,请将示例IP、VLAN、密钥、SSID和域名替换为现网规划值。