FreeRADIUS + 华为AC/AP + 802.1X/WPA2-Enterprise 无线认证对接部署完整指南 – Johny_Zhao


本指南部署方案,按“规划 → 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

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:

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和域名替换为现网规划值。

 



Source link

By 政権

Leave a Reply

Your email address will not be published. Required fields are marked *