本指南部署方案,按"规划 → 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> system-view
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:
-
选择WPA2-企业或WPA3-企业
-
安全类型选择WPA2-企业
-
加密类型选择AES
-
认证方式选择PEAP
-
内部认证选择MS-CHAPv2
-
输入账号testuser,密码Test@1234
-
如果服务器使用自签名证书,首次连接需确认证书
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 https://github.com/krisarmstrong/eap-test-suite.git
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 基础优化建议
-
共享密钥复杂化 :避免使用testing123、admin123等弱密钥,使用包含大小写字母、数字和特殊字符的强密钥。
-
证书规范化 :生产环境建议使用企业CA签发的证书,确保证书CN/SAN与终端访问的地址匹配,避免终端频繁确认证书。
-
防火墙放行 :确保AC到FreeRADIUS的UDP 1812、1813可达。
-
日志轮转 :启用FreeRADIUS日志轮转策略,防止日志文件过大。
-
监控告警 :配置对FreeRADIUS服务状态和认证成功率的监控。
-
定期备份 :备份FreeRADIUS的配置文件和证书。
-
安全加固 :生产环境中关闭调试模式,限制客户端IP访问范围。
-
高可用部署 :在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 日志纳管与后续对接
-
日志接入SIEM/监控平台 :将FreeRADIUS日志接入ELK、Graylog或现有监控告警平台。
-
关键字告警 :对radius.log做关键字告警,例如Reject、Ignoring request、malformed packet。
-
计费数据统计 :通过RADIUS Accounting统计在线用户数、上下线时间、流量。
-
多AC管理 :如果有多台AC,在FreeRADIUS的clients.conf中逐个添加AC的IP或网段。
-
性能优化 :对于大规模部署,考虑启用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和域名替换为现网规划值。