802.1X、FreeRADIUS 和动态 VLAN:完整指南

最后更新: 五月7 ,2026
  • 802.1X 与 FreeRADIUS 结合使用,允许您使用标准 RADIUS 属性分配动态 VLAN。
  • Omada 和 ExtremeCloud IQ 等控制器与 FreeRADIUS 集成良好,可以对有线用户和 Wi-Fi 用户进行划分。
  • LDAP 查询错误、不安全的 EAP 方法或配置错误的交换机会导致 VLAN 分配失败。
  • 良好的策略规划和测试可以防止 RDP、旧设备和混合环境出现问题。

802.1X FreeRADIUS VLAN方案

如果您管理有线或 Wi-Fi 网络,并且希望在不采用昂贵的网络访问控制 (NAC) 解决方案的情况下,按用户类型隔离流量,那么有效利用802.1X、FreeRADIUS 和动态 VLAN 分配是您可以采取的最强大的措施之一,而且值得了解它如何与零信任架构相契合。正确实施后,您可以根据设备的身份、来源或所属目录组来决定每个设备连接到哪个网络,而无需到处创建 SSID 或绑定到单一供应商。

本文将详细解析整个流程:802.1X 的作用、典型的 FreeRADIUS 配置、VLAN 的 RADIUS 属性、与 Wi-Fi 控制器和交换机的集成、实际应用案例(Omada、ExtremeCloud IQ、传统交换机)、常见问题,甚至包括 Azure AD 和 LDAP 中格式错误的属性等高级主题。我们的目标是让您在阅读完本文后,能够清晰、实用地理解相关知识,并将所学内容应用到您自己的基础架构中,无论规模大小。

802.1X 和动态 VLAN:基本概念和组件

简而言之,802.1X 标准就像网络的守门人:设备只有通过身份验证,端口或 Wi-Fi 才能允许其访问合法网络。为了实现真正的网络分段,它与使用 RADIUS 属性的动态 VLAN 分配相结合,服务器会在客户端完成身份验证后决定将其分配到哪个 VLAN。

在任何 802.1X 部署中,无论使用 Omada、ExtremeCloud IQ 还是通用交换机,始终都会出现三个关键组件:

  • 祈求者:想要连接的客户端(笔记本电脑、手机、“就绪”打印机等)。
  • 验证器:控制访问的网络设备(交换机、AP 或 Wi-Fi 控制器)并与 RADIUS 服务器通信。
  • 身份验证服务器通常是 半径通常使用 FreeRADIUS,它验证凭据并决定策略(允许、拒绝、放入某个 VLAN 或其他 VLAN)。

动态 VLAN 的奥妙在于Access-Accept 协议中的 RADIUS 属性。对于 VLAN,几乎所有厂商都理解这种类似隧道属性的组合:

  • 隧道类型 = VLAN
  • 隧道介质类型 = IEEE-802
  • 隧道私有组 ID =“VLAN ID”(通常是 1 到 4095 之间的数字,尽管它以文本形式发送)

当交换机或 AP 收到具有这些属性的 Access-Accept 时,如果它支持 802.1X 和动态 VLAN,它会将端口或 Wi-Fi 会话分配给RADIUS 指示的 VLAN,忽略端口的默认 VLAN 或 SSID(除非 RADIUS 没有发送任何内容,在这种情况下,它会应用其本地配置)。

FreeRADIUS 动态 VLAN 配置

FreeRADIUS 是典型的开源 RADIUS 服务器。它可以安装在任何配置适中的 Linux 系统上,甚至像 NanoPi NEO 或 Raspberry Pi 这样的小型硬件上,并且通过适当的配置,它可以应对非常苛刻的环境。对于动态 VLAN,有两个关键方面:定义用户/组以及在处理链中正确放置模块。

在简单的部署中,可以直接在FreeRADIUS用户文件中定义测试用户,并为其分配应使用的 VLAN。在 Debian/Ubuntu 系统中,该文件通常位于/etc/freeradius/3.0/users,VLAN条目如下所示(已简化和重写):

employee10 明文密码 := "key10" 服务类型 := Framed-User,隧道类型 := VLAN,隧道介质类型 := IEEE-802,隧道私有组 ID := "10" employee20 明文密码 := "key20" 服务类型 := Framed-User,隧道类型 := VLAN,隧道介质类型 := IEEE-802,隧道私有组 ID := "20"

在这种结构下,FreeRADIUS 会在收到 Access-Accept 请求后返回三个隧道属性,以便NAS(交换机或 AP)能够根据用户将客户端置于 VLAN 10 或 VLAN 20 中。关键在于网络设备必须支持相应的 RFC 规范,并在配置接入 VLAN 之前遵循这些属性。

在某些情况下,例如与 ExtremeCloud IQ 集成时,这些属性必须准确地在Access-Accept 语句中发送,而不能仅仅作为“隧道”属性在 EAP 流程的其他阶段发送。在默认配置中,FreeRADIUS 可能会先处理eap模块,然后再处理files模块(读取用户文件)。这会导致控制器在适当的时间错过这些属性。

已被证明行之有效的实用解决方案是修改`/etc/freeradius/3.0/ sites-enabled/default` 文件,将`files`模块移至`authorize`代码块内的`eap`之前。这样,FreeRADIUS 会先加载静态用户属性(包括 VLAN),然后再处理 EAP,从而在构建最终的 `Access-Accept` 请求时,隧道属性会包含在控制器期望的位置。

  脚本编写和系统加固:服务器强化完整指南

另一个建议的调整是禁用一些安全性较低的 EAP 方法,例如EAP-MD5,这些方法原本就不适用于生产环境。通过编辑文件`/etc/freeradius/ 3.0/mods-enabled/eap`,注释掉或删除 MD5 部分,FreeRADIUS 将停止提供该功能。建议您将配置重点放在更可靠的方法上,例如EAP-TLS(证书)或使用 MSCHAPv2 的 PEAP。

使用 Omada 进行 VLAN 分配:内部 RADIUS 和外部 FreeRADIUS

TP-Link 的 Omada 生态系统(控制器 + 交换机 + AP)将 802.1X 与动态 VLAN 完美集成,既可使用其内部 RADIUS 协议,也可委托给外部 FreeRADIUS 协议。这是一个非常直观的例子,因为整个工作流程清晰可见。

要使用 Omada 控制器内置的 RADIUS 功能,通常需要遵循三个步骤。首先,在控制器的全局菜单中,通过指定 IP 地址(控制器自身的 IP 地址)并激活“隧道应答”选项来启用集成 RADIUS功能,以便将隧道属性正确发送到接入设备。

然后,进入特定站点后,依次点击“设置”>“配置文件”>“RADIUS配置文件”,编辑配置文件并创建内部RADIUS用户。Omada允许您为每个用户设置名称、密码和VLAN ID,这样,当该用户进行身份验证时,控制器会将VLAN属性直接返回给交换机或AP,而无需经过外部服务器。

最后,在“设置”>“身份验证”>“802.1X”中,启用 802.1X,选择内部 RADIUS 配置文件,并显式启用“VLAN 分配”选项。在同一部分中,选择需要进行 802.1X 身份验证的交换机端口。保存后,连接到这些端口的任何设备都需要进行身份验证,如果该帐户已分配 VLAN ID,则会自动将其分配到该 VLAN 中。

如果我们希望将所有功能集中在一个外部 FreeRADIUS 服务器上,Omada 完全支持这种方案。第一步是编辑FreeRADIUS 服务器上的clients.conf文件,将控制器(或交换机/AP 所在的地址范围)授权为 RADIUS 客户端,并指定 IP 地址或子网以及共享密钥,稍后我们将在 Omada 中配置该密钥。

接下来,返回 Omada,依次选择“设置”>“配置文件”>“RADIUS 配置文件” ,创建一个外部RADIUS 配置文件。在该配置文件中,输入 FreeRADIUS IP 地址、认证端口(通常为 1812)和共享密码。在控制器的 802.1X 设置中,选择此外部配置文件并重新启用VLAN 分配,标记要保护的端口或 SSID。

还可以从控制器本身进行进一步验证:在“工具”>“终端”中,打开已启用 802.1X 的交换机的控制台,并运行命令show dot1x auth-state。如果一切正常,您将看到已认证的端口和 RADIUS 分配的 VLAN(例如,端口 1/0/1 已认证并关联到 VLAN 2)。

使用 FreeRADIUS 和 ExtremeCloud IQ 在 Wi-Fi 上实现动态 VLAN

另一个非常全面的例子是ExtremeCloud IQ (XIQ)管理的 Wi-Fi 网络,它使用 FreeRADIUS 作为认证服务器。在这种情况下,动态 VLAN 主要根据 FreeRADIUS 返回的隧道属性分配给 Wi-Fi 客户端。

首先,FreeRADIUS 准备像以前一样在 Access-Accept 中发送这三个属性:/etc/freeradius/3.0/users中的条目,其中包含用户及其 VLAN,以及sites-enabled/default中的设置,以便在eap之前处理文件模块,因为 XIQ 期望 Accept 中完全包含这些属性。

强烈建议禁用 EAP-MD5,并使用PEAP/EAP-TLS等方法。修改 EAP 配置文件后,请使用 ` systemctl restart freeradius` 命令重启服务以应用更改。之后,服务器即可响应由 XIQ 管理的接入点发送的请求。

在 Extreme 云平台方面,有两种相关的帐户类型:免费的Connect 帐户,允许对最多 10 台设备进行基本管理,但不支持动态 VLAN 的高级分类规则​​;以及Pilot版本,提供 90 天的试用期,并启用基于 RADIUS 属性的完整配置文件和规则集。

使用 Pilot 帐户,从“配置 > 网络策略”菜单创建一个新的网络策略,为其命名,并为简化操作选择“仅限 Wi-Fi”。在第二步中,定义 SSID,通常设置为使用 WPA2 或 WPA3 的企业网络,并关联一个RADIUS 组。创建此组时,将 FreeRADIUS 添加为外部服务器,并指定其 IP 地址、密钥和端口 1812/1813。

  WiFi 7:新标准的含义、特性和改进

接下来,配置用户配置文件,实际上,这些配置文件是与不同 VLAN(例如 VLAN10 和 VLAN20)关联的访问配置文件。对于 RADIUS 未返回隧道属性的客户端,将分配一个默认配置文件;但对于动态 VLAN,则根据Tunnel-Private-Group-ID值和其他 RADIUS 属性定义分配规则。

规则很简单:“如果来自 Accept 请求的 Tunnel-Private-Group-ID 为 10,则分配用户配置文件 VLAN 10”;如果为 20,则分配用户配置文件 VLAN 20,依此类推。ExtremeCloud IQ 在实践中将这些规则转化为将客户端放置在与 FreeRADIUS 发送的属性匹配的 VLAN上。

最后,您需要在AP的有线侧授予这些VLAN访问权限。具体操作是在XIQ中调整AP配置文件,确保上行链路端口允许所有已配置的VLAN,并保持原生VLAN(通常为VLAN 1)。保存所有设置并将网络策略应用到AP后,您可以使用XIQ集成的RADIUS测试工具来验证FreeRADIUS是否可访问,以及服务器是否为每个用户返回预期的VLAN属性。

Omada SDN 与 FreeRADIUS:有线和无线 VLAN

Omada 的 SDN 解决方案还允许您使用 FreeRADIUS 等外部 RADIUS 服务,在有线和无线网络中同时分配动态 VLAN 。这样就无需创建多个不同的 SSID 或在交换机端口上使用静态 PVID。

典型的网络拓扑结构包括 Omada 控制器、EAP 接入点、JetStream 交换机以及运行在 Linux 系统上的 FreeRADIUS 服务器。为了允许网络设备向服务器发送身份验证请求,需要编辑clients.conf文件,将客户端地址设置为 Omada 网络范围(例如 192.168.0.0/24)并设置共享密码。

接下来,在用户文件中设置账户,例如定义两个用户:一个用于 VLAN10,另一个用于 VLAN20,并分别设置它们的隧道类型 (Tunnel-Type)、隧道介质类型 (Tunnel-Medium-Type) 和隧道私有组 ID (Tunnel-Private-Group-Id) 属性。在 WPA-Enterprise 中,通常还需要修改EAP 配置文件,以使方法适应客户端类型(例如,Windows 笔记本电脑使用 EAP-PEAP)。

在 Omada 控制器的身份验证部分,创建一个指向 FreeRADIUS 的RADIUS 配置文件,并选择“为无线网络启用 VLAN 分配”选项。这样可以确保当客户端通过 WPA-Enterprise 进行身份验证时,Omada 将查询 RADIUS 服务器并将设备放置在服务器返回的 VLAN 中,而不是 SSID 的静态 VLAN 中。

此外,还需要在“设置”>“有线网络”>“局域网”中定义网络的 VLAN 接口,例如,创建两个逻辑接口分别对应 VLAN10 和 VLAN20,并为其配置各自的 IP 网关。这样,当客户端位于 VLAN10 时,它将获得该 VLAN 地址范围内的 IP 地址;VLAN20 也遵循同样的规则。

在无线方面,我们使用WPA-Enterprise 协议创建 SSID ,并指向 RADIUS 配置文件。例如,当客户端连接并验证身份时,如果使用 test10,则会从 VLAN 10 获取 IP 地址;如果使用 test20,则会被分配到 VLAN 20,而无需为每种情况创建特定的 SSID。

有线侧的逻辑类似,但采用基于端口的 802.1X协议。在控制器的相应部分启用 802.1X,选择“基于端口”类型,激活“VLAN 分配”,并标记需要身份验证的端口。然后,将端口配置文件应用于这些端口,添加 VLAN10 和 VLAN20 作为未标记网络,并确保将 802.1X 控制模式设置为“自动”,以便交换机在检测到客户端时自动发起协商。

因此,通过一个 RADIUS 配置和几个配置文件,Omada SDN 可以确保有线用户和 Wi-Fi 用户都能根据其凭据进入相应的 VLAN,而无需创建多个网络或手动调整每个端口的配置。

实用示例、常见错误和配置技巧

使用 FreeRADIUS 和动态 VLAN 并非一帆风顺:从实验室测试迁移到实际环境时,会反复出现一些问题,尤其是在处理LDAP/AD 目录、用户名格式和复杂策略时。因此,良好的网络安全风险管理有助于减少安全事件的发生。

  夜间关闭路由器的好处:误区、风险以及何时值得这样做

当服务器使用属性构建 LDAP 查询时,会发生一种非常典型的故障。 %{用户名} 它以 RADIUS 协议的形式到达。在许多 Windows 系统中,格式为: 域\用户其中反斜杠被编码为 5c如果 LDAP 模板是用以下方式构建的: uid=%{User-Name}生成的查询语句大致如下: uid=DOMINIO\5cusuario这很少能与 LDAP 树中的实际 uid 匹配,返回零结果。

这意味着目录中找不到用户的属性,包括要映射的VLAN 或组值。因此,服务器不会添加 Tunnel-Private-Group-Id,客户端仍保留在交换机或 AP 的默认 VLAN 上。这种模式在 FreeRADIUS 日志中清晰可见:使用 uid“domain\5user”的 LDAP 查询,但搜索结果为空。

已成功应用的实用解决方案是将FreeRADIUS 配置中 LDAP 查询模板里的%{User-Name}替换为%{Stripped-User-Name} ,例如:

if ("%{ldap:ldap:///dc=example,dc=com?uid?sub?(|(uid=%{Stripped-User-Name})(macAddress=%{Calling-Station-Id}))}") { ... }

这样,FreeRADIUS 就使用不带域名或斜杠的“干净”用户名,搜索再次成功。一旦 LDAP 返回正确的条目,服务器就可以应用逻辑,根据组、组织单元 (OU) 或特定属性分配 VLAN,并在 Access-Accept 中再次生成Tunnel-Type、Tunnel-Medium-Type 和 Tunnel-Private-Group-Id。

另一种特殊情况出现在某些交换机上,当端口上的静态 VLAN 配置与动态 802.1X 配置混合使用时。例如,端口 17 被配置为静态 VLAN 4,同时尝试使用 RADIUS 将特定用户强制分配到 VLAN 2。如果设备不遵循隧道属性或动态 VLAN 功能被禁用,无论 RADIUS 配置如何,该端口仍会将流量视为 VLAN 4。

在这种情况下,务必查看交换机的文档,明确启用通过 RADIUS进行的 VLAN 分配支持,并使用 ` show dot1x`或类似命令进行调试,检查设备是否报告类似“忽略隧道属性”或“动态 VLAN 分配已禁用”的信息。只有当制造商支持并启用此功能时,默认情况下连接到 VLAN 4 物理端口的用户,在以“carlos”或其他用户名进行身份验证后,才能真正进入 VLAN 2。

关于在远程桌面 (RDP) 场景中使用动态 VLAN 的适用性,一直存在着经典的争论。当 Windows 启动时进行机器身份验证,登录时进行用户身份验证时,用户登录触发的 VLAN 变更可能会中断正在进行的 RDP 会话,或者由于端口从“机器”VLAN 切换到“用户”VLAN 而导致 DNS 问题。许多管理员选择在这种情况下为所有状态维护一个 VLAN,或者在机器级别和用户级别分配相同的 VLAN,以最大限度地减少网段变更。

最后,在高级集成层面,人们越来越关注将 FreeRADIUS 与Azure AD连接起来,以便根据云端组成员关系确定 VLAN。目前,Azure AD 中还没有官方的原生模块可以直接查找 VLAN 的组成员关系,需要通过外部脚本、调用 Microsoft Graph API 以及进行一些调整才能实现。这是一个动态领域,如果需要稳定且受支持的解决方案,通常会将此逻辑委托给商业网络访问控制 (NAC) 或其他中间组件。

通过有效结合 802.1X、FreeRADIUS 和动态 VLAN 分配,无需繁琐的 NAC 解决方案即可实现精细的网络分段。这与强大的企业技术安全策略完美契合:从 Omada 或 ExtremeCloud IQ 等控制器到中端交换机,只要隧道属性得到尊重、LDAP/AD 查询得到妥善管理,并且能够根据用户的身份、角色或连接设备类型明确何时动态地将用户从一个 VLAN 移动到另一个 VLAN,所有设备都能发挥作用。

路由器和接入点分析
相关文章:
路由器和WiFi接入点分析完整指南