本教程将从核心概念讲起,然后分两部分进行详细讲解:

- 服务器端配置:以最常用的开源认证服务器 FreeRADIUS 为例,配合网络认证功能。
- 客户端配置:分别讲解 Windows、macOS、Linux (NetworkManager) 和 Android/iOS 设备如何连接。
第一部分:核心概念理解
在开始配置之前,必须先理解几个关键概念,否则会一头雾水。
WPA-Enterprise vs. WPA-Personal (WPA2-PSK)
-
WPA-Personal (WPA2-PSK):
- 认证方式:预共享密钥。
- 工作原理:所有用户共享同一个密码(密钥),路由器/AP 会用这个密钥与所有设备进行握手验证。
- 优点:配置简单。
- 缺点:
- 密码一旦泄露,所有人都无法连接,因为必须更换密钥并通知所有用户。
- 无法区分用户,无法为不同用户设置不同的网络策略(如访客网络、员工网络、限制访问等)。
- 密码管理困难,用户离职或换人时,无法单独撤销其权限。
-
WPA-Enterprise (802.1X/EAP):
- 认证方式:基于端口的访问控制,使用扩展认证协议。
- 工作原理:每个用户拥有自己独立的用户名和密码,当设备连接时,它会将凭据发送到一个认证服务器,服务器验证身份后,通知 AP/路由器“放行”该设备。
- 优点:
- 高度安全:凭据是加密传输的,且每个用户独立,一个密码泄露不影响他人。
- 集中管理:所有用户账户和策略都在服务器上统一管理。
- 权限灵活:可以为不同用户或用户组分配不同的 VLAN、带宽限制、访问策略等。
- 缺点:
- 配置复杂:需要搭建和维护一个认证服务器。
- 成本较高:通常需要一台专用服务器或云服务器。
核心组件
- 客户端:想要连接 Wi-Fi 的设备,如你的笔记本电脑、手机。
- 无线接入点:提供 Wi-Fi 信号的设备,如企业级 AP 或开启了 WPA-Enterprise 的家用路由器。
- 认证服务器:整个系统的核心,它负责验证客户端的用户名和密码,最常用的是 FreeRADIUS 服务器。
- 身份验证方法:即 EAP 协议,EAP 是一个“框架”,里面包含了多种具体的认证方法。选择哪种 EAP 方法至关重要,因为它决定了安全性和兼容性。
常见的 EAP 认证方法
| EAP 方法 | 全称 | 特点 | 推荐场景 |
|---|---|---|---|
| PEAP | Protected EAP | 最常用,内部使用 MS-CHAPv2 或 EAP-TLS 进行认证,外部由 TLS 服务器证书加密。 | 强烈推荐,兼容性好,安全性高,是目前企业部署的主流方案。 |
| EAP-TLS | EAP with Transport Layer Security | 最安全,客户端和服务器都需要安装数字证书进行双向认证。 | 对安全性要求极高的环境,如政府、金融,配置最复杂。 |
| EAP-TTLS | Tunneled Transport Layer Security | 类似 PEAP,内部可以使用 PAP、CHAP、MS-CHAPv2、EAP 等,外部由 TLS 加密。 | 兼容性非常好,尤其适合旧设备。 |
| LEAP | Lightweight EAP | 思科专有。已被证明不安全,容易受到攻击。 | 强烈不推荐,仅用于维护老旧设备。 |
本教程将以最主流的 PEAP (with MS-CHAPv2) 组合为例进行讲解,因为它在安全性和易用性之间取得了很好的平衡。

第二部分:服务器端配置 (以 FreeRADIUS + Ubuntu 为例)
这里我们模拟一个典型的企业环境:一台 Ubuntu 服务器作为 RADIUS 服务器,一台 AP 或路由器作为认证点。
步骤 1:安装 FreeRADIUS 和相关工具
在 Ubuntu 服务器上执行:
sudo apt update sudo apt install freeradius freeradius-mysql freeradius-utils
安装过程中,可能会询问是否自动配置数据库,选择“否”,我们先手动配置。
步骤 2:配置用户数据库
FreeRADIUS 默认使用 /etc/raddb/users 文件作为用户列表,为了更灵活的管理(例如添加用户组、VLAN 等),我们建议使用数据库,这里以 MySQL/MariaDB 为例。

-
安装数据库服务器:
sudo apt install mariadb-server mariadb-client
-
创建数据库和用户:
sudo mysql
在 MySQL shell 中执行:
CREATE DATABASE radius; CREATE USER 'radius'@'localhost' IDENTIFIED BY 'your_strong_password'; GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost'; FLUSH PRIVILEGES; EXIT;
-
导入数据库结构: FreeRADIUS 提供了现成的 SQL 结构文件。
sudo mysql radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql
-
配置 FreeRADIUS 连接 MySQL: 编辑
/etc/freeradius/3.0/mods-available/sql文件,找到driver = "rlm_sql_mysql"部分,取消注释并修改连接信息:driver = "rlm_sql_mysql" # ... server = "localhost" login = "radius" password = your_strong_password radius_db = "radius"
-
启用 SQL 模块:
sudo ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/
-
添加一个测试用户: 我们使用
radclient命令行工具来添加用户,它会自动处理密码哈希。echo 'User-Name="testuser",User-Password="testpass",Cleartext-Password:="testpass"' | radclient -x localhost auth testing123
这条命令会在
radcheck表中创建一个用户testuser,密码为testpass。
步骤 3:配置 FreeRADIUS
-
启用 PEAP 和 MS-CHAPv2: 编辑
/etc/freeradius/3.0/eap.conf文件。 确保peap和mschapv2模块是启用状态(authorize = yes)。 -
修改默认客户端: 编辑
/etc/freeradius/3.0/clients.conf文件,这里定义了哪些设备可以请求认证。 假设你的 AP 的 IP 地址是168.1.100,共享密钥是my_super_secret_radius_key:client localhost { ipaddr = 127.0.0.1 secret = testing123 require_message_authenticator = no nas_type = other } # 添加你的 AP 或路由器作为客户端 client my_ap { ipaddr = 192.168.1.100 secret = my_super_secret_radius_key } -
启用
eap和files模块: 编辑/etc/freeradius/3.0/sites-available/default和/etc/freeradius/3.0/sites-available/inner-tunnel。 在authorize和authenticate节点中,确保eap和files模块存在且顺序正确。files应该在eap之前。
步骤 4:测试 FreeRADIUS 服务器
在服务器上运行 radtest 命令来模拟客户端认证:
radtest testuser testpass localhost 0 testing123
如果看到 Access-Accept,恭喜你,服务器配置成功了!
步骤 5:配置 AP/路由器
这一步因设备品牌而异(如 Cisco, Aruba, Ubiquiti, OpenWRT, pfSense 等),但核心配置项是一样的:
- RADIUS 服务器 IP:填入你的 FreeRADIUS 服务器的 IP 地址。
- RADIUS 共享密钥:填入你在
clients.conf中设置的my_super_secret_radius_key。必须完全一致! - 认证端口:通常是
1812(认证) 和1813(计费)。 - 认证协议:选择
PEAP或EAP。 - EAP 身份验证方法:选择
MSCHAPv2或EAP-MSCHAPv2。 - 加密:选择
AES。 - SSID 名称:设置你的 Wi-Fi 名称。
第三部分:客户端配置
你的无线网络已经准备就绪,让我们在客户端设备上进行连接。
通用连接步骤
所有客户端的连接逻辑都类似:
- 选择你的 WPA-Enterprise Wi-Fi 网络。
- 在安全设置中,选择 WPA2/WPA3 Enterprise 或 1X。
- 认证方法:选择 PEAP。
- EAP 类型:选择 MSCHAPv2 (PEAP 下有此选项)。
- 输入你的 用户名 和 密码。
- 点击连接。
Windows 10 / 11
- 点击任务栏右下角的网络图标,选择你的 WPA-Enterprise 网络,然后点击“连接”。
- 在弹出的窗口中,勾选“连接后显示其他选项”。
- 点击“安全”或“网络和 Internet 设置”下的“更改连接选项”。
- 在“安全”选项卡中:
- 选择网络安全类型:WPA2-Enterprise (如果你的 AP 支持 WPA3,可选 WPA3-Enterprise)。
- 在“验证方法”下,点击“设置”。
- 在新的窗口中:
- 选择网络验证方法:Microsoft: 受保护的 EAP (PEAP)。
- 取消勾选“验证服务器证书”(在测试环境中可以这样做,生产环境必须勾选并导入正确的 CA 证书)。
- 点击“设置”按钮,勾选“启用快速重新连接”。
- 点击“确定”。
- 返回到主网络连接窗口,点击“连接”。
- 系统会弹出窗口要求输入用户名和密码,输入你在 RADIUS 服务器上创建的凭据(如
testuser/testpass)。 - 点击“确定”,等待连接成功。
macOS
- 点击屏幕右上角的 Wi-Fi 图标,选择“打开网络偏好设置”。
- 点击左下角的 号,添加一个新服务。
- 接口:选择
Wi-Fi。 - 网络名称:输入你的 SSID。
- 安全:选择 WPA2/WPA3 企业级。
- 在“认证”部分:
- 认证:选择 TLS。
- 重要提示:macOS 的 TLS 对应的是 EAP-TLS,不是 PEAP,要连接 PEAP 网络,你需要:
- 导入一个有效的用户证书到你的钥匙串。
- 或者,在高级设置里尝试寻找 PEAP 选项(部分 macOS 版本支持)。
- 如果没有 PEAP 选项,最简单的方法是使用 Windows Subsystem for Android 或虚拟机来测试。
- (替代方案,如果支持 PEAP):如果下拉菜单中有 PEAP 选项,选择它,然后在“用户名”和“密码”字段中填入你的凭据。
- 点击“应用”,然后尝试连接。
注意:macOS 对 PEAP 的支持有时不如 Windows,可能会遇到兼容性问题。
Linux (使用 NetworkManager)
- 点击桌面右上角的网络图标,选择“编辑连接...”。
- 点击“添加”,选择
Wi-Fi,然后点击“创建”。 - 在“常规”选项卡中:
- 名称:给你的连接起个名字。
- SSID:输入你的 Wi-Fi 名称。
- 模式:Infrastructure。
- BSSID:可选。
- 自动连接:可选。
- 切换到“Wi-Fi 安全”选项卡:
- 安全性:选择 WPA & WPA2 企业级。
- 认证:选择 TLS。
- 同样的问题:TLS 对应 EAP-TLS,要使用 PEAP:
- 你可能需要安装
network-manager-peap或network-manager-strongswan等插件。 - 或者,直接编辑
/etc/network/interfaces或使用wpa_supplicant进行更底层的配置。
- 你可能需要安装
- 切换到“802.1x 安全”选项卡:
- 如果选择了 TLS,这里需要指定 CA 证书、客户端证书和私钥。
- 如果系统支持 PEAP 并在认证菜单中选择了它,这里会要求输入用户名和密码。
Android
- 进入
设置>网络和互联网>Wi-Fi。 - 长按你的目标网络,选择“修改网络”。
- 在“密码”或“安全”选项中,选择 WPA2/WPA3 企业级。
- 在“EAP 方法”中,选择 PEAP。
- 在“Phase 2 认证”中,选择 MSCHAPV2。
- 在“身份”字段中,输入你的用户名。
- 在“密码”字段中,输入你的密码。
- (可选)如果服务器有自签名证书,可能需要勾选“不验证服务器证书”。
- 点击“保存”,然后连接网络。
iOS
- 进入
设置>Wi-Fi。 - 点击你的目标网络旁边的
i图标。 - 在“配置代理”下,选择“自动”。
- 滚动到“身份验证”部分:
- 在“EAP”下,选择 PEAP。
- 在“验证”和“密码”下,输入你的用户名和密码。
- 在“客户端证书”下,选择“无”。
- 点击“完成”,然后返回 Wi-Fi 列表,尝试连接。
总结与排错
-
连接失败?
- 首先检查服务器端:在 FreeRADIUS 服务器上运行
freeradius -X启用调试模式,然后尝试连接客户端,日志会告诉你失败的原因(如用户名密码错误、客户端配置错误、数据库连接失败等)。 - 检查客户端凭据:确保用户名和密码完全正确,区分大小写。
- 检查共享密钥:确保 AP/路由器和 RADIUS 服务器上的
secret完全一致。 - 检查网络连通性:确保客户端能访问到 RADIUS 服务器的
1812端口。 - 检查时间同步:RADIUS 服务器和客户端的时间必须基本同步,否则证书验证会失败。
- 首先检查服务器端:在 FreeRADIUS 服务器上运行
-
最佳实践:
- 使用强密码:为每个用户设置复杂的密码。
- 启用证书验证:在生产环境中,务必为 RADIUS 服务器配置一个受信任的 SSL 证书,并在客户端上勾选“验证服务器证书”,这可以防止中间人攻击。
- 定期备份:定期备份你的 RADIUS 数据库和配置文件。
这份教程涵盖了 WPA-Enterprise 从理论到实践的完整流程,虽然初始配置有些繁琐,但一旦搭建完成,你将拥有一个强大、安全且易于管理的无线网络。
