如何配置基于MAC地址的802.1x认证(MAC Bypass)

一般网络环境中我们会使用有线/无线802.1x验证。这种验证方式通常需要结合域账号进行客户端身份验证。验证通过后,根据NPS/IAS策略可以将客户端划分到指定的VLAN并实现记账等功能。

 

了解无线网络的 802.1X 身份验证

https://technet.microsoft.com/zh-cn/library/cc759077

 

实际应用中我们经常会碰到一些无法加域的设备,比如打印机,PDA,非Windows计算机等。如何把这些设备放到802.1x的环境中? 一般可以考虑通过MAC Bypass的方式。这种方式中,客户端可以用自己的MAC地址作为用户名和密码进行802.1x验证。

 

实现步骤如下:

1. 为相关设备创建账号:为了不影响AD中的账号和其他NPS policy,我们在NPS服务器本地创建MAC Bypass所需账号,将这些账号放到一个本地组MAC Bypass里。

NOTE: 帐户的密码设定要遵从接入设备的要求,比如Cisco就要求用户名和密码都是MAC地址。

例如:

Username: 001122334455

Password: 001122334455

 

2. 在NPS服务器上设置一些注册表项。根据以下文章的要求,我们需要配置注册表项“User Identity Attribute”;这是让NPS服务器支持MAC Bypass;

https://technet.microsoft.com/en-us/library/dd197535(v=ws.10).aspx

 

注册表路径:
HKLM\SYSTEM\CurrentControlSet\Services\RemoteAccess\Policy

注册表项:User Identity Attribute

注册表值: 31 (dword:0000001f)

 

3. 在NPS服务器上创建MAC bypass所需的Network Policies:

Policy Name:Mac Bypass

Conditions: User group 中添加步骤1中创建的本地组MAC Bypass。

Constrains: Authentication
Methods 仅需选中 Unencrypted authentication (PAP, SPAP)

Settings: 如果需要将通过MAC Bypass方式接入的客户端放到特定VLAN中,可以配置下图中的3个属性。根据下图,客户端会被划入VLAN 4.

-         Tunnel-Medium-Type:802

-         Tunnel-Pvt-Group-ID: 你希望使用的VLAN ID, 本例中为4

-         Tunnel-Type: Virtual LANs (VLAN)

注:如需更换VLAN ID,仅需更改Tunnel-Pvt-Group-ID对应的数值。

至此Network Policies的部分已经完成。但是测试时我们会发现一个问题,NPS服务器会自动在用户名(MAC address)前加上Domain 名称。(例如MAC 地址为001122334455的用户账户会被自动识别为 domain\001122334455进行验证)由于我们刚才添加的用户是NPS服务器的本地用户而非域用户,最终导致验证失败。

 

4. 为了解决这个问题,我们需要特别配置Connection Request Policies;目的是当检测到用户名为MAC地址时,自动加上NPS服务器的计算机名(而非域名)。这样NPS会使用本地用户数据库进行验证。

- 首先我们可以复制或创建一条和默认Connection Request Policies相同的policy。

- 在新policy的属性中,在Settings tab下设置Attribute:User-Name;

Find: (^[0-9a-fA-F]{12}$)  注:这个正则表达式是匹配MAC地址的格式。大致意思是从用户账号的第一位开始匹配,检查每一位是否属于0-9, a-f, A-F的范围。成功匹配12次则认为是MAC地址的格式(MAC地址为12位所以需要匹配12次)。

Replace with: RadiusServerName\$1  注:这里需要将RadiusServerName替换成NPS服务器的计算机名

 

对于正则表达式的使用,微软的文章如下:https://technet.microsoft.com/en-us/library/cc737419(WS.10).aspx.

 

5. 为了避免步骤4的Connection Request (MAC Address Bypass) 和默认Connection Request Policies冲突,我们可以给默认Connection Request Policies加上一些特殊Condition条件:

我的做法是添加User Name条件,限定user name中必须包含domain名。如果有多个domain名,可以用”|”符号隔开。

这样就真正实现了用户名为MAC地址格式的请求使用NPS本地账号验证。用户名包含domain的请求使用AD账号验证。

 

以上是NPS服务器支持MAC Bypass的设置。实际上MAC Bypass还需要交换机/AP的支持。有些设备上这个功能叫mac bypass或者mac filtering. 这是因为这种认证发生在客户端无法提供用户名密码的情况下,接入设备通常不会再继续向后台的radius要求验证(因为没有用户名密码)。但是在启用了这个功能的情况下,接入设备如果支持mac authorization,则会继续用mac address作为验证的凭据。

比如 Cisco 的设备就支持这个功能

https://www.cisco.com/en/US/tech/tk722/tk809/technologies_configuration_example09186a008084f13b.shtml#backinfo