拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

华为交换机NAC实战:MAC旁路认证让哑终端无感接入

华为交换机NAC实战:MAC旁路认证让哑终端无感接入

搞企业网络运维这几年,我说句实话:华为交换机NAC(网络准入控制)本身并不难配,难的是接入设备一多,各种“哑终端”就开始给你整活。打印机、摄像头、门禁控制器、IP话机……这些设备没有屏幕,装不了802.1X客户端,也没法输账号密码,一上准入策略就断线,不上准入策略又不合规。这篇文章我就把华为交换机上怎么用MAC旁路认证稳妥接入哑终端这件事讲透,包括我踩过的坑、验证过的命令和排查思路。无论你是在做园区网改造,还是日常维护办公网络,这套方法都值得直接抄作业。


1. 哑终端接入NAC的困局与破局思路

1.1 为什么打印机、摄像头在NAC网络里总被“误伤”

NAC的初衷很朴素:只允许合规设备接入网络,防止有人绕过管理私自接入、私装路由或者带病入网。这对电脑、手机这类智能终端很友好——装个客户端或者做802.1X认证就能搞定。但打印机、摄像头这类设备,特征完全相反:

  • 没有操作系统或者系统封闭,无法安装准入客户端。
  • 没有交互界面,没法弹认证页面、输账号密码。
  • 长时间处于休眠或省电模式,网络活动是间歇性的。
  • 部分设备对网络的“主动连接”能力很弱,比如网络打印机只会在任务到达时发数据包。

结果就是,你一旦在交换机端口上启用NAC,原本好端端的一台打印机,可能因为偶尔发一个包触发认证、认证还没完成就被业务数据包干扰,最后端口被静默,设备直接掉线。办公室同事第一反应永远是“网络是不是又坏了”,实际上是你准入策略把设备挡在了门外。

1.2 哑终端接入方案的三种选择:全放通、MAC白名单、MAC旁路认证

我见过很多运维在哑终端接入这件事上走极端,基本上逃不出下面三种路子:

方案做法安全性维护成本体验
端口全放通哑终端所在端口不做任何认证低,等于NAC形同虚设几乎为零最稳定
静态MAC白名单提前收集所有哑终端MAC,手动加白高,但只防君子不防小人高,每次新增/更换设备都要改稳定
MAC旁路认证交换机把终端MAC作为身份凭据自动提交RADIUS认证,通过才放行高,可以结合服务器侧策略灵活控制中等,配置一次后续基本不用管稳定

端口全放通,说白了就是把该保护的地方开了后门,我见过有公司为了“省事”把整台监控交换机全部放通,结果摄像头PoE口被员工拿来给手机充电、插小路由器,网络拓扑一塌糊涂。静态MAC白名单其实并不是坏方案,后面我会说它最适合用来做兜底,但纯靠手工收集MAC做白名单,设备一多必然出错。

我最终长期跑通的方案是:MAC旁路认证打底 + 静态MAC兜底 + 关键设备监控。

1.3 我为什么坚持用“MAC旁路认证 + 静态MAC兜底”的组合

先说结论:这个组合能让绝大多数哑终端“无感接入”,同时对异常设备又有拦截能力。

MAC旁路认证(MAC Authentication Bypass,简称MAB)的核心逻辑非常朴素——交换机检测到端口下有新设备接入后,如果判断这个设备不会主动发起802.1X认证,就直接用它的MAC地址作为用户名和密码去RADIUS服务器查询。RADIUS服务器那边做好白名单,匹配上就放行,匹配不上就拒绝。这样打印机、摄像头在交换机眼里就相当于“刷脸上线”,完全不需要安装任何客户端。

但MAB不是银弹,我最开始全公司几百个哑终端全部走MAB,结果遇到两个问题:一是半夜某个设备休眠、唤醒、被误杀导致第二天早上没人发现故障;二是有些摄像头因为PoE供电时序问题,MAB触发太早反而失败。后来加了一道保险——把重要的哑终端MAC在交换机上做成静态MAC表项,这样即使RADIUS侧临时抽风或者设备唤醒时序有问题,端口也能守住基本连通性。


2. MAC旁路认证的工作原理与关键参数

2.1 MAC旁路认证(MAB)的工作流程

理解了MAB的流程,你才能真正看懂配置。以华为交换机同时开启802.1X和MAC认证为例,一个哑终端接入后的完整流程是:

  1. 设备插上网线,交换机端口物理状态变为UP。
  2. 交换机先向对端发出802.1X认证邀请(EAPOL报文),等待设备响应。
  3. 如果是普通电脑,系统安装了802.1X客户端,就会回EAPOL报文,进入802.1X流程。
  4. 如果是一台打印机/摄像头,它压根不认识EAPOL,可能直接发出DHCP Discover、ARP之类的数据报文。
  5. 交换机收到非EAPOL报文,就认为这是一台“哑终端”,于是触发MAC认证:把报文的源MAC地址提取出来,封装成用户名和密码,向RADIUS服务器发起认证请求。
  6. RADIUS返回Access-Accept(接受)或Access-Reject(拒绝)。
  7. 接受则端口放通该MAC的流量,拒绝则端口进入静默状态,在一段时间内不再接受该MAC的认证请求。

这个流程里最关键的就是第5步——交换机怎么判断“等不到802.1X响应”这个时机。如果判断得太早,可能误伤慢启动的电脑;判断得太晚,哑终端可能已经因为拿不到IP而反复重启网络栈。华为交换机默认会等待一个较短时间,设备发了非EAPOL报文就会立即触发MAC认证,这也是MAC认证对哑终端如此重要的原因。

2.2 认证触发方式:802.1X与MAC认证如何配合

华为交换机上,开启NAC时最常见的方式是在端口上同时使能802.1X和MAC认证。我见过不少朋友只开了802.1X,结果打印机怎么都上不了线,原因就是根本没有开启MAC触发。

在较新的华为交换机版本(V200R019及以后)里,推荐的做法是创建一个认证模板(authentication-profile),把802.1X和MAC认证的触发方式写进模板,然后在接口上绑定模板。这样后期调整策略只改模板,不用一台一台改接口。

[Switch] authentication-profile name nac_for_iot [Switch-auth-profile-nac_for_iot] dot1x authentication-method dot1x [Switch-auth-profile-nac_for_iot] mac-authen username host [Switch-auth-profile-nac_for_iot] mac-authen password cipher Huawei@123 [Switch-auth-profile-nac_for_iot] authentication dot1x mac-authen

上面这个authentication dot1x mac-authen是核心,它告诉交换机:这个端口先尝试802.1X,不行就自动切到MAC认证。有些老版本的配置方式是在接口下分别敲dot1x enable和mac-authen enable,效果类似,但管理起来没有模板方便。

顺带提一句,如果你只想让打印机、摄像头这类设备接入,不想让这个端口给电脑做802.1X,也可以只启用MAC认证。但我在实际网络里发现,办公网接入交换机的端口一般连的都是面板,下面既可能有电脑也可能有打印机,所以“802.1X优先,MAC旁路兜底”是最稳妥的默认策略。

2.3 最容易翻车的参数:用户名格式、密码、域、静默时间

这部分是MAB配置里真正的“坑王”,我在生产环境里翻过车,这里逐个说。

用户名格式(mac-authen username):华为交换机的MAC认证默认用户名是MAC地址本身,但MAC地址的书写格式不同,会直接影响RADIUS侧能否匹配。有的RADIUS服务器要求纯十六进制无分隔符(比如00e0fc123456),有的要求连字符全大写(比如00E0-FC12-3456)。你需要根据RADIUS服务器的配置来调整:

mac-authen username host with-hyphen lowercase

这条命令表示用户名使用MAC地址,保留连字符,并且使用小写。不同版本命令可能有细微差异,但思路一致:先看RADIUS服务器那边的用户名字段格式,再在交换机上调成一致的格式,不然你排查一整天都查不出为什么“明明MAC已经加了白名单却认证失败”。

密码(mac-authen password):很多朋友以为MAC认证的密码不重要,随便配。但RADIUS服务器那边如果配置了密码校验,两边不一致就会直接拒绝。建议在交换机侧统一设置一个固定的、复杂度合理的密码,RADIUS侧同步配置相同密码。

认证域(domain):华为交换机在做MAC认证时,会使用AAA模板里的域(domain)。默认情况下走default域。如果你的交换机有多个RADIUS服务器、多个域,一定要在认证模板里指定正确的域,或者在AAA配置里把默认域指向正确的RADIUS模板,否则认证请求会发到错误的RADIUS。

静默时间(quiet-period):设备认证失败后,交换机会把它放入静默队列,静默期间不再处理该MAC的认证请求。这个设定是为了防止设备反复尝试、打爆CPU。但对于打印机这类设备,如果静默时间设置过长,打印机休眠醒来后至少要等一个静默周期才能重新认证,用户体验极差。建议把静默时间控制在30秒左右,不要用默认的60秒甚至更长。

dot1x timer quiet-period 30

如果是通过认证模板配置的,需要在模板下找对应的timer配置入口,不同版本位置不一样,核心思路是一致的:静默时间别太长。


3. 华为交换机NAC配置完整实录(命令级)

3.1 配置前:先梳理哑终端清单和网络规划

实操之前,先做三件事:

  1. 盘点哑终端:把打印机、摄像头、门禁、IP话机、温湿度传感器等设备全部列出来,记下每个设备所在的物理端口、MAC地址、要划入的VLAN。这一步看着笨,但后面所有配置都以这个清单为据,省得配置到一半发现端口号对不上。
  2. 确认交换机版本:不同版本命令差异不小,尤其是V200R019前后的认证模板方式。你在敲命令前先看版本:
    display version
  3. 确认RADIUS服务器的用户名字段格式:去RADIUS后台看看已有白名单条目的MAC格式,是00e0fc123456还是00E0-FC12-3456,这决定交换机侧怎么配mac-authen username。

我在做某个项目的时候,因为没提前做第3步,配置好交换机后RADIUS侧一直看不到请求,最后发现是共享密钥不一致和NAS-IP没写对,白折腾了一个小时。配置前多花十分钟,后面能省一小时。

3.2 全局配置:AAA、RADIUS模板、默认域

下面是完整的全局配置。我以一个常见的场景举例:交换机S5735,RADIUS服务器地址192.168.10.10,共享密钥Huawei@123,认证端口1812,计费端口1813。

[Switch] dot1x enable [Switch] mac-authen enable [Switch] radius-server template nac_radius [Switch-radius-nac_radius] radius-server shared-key cipher Huawei@123 [Switch-radius-nac_radius] radius-server authentication 192.168.10.10 1812 [Switch-radius-nac_radius] radius-server accounting 192.168.10.10 1813 [Switch-radius-nac_radius] radius-server retransmit 3 [Switch-radius-nac_radius] quit

然后是AAA认证方案和域:

[Switch] aaa [Switch-aaa] authentication-scheme auth_nac [Switch-aaa-auth_nac] authentication-mode radius [Switch-aaa] accounting-scheme acct_nac [Switch-aaa-acct_nac] accounting-mode radius [Switch-aaa] domain nac_domain [Switch-aaa-domain-nac_domain] authentication-scheme auth_nac [Switch-aaa-domain-nac_domain] accounting-scheme acct_nac [Switch-aaa-domain-nac_domain] radius-server nac_radius [Switch-aaa-domain-nac_domain] quit [Switch-aaa] quit

这里解释几个关键点:

  • dot1x enable和mac-authen enable必须在全局先开启,否则后面接口上怎么配都白搭。
  • radius-server retransmit 3是RADIUS请求超时重传次数。哑终端接入瞬间网络栈刚起来,一次请求失败很正常,重传几次能提高成功率。但别配太多,否则认证失败时端口恢复时间会拖长。
  • 域名的定义很关键。所有MAC认证请求会带着域名信息去RADIUS,RADIUS侧也可以在域层面做策略区分。我这里单独建了一个nac_domain域,而不是用默认域,这样以后调整策略不用动其他业务。

3.3 接口配置:用认证模板统一管理

如果交换机版本支持,建议用认证模板。创建模板:

[Switch] authentication-profile name nac_for_iot [Switch-auth-profile-nac_for_iot] dot1x authentication-method dot1x [Switch-auth-profile-nac_for_iot] mac-authen username host with-hyphen lowercase [Switch-auth-profile-nac_for_iot] mac-authen password cipher Huawei@123 [Switch-auth-profile-nac_for_iot] authentication dot1x mac-authen [Switch-auth-profile-nac_for_iot] quit

然后进入哑终端所在端口(以摄像头接入端口为例):

[Switch] interface GigabitEthernet0/0/1 [Switch-GigabitEthernet0/0/1] port link-type access [Switch-GigabitEthernet0/0/1] port default vlan 10 [Switch-GigabitEthernet0/0/1] authentication-profile nac_for_iot [Switch-GigabitEthernet0/0/1] quit

如果你用的是老版本,没有authentication-profile命令,那么接口下直接这样配:

[Switch] interface GigabitEthernet0/0/1 [Switch-GigabitEthernet0/0/1] dot1x enable [Switch-GigabitEthernet0/0/1] mac-authen enable [Switch-GigabitEthernet0/0/1] quit

两种方式本质相同,核心都是:接口既允许802.1X又允许MAC认证,哑终端来了走MAC旁路,电脑来了走802.1X。唯一提醒是:如果交换机接入层端口类型是hybrid,要确认VLAN划分和放通规则,免得认证通了但业务VLAN不对,摄像头还是没法通信。

3.4 MAC旁路认证的核心细节

很多教程到这里就结束了,但我在生产环境里发现,真正决定体验好坏的是几个“边角料”配置。

第一,MAC认证通过后,端口默认放通几个MAC?华为接口默认的MAC学习数量是动态的,一般在1个到多个之间。如果端口接的是一台摄像头,一个MAC就够。但如果你把一个小型交换机/无线面板接到这个口上,后面可能跟着好几个终端,那就要注意MAC认证的多主机行为。建议在重要哑终端端口把MAC学习数量固定下来,防止有人私接小路由器:

[Switch] interface GigabitEthernet0/0/1 [Switch-GigabitEthernet0/0/1] mac-limit maximum 2 action discard

第二,认证成功后,端口多久做一次重认证?默认情况下MAC认证成功后设备不会频繁重认证,但为了安全,可以设置一个较长的重认证周期。这里要小心:打印机半夜休眠、网络栈关闭,重认证时交换机发不出唤醒报文,认证就可能失败。所以对于哑终端,建议将重认证关闭或把周期拉到很长,比如:

[Switch-auth-profile-nac_for_iot] mac-authen reauthenticate off

如果必须开重认证,务必把上面的静默时间调短,否则重认证失败一次,设备就要在端口上干等几十秒,业务直接中断。

第三,RADIUS侧配置同步。交换机这边配好后,RADIUS服务器必须能响应MAC认证请求。至少包含三件事:共享密钥一致、NAS-IP(交换机IP)被允许访问RADIUS、MAC白名单格式正确。我在实际排查中发现,很多“交换机配置没问题但就是认证失败”的案例,八成问题出在RADIUS侧,而不是交换机。

3.5 静态MAC兜底:给关键设备上双保险

MAC旁路认证虽然稳,但既然叫“旁路”,就说明它不是设备主动认证,而是交换机“替设备申请认证”。如果RADIUS服务器宕机、网络抖动、或者RADIUS配置错误,哑终端依然会被拒之门外。

为了给打印机这类“一断就炸锅”的设备上双保险,我推荐在交换机上做静态MAC表项兜底:

[Switch] mac-address static 00e0-fc12-3456 GigabitEthernet0/0/1 vlan 10

这条命令的意思很清楚:无论认证通过与否,交换机的二层转发表里永远有这个MAC对应的出接口和VLAN。这样即使RADIUS临时不可用,端口也能从二层把数据包转发到对应设备。但我必须强调:静态MAC解决的是“二层转发”层面的兜底,如果端口NAC策略本身就禁止该MAC访问,静态MAC不一定能完全绕过认证限制,所以它更适合作为“认证恢复期的保底”,而不是长久的放行方案。对于特别重要的设备,我甚至会额外在RADIUS侧加一条白名单,双保险。

配置完成后,用下面命令验证:

display mac-address static display authentication-profile

看到静态表项和认证模板生效,基本就稳了。


4. 常见问题与排查技巧实录

4.1 打印机休眠后网络恢复不过来了

这是我被同事吐槽最多的问题。症状很统一:办公室打印机白天用得好好的,第二天早上大家一上班,打印机显示“离线”,谁打印都不行。重启打印机后又能撑一天,第二天又犯。

排查思路:

  1. 先在交换机上看认证记录:
    display aaa offline-record
  2. 如果记录里显示“Quiet”之类的原因,说明打印机休眠期间发出的报文触发了认证,但认证失败或超时,然后被静默了。
  3. 下一步看认证失败的RADIUS响应,确认是不是RADIUS侧没匹配上。

解决办法分两步:一是在RADIUS侧确认打印机MAC确实在白名单里,二是把交换机静默时间调短(比如30秒),保证打印机醒来后的下一次认证尝试能快速完成。另外,很多网络打印机支持“省电模式关闭网络接口”,如果打印机固件允许,建议把“网络接口待机唤醒”相关选项打开,避免设备长时间不通信导致交换机老化掉认证信息。

4.2 摄像头PoE上电后认证失败

摄像头和打印机还不太一样,摄像头的接入方式经常是交换机直接PoE供电。问题就出在时序上:交换机给摄像头PoE上电,摄像头硬件启动需要几秒甚至十几秒,但交换机端口物理状态可能瞬间就UP了,然后立刻尝试做MAC认证。此时摄像头网卡还没就绪,不会发包,交换机等不到响应,可能就认为认证失败。

排查时用:

display mac-authen interface GigabitEthernet0/0/1

如果发现认证时间为0或者和端口UP时间几乎一致,说明认证触发太早了。

解决办法是在接口下增加一个“认证延迟”或者把端口上的物理状态检测策略改为“延迟UP”。不同版本命令不同,思路就是让交换机在端口UP后等待一段时间再开始认证,给摄像头留出启动时间。另外,如果摄像头支持PoE电源管理,可以配置端口先上电、再延后认证。

4.3 部门私接了一个无线路由器,NAC被绕过

这是NAC放通哑终端后最容易出现的衍生问题。我的经验是:哑终端端口往往被默认认为是“安全端口”,于是有人把无线路由器插到打印机旁边的面板上,几十个手机全从这个口上网,NAC形同虚设。

排查时用:

display mac-address interface GigabitEthernet0/0/1

如果发现一个接口下出现了大量MAC地址,基本可以断定有人私接设备。

解决办法:

  1. 配置接口MAC学习数量限制:
    [Switch] interface GigabitEthernet0/0/1 [Switch-GigabitEthernet0/0/1] mac-limit maximum 2 action discard
  2. 关闭端口的多主机模式,只允许认证设备独占。
  3. 把无线路由器接入行为纳入NAC管控:如果确需无线覆盖,请走正规WLAN建设流程,不要私接。

这里有个更隐蔽的坑:有些傻瓜交换机(不带管理功能)被员工私自串联到网口下,交换机下挂了打印机和电脑,这种串联设备会广播MAC地址,干扰MAC认证的“一对一”假设。我自己在排查中遇到过好几次,最后都是靠display mac-address发现同一端口下MAC数量异常,才顺藤摸瓜找到私接设备。

4.4 RADIUS侧根本收不到MAC认证请求

我排查过最诡异的问题:交换机配置看起来全对,display mac-authen显示认证正常,但RADIUS侧日志里就是没有对应请求。

最后定位到的原因有几种:

  1. NAS-IP没配置:RADIUS服务器的访问控制列表(ACL)只允许特定NAS-IP访问,而交换机发认证请求的源IP是管理地址,不在ACL里。解决办法是配置:
    [Switch-radius-nac_radius] nas-ip 192.168.10.2
  2. 共享密钥不一致:两边配置的shared-key不一致,RADIUS直接丢弃请求。
  3. 用户名格式不对:RADIUS侧白名单存放的是无连字符的小写MAC,交换机侧却发的是带连字符的大写MAC,导致匹配失败。

这类问题用debugging radius packet可以看得很清楚,但这个命令在生产环境慎用,因为调试信息量大,建议在非业务高峰期操作,用完之后立刻关闭:

undo debugging radius packet

4.5 常用排查命令速查表

我整理了一张命令速查表,覆盖绝大多数哑终端NAC排查场景:

场景命令关注点
查看802.1X端口状态display dot1x interface GigabitEthernet 0/0/1认证方式、触发方式是否生效
查看MAC认证状态display mac-authen interface GigabitEthernet 0/0/1认证状态、最近认证时间
查看在线认证记录display aaa online-record当前在线用户、RADIUS分配结果
查看离线/失败记录display aaa offline-record失败原因、静默原因
查看接口下MAC地址display mac-address interface GigabitEthernet 0/0/1是否有异常设备、私接路由
查看认证模板内容display authentication-profile确认模板和接口绑定关系
查看RADIUS统计display radius-server请求发送/接收计数

有一个容易混淆的点:很多朋友习惯用display mac-address | include broad去找广播MAC(ff:ff:ff:ff:ff:ff),误以为这样可以排查环路或广播风暴。实际上广播MAC地址不进MAC转发表,你过滤也查不到东西。想看广播/组播报文异常,正确做法是看接口计数器:

display interface GigabitEthernet0/0/1

关注“Broadcast”列的数值增长速率,增长异常快才说明有环路或广播风暴风险。

4.6 竖向总结一张问题对照表,拿走即用

故障现象常见原因解决方向
打印机休眠后无法恢复认证失败触发静默,静默时间太长调短静默时间,确认RADIUS白名单
摄像头PoE上电后断网认证触发太早,摄像头网络栈未就绪端口认证延迟,给摄像头预留启动时间
接口下出现大量MAC私接路由器/傻瓜交换机配置MAC学习数量限制
认证通过但拿不到IPVLAN划分错误,或DHCP被策略阻断检查端口VLAN、认证后VLAN授权
RADIUS收不到请求NAS-IP、共享密钥、域名不匹配检查NAS-IP配置和共享密钥
电脑接入多次失败802.1X客户端版本兼容性问题检查EAP方法、证书、认证域

最后再分享一个我自己的小习惯:每次把一批哑终端接入NAC之后,我会在连续一周内每天定时看一下display aaa offline-record,专门统计有没有设备在凌晨或者非工作时间掉线。很多哑终端故障都是“周末坏、周一炸”,因为周末没人用,设备进入休眠后触发认证失败,结果周一所有人开工时才发现问题积压了。提前看日志,把异常设备在RADIUS侧白名单和交换机兜底策略上补齐,后面就能省去无数个“周一早上被连环夺命call”的早晨。这套方案我用了快两年,打印机、摄像头、门禁、IP话机全部稳定接入,希望对正在搞华为NAC改造的你也有帮助。

返回列表