干网络维护这些年,华为交换机上敲display mac-address查表、配置端口安全,几乎是我每天都会碰的技能。不管是排查私接设备、定位广播风暴,还是给公司做接入层准入,都离不开这两个操作。这篇文章我把华为交换机查看MAC地址的常用命令和端口安全配置一次性讲透,适合刚接手华为设备的网管,也适合想系统梳理一遍的老手。文中命令以VRP平台为例,S5720、S5730、S5735这些常见的千兆和三层交换机基本通用,少部分命令不同软件版本会有细微差异,我会在对应位置提醒一句。
1. 先搞清楚:MAC地址表到底在看什么
我在实际项目里遇到过一个典型案例:办公室网络突然卡顿,领导怀疑有人偷偷接了路由器。我跑到核心交换机上先display mac-address,发现某个端口下边带了几十个MAC,而且这些MAC集中从同一片工位方向学上来,顺着端口一查,果然有人私接了一个小交换机。这是MAC地址表最直接的用途——它就是交换机的“通讯录”,记录了从哪个端口学到了哪些设备。
1.1 三种MAC地址类型:单播、组播、广播
一个MAC地址长度48比特,写成十六进制是12位,比如5489-98AD-1234。华为设备上display mac-address查出来的地址类型,通常分三种:
- 单播MAC:第一个字节的最低位是0,普通电脑、服务器网卡都是这类,日常查表主要看它。
- 组播MAC:第一个字节最低位是1,比如
01-00-5E-开头的一般是IP组播映射出来的MAC,常见于组播视频流这类业务。 - 广播MAC:就是
FF-FF-FF-FF-FF-FF,交换机收到目的地址为广播MAC的帧,会向同VLAN所有端口转发。
为什么要分清楚?排查广播风暴的时候,如果看到广播流量异常增长,再去配合接口收发包计数,就能定位到真正发广播的设备。只会看一眼MAC列表是远远不够的。
1.2 动态、静态、黑洞表项的差别
华为交换机的MAC地址表项分三类,实际管理中经常会混用:
- 动态:设备上线自动学习,默认老化时间是300秒,可以修改,设备下线或老化后表项就没了,交换机重启后也会清零。
- 静态:手工配置进去的,永久保存在配置文件里,重启不丢,适合固定服务器、网关、打印机这类长期不动的设备。配置命令是
mac-address static 5489-98ad-1234 GigabitEthernet0/0/1 vlan 10。 - 黑洞:手工配置的黑名单,收到源地址或目的地址为黑洞MAC的报文直接丢弃,适合拉黑某台违规设备。命令是
mac-address blackhole 5489-98ad-ffff vlan 10。
静态和黑洞虽然都是手工配置,但思路相反:静态是“我信任它所以固定下来”,黑洞是“我不信任它所以直接丢弃”,别搞混了。
1.3 交换机是怎么“自学”MAC的,以及端口安全为什么必须做在前面
交换机的MAC学习,概括成四个字就是“见源学、见目查”。收到一个数据帧,先看源MAC,表里没有就记录“这个源MAC是从哪个端口进来的”;然后看目的MAC,表里有就从对应端口转发,没有就向VLAN内除接收口以外的所有端口泛洪。整个学习过程是自动的,不需要人工干预。
端口安全的核心,就是把“学源MAC”这个动作管起来:学多少、学谁的、学完记不记,全部由你决定。如果放任不管,接入层有人私接设备,MAC表被灌爆,就会出现“设备明明在线但通信时断时续”的怪象,排查起来非常头疼。所以端口安全必须在接入层做在前面,而不是等出了问题再补。
2. 华为交换机查看MAC地址的核心命令与实战
2.1 一条display mac-address输出怎么读
在华为交换机上执行:
display mac-address输出大概是这个样子的:
MAC Address VLAN Learned-From Type 5489-98ad-1234 10 GigabitEthernet0/0/1 dynamic 5489-98ad-5678 10 GigabitEthernet0/0/1 dynamic 00e0-fc12-3456 20 GigabitEthernet0/0/3 dynamic 00e0-fc12-7890 20 GigabitEthernet0/0/5 static关键看三列:MAC Address是设备地址,VLAN是这个MAC所在的业务VLAN,Learned-From表示从哪个物理端口学上来的,Type显示是dynamic、static还是sticky。现实中经常遇到“查到了MAC,但不知道这台电脑对应哪个端口”的情况,反过来也有“知道端口但不知道上面接了什么设备”的,这时候就需要下面这些过滤方式。
2.2 按端口、VLAN、具体MAC精确过滤
只查看某个端口上完成了多少设备:
display mac-address GigabitEthernet0/0/1只查看某个VLAN里的地址:
display mac-address vlan 10按完整MAC精确查找,这条在“设备到底在哪”这类问题里最有用:
display mac-address 5489-98ad-1234配合ARP表可以把整张对应关系还原出来:
display arp | include 192.168.1.10实战中我常用的组合拳是:先display arp查IP对应的MAC,再用display mac-address查MAC来自哪个端口,最后display interface看端口状态和收发包计数。这一套三板斧,基本能解决九成“某台机器找不到、某台机器上不了网”的问题。
2.3 通过MAC前缀分辨虚拟机和物理机
很多人搜过“000c29开头的MAC地址都是虚拟机吗”。00:0C:29是VMware虚拟机的OUI前缀,看到这个开头的MAC,基本可以断定是ESXi或Workstation里的虚拟机网卡。常见虚拟化平台的前缀对照如下:
| 前缀 | 平台 |
|---|---|
| 00:0C:29 | VMware ESXi / Workstation |
| 00:50:56 | VMware |
| 00:15:5D | Microsoft Hyper-V |
| 08:00:27 | Oracle VirtualBox |
| 52:54:00 | KVM / QEMU |
| 00:1C:42 | Parallels |
办公网里,如果非虚拟化区域突然出现这类前缀的MAC,大概率是有人私自装了虚拟机,并且给虚拟机配置了桥接网卡联入办公网络。这种私接行为,正是端口安全要重点防治的对象。网上也有很多OUI查询平台,输入前三位即可反查厂商,排查终端型号时很管用。
2.4 用广播/组播统计定位异常流量源
热词里的“dis mac | in broad”,其实是display mac-address | include Broadcast的组合写法。直接看广播表项意义有限,因为广播MAC本来就是所有端口共享的,更有价值的是定位“谁在玩命发广播”。做法是:
display interface GigabitEthernet0/0/1看入方向的Broadcast计数,哪个端口数值明显飙升,就一级一级往下查。我曾经遇到整层楼卡顿,排查到最后是某个办公室的小交换机成环,广播包成倍翻涨,最后就是靠端口广播计数,一个口一个口拔线定位的。提醒一句:display mac-address能帮助你描述现象,但要真正抓住“谁在发”,优先看接口计数,再配合STP或环路检测。
3. 端口安全的本质:防的不是MAC,是人
3.1 端口安全到底能防什么、防不了什么
端口安全本质上是接入层的“门禁”。开启后能做到三件事:限制端口学习的MAC数量,超过就按策略处理;把学习到的MAC固化成粘滞表项,非授权设备换了也进不来;绑定IP和MAC,防止用户私自改IP。它防不了伪造MAC——如果某人刻意把网卡MAC改成合法设备的MAC,端口安全是分不出来的,那种威胁得上802.1X和终端准入。
另外一个容易忽略的点:如果你接的是虚拟化服务器,vSphere这类平台开了混杂模式、允许MAC地址更改或伪传输,虚拟机会让交换机看到大量来自同一个物理口的MAC变动。这种场景不适合开端口安全,尤其是服务器上联口,开了反而会把正常业务流量挡掉。这也是为什么端口安全主要部署在“人用的接入口”,而不是服务器上联口。我见过一个案例,运维把服务器口也开了严格端口安全,结果虚拟化平台一迁移,端口立刻被判违规,业务直接中断,这种坑别踩。
3.2 单个端口允许多少设备:max-mac-num怎么定
关键参数是端口最大MAC学习数,命令是port-security max-mac-num。数值怎么定,要看端口用途:
- 一台电脑独占的桌面口,设1就好。
- 打印机口除了打印机本体,可能还有管理口,一般设2到3。
- 接无线AP的口要特别小心。AP如果是本地转发或桥接模式,无线终端的MAC会从AP上联口学到交换机上,这时候如果照搬“一个口限1个”,无线用户会轮流掉线,坑很深。
- 我的习惯是AP口默认不启用端口安全,或者只做MAC数量限制,但把数值放宽到8到16,具体看AP转发模式来定。
这里也回应一下很多人会用到的“华为交换机配置实例”搜索需求:不同VRP版本默认值不完全一致,开启端口安全后默认最大MAC学习数可能是1,也可能不是,所以务必显式写上port-security max-mac-num,不要依赖默认值。
3.3 粘滞MAC:让交换机记住合法设备
粘滞MAC,英文叫sticky MAC,是端口安全里最常用的功能。它的工作逻辑是:第一次从端口学到的MAC,自动转成静态表项保存下来,之后交换机只认这些MAC。哪怕设备重启、交换机重启,合法设备还能正常通信,新接上来的未知设备直接被拒。
粘滞MAC最舒服的一点是自动建档,不用手工一条条敲MAC。注意:必须先在端口下使能port-security enable,再配置port-security mac-address sticky,顺序反了会直接报错,不少新手卡在这里。
4. 华为交换机端口安全配置实操
4.1 最简配置:开启端口安全并限制MAC数量
以S5720为例,桌面电脑口的最简配置:
system-view interface GigabitEthernet0/0/1 port-security enable port-security max-mac-num 1 port-security protect-action restrict第一行使能端口安全,第二行限制这个口最多学1个MAC,第三行设置超出后的处理动作是restrict,即丢弃报文并记录日志。配置完查看结果:
display port-security display port-security interface GigabitEthernet0/0/1display port-security没有任何参数时显示全局概况,带接口参数时显示该接口的使能状态、最大MAC数、当前学习到的MAC数、保护动作等信息。注意:有的VRP版本默认动作是shutdown,配完测试设备一插端口就error-down,不要慌,先display port-security看动作,再决定是改动作还是恢复端口。
4.2 粘滞MAC固化与解除的正确姿势
在刚才的基础上加上sticky:
system-view interface GigabitEthernet0/0/1 port-security enable port-security mac-address sticky port-security max-mac-num 1 port-security protect-action restrict开启sticky后,当前已经学习到的动态MAC会自动变成sticky类型;以后换一台机器接上,端口直接判违规。查看粘滞表项:
display mac-address sticky如果某台设备要换机,需要先解除旧MAC:
interface GigabitEthernet0/0/1 undo port-security mac-address sticky 5489-98ad-1234 vlan 10然后让新设备重新学习。我个人的实操建议是:别一上来就开sticky。先只限数量,观察端口正常学习了哪些MAC,确认没有遗漏,再开sticky固化。我见过有人直接把sticky开在多人共用的工位口上,同事一换电脑全上不了网,最后只能逐台手清,场面非常尴尬。
4.3 端口安全里怎么绑定IP和MAC
只做MAC限制的漏洞在于,现在Windows和手机改MAC太容易,所以实际项目里经常要把IP也绑进去:
system-view interface GigabitEthernet0/0/1 port-security enable port-security max-mac-num 1 port-security mac-address sticky vlan 10 ip-address 192.168.1.10 5489-98ad-1234这条命令的意思是:端口只允许5489-98ad-1234这台设备,并且它的IP必须是192.168.1.10,VLAN是10。改了IP,端口不给转发。用户自行改IP就没了意义。注意VLAN号别写错,业务VLAN是10却写成20,配置根本不生效,排查起来很恼火。到了这一步,终端的IP、MAC、端口、VLAN四元组就全部锁死了。
4.4 违规处理动作怎么选:shutdown、restrict、protect
华为端口安全的违规处理动作有三个,很多新手分不清:
| 动作 | 行为 | 日志/告警 | 端口状态 | 适用场景 |
|---|---|---|---|---|
| protect | 丢弃违规报文 | 不记录 | 端口保持正常 | 不推荐单独使用 |
| restrict | 丢弃违规报文 | 记录日志并上报告警 | 端口保持正常 | 办公网终端口首选 |
| shutdown | 丢弃违规报文 | 记录日志 | 端口error-down | 机柜、弱电间固定设备口 |
实际选型时我的经验是:办公楼固定工位用restrict,既能起到限制作用,又不会因为一次换机导致断网,事后看日志还能追责。机柜和弱电间里的固定设备口用shutdown,出现未知接入直接断,安全性最高。protect我基本不用,静默丢包是排障噩梦,出了问题都不知道是安全策略挡的。
如果端口被shutdown,需要手动恢复:
interface GigabitEthernet0/0/1 shutdown undo shutdown部分版本也支持restart命令,效果一样。后面我会讲自动恢复的配置。
5. 一个典型场景:公司5个部门划分VLAN后的接入加固
5.1 先按部门把VLAN和地址段划分清楚
热搜里有个很典型的需求:“公司5个部门,划分5个子网,A部门100主机,B部门50,C部门20”。我一般这样做地址规划:
| 部门/用途 | VLAN | 网段 | 可用主机数 | 规划说明 |
|---|---|---|---|---|
| A部门 | VLAN 10 | 192.168.10.0/24 | 253 | 覆盖100台,留余量 |
| B部门 | VLAN 20 | 192.168.20.0/24 | 253 | 覆盖50台,宽裕 |
| C部门 | VLAN 30 | 192.168.30.0/24 | 253 | 覆盖20台 |
| 服务器区 | VLAN 40 | 192.168.40.0/24 | 253 | 单独隔离 |
| 管理网 | VLAN 99 | 192.168.99.0/24 | 253 | 设备管理地址 |
A部门100台终端,用/24是常规操作。如果公司未来明确会扩张,直接给/23更从容,但前提是核心交换机支持大段地址的二层转发,否则还是规规矩矩用/24。VLAN把一个大的广播域切成5个小广播域,广播报文少了,安全边界清晰了,某个部门出了问题也不会影响全网。划分完成后,用display mac-address vlan 10数一下实际MAC数量,可以和规划对得上,避免地址规划不足。
5.2 接入端口的分级安全策略配置
按端口类型设计不同的安全策略,这是整个项目里最关键的一步。我把模板贴出来:
# 桌面终端口:只认一台设备,粘滞+restrict interface GigabitEthernet0/0/1 port-security enable port-security max-mac-num 1 port-security mac-address sticky port-security protect-action restrict # 打印机口:允许3个MAC interface GigabitEthernet0/0/2 port-security enable port-security max-mac-num 3 port-security mac-address sticky port-security protect-action restrict # 上行口和服务器口:不启用端口安全 interface GigabitEthernet0/0/24 undo port-security enable这里再提一个和端口安全经常一起做的功能:DHCP Snooping。私接小路由器乱发DHCP是很常见的接入层问题,把交换机的DHCP Snooping打开,上行口设成信任口,其他口设成非信任口,私接路由器自动失效。端口安全负责管“哪台设备能接入”,DHCP Snooping负责管“谁能发地址”,两个一起用,接入层才真正稳。
5.3 部署后的验证与效果检查
配置完成后先别急着全量上线,挑几个代表端口测试。我通常的做法是:
- 正常电脑插上,ping网关通,
display mac-address能看到一条dynamic或sticky表项。 - 换一台没登记的设备插上,终端无法上网,执行
display logbuffer | include port-security能看到告警记录。 - 试改IP,业务不通,说明IP-MAC绑定生效。
- 检查端口有没有误伤同事,
display port-security interface GigabitEthernet0/0/1看当前安全MAC数是否正常。
全量部署我建议选在业务低峰期,凌晨或者周末最合适,配一台验证一台,不要一把梭。配置完成后记得save,不然设备一重启,所有策略全部回滚。
6. 常见问题与排障速查
6.1 明明配了端口安全,别人还能换IP
最常见的原因是只限制了MAC数量,没做IP-MAC绑定。只限制MAC数量时,用户换IP不影响端口安全判断,所以依然能上网。解决办法就是给端口配上带ip-address的粘滞条目。还有一种情况是MAC被伪造,比如用户把网卡MAC改成合法设备MAC,端口安全分不出来,这时候要靠DHCP Snooping、静态绑定和端口隔离共同兜底。遇到这类问题,先display port-security interface看当前学习表,再逐层排查。
6.2 端口被shutdown后恢复与自动恢复
端口因为port-security触发error-down后,状态显示为ERROR DOWN(PORT-SECURITY)。手动恢复方法:
interface GigabitEthernet0/0/1 shutdown undo shutdown批量场景建议配置自动恢复:
error-down auto-recovery cause port-security interval 300意思是因端口安全被关闭的端口,300秒后自动尝试恢复。注意:如果违规设备还插着,恢复后端口会再次被关,反反复复,所以恢复前先确认是不是有陌生设备接着。很多网管配置了自动恢复就以为万事大吉,结果端口一直在“恢复-关闭-恢复-关闭”之间循环,日志刷屏,排查时才发现是违规设备根本没拔。
6.3 交换机学习到大量陌生MAC的处理流程
遇到display mac-address显示一大堆陌生地址,先别慌。按这个顺序排查:
| 步骤 | 操作 | 目的 |
|---|---|---|
| 1 | display mac-address | count | 看总表项数量是否异常 |
| 2 | display mac-address,逐一比对端口 | 找出学习MAC特别多的端口 |
| 3 | 登录对应下联设备检查 | 确认是不是小交换机或AP |
| 4 | display interface 看收发包计数 | 判断是否存在环路 |
| 5 | 查看OUI前缀 | 识别是否虚拟机私接 |
| 6 | 有异常则断口处理 | 避免影响其他终端 |
另外说一句:不要在没看端口计数的情况下盲目清MAC表,清了还会重新学,治标不治本。先定位来源,才是正道。
6.4 几个容易被问到的点
- 华为S5720怎么改密码和本地登录:控制台口在
user-interface console 0下配密码,远程登录在AAA下改本地用户密码。示例:
user-interface console 0 authentication-mode password set authentication password cipher Huawei@123aaa local-user admin password irreversible-cipher New@123SSH连不上老交换机报
shell request failed on channel 0:通常是新版SSH客户端默认禁用了ssh-rsa签名算法,而老VRP只支持RSA密钥。客户端侧加-oHostKeyAlgorithms=+ssh-rsa可解,也可能是设备端在线会话数超限,清一下在线用户就行。蓝牙或物联设备MAC老变:像杰理701这类蓝牙芯片默认使用随机地址,每次连接MAC都会变化,这是BLE规范里的地址随机化机制,不是设备故障。做终端资产管理时,别把这些设备的MAC当成固定标识,否则会一直“查无此机”。
虚拟网卡MAC可以设置成纯数字吗:MAC地址的字符集是十六进制,0-9都是合法字符,所以“纯数字”并不奇怪,比如
00:00:00:00:00:12就是一个合法单播MAC。这类虚拟网卡在交换机上一样会形成MAC表项。
最后说点个人体会。端口安全这套东西,配置本身不难,难的是边界判断:哪些口该开、哪些口绝对不能开,必须结合每个工位的实际使用习惯来定。我自己的习惯是分三档管理——固定终端口开sticky加restrict,公共区域口只限数量不开sticky,上行口和服务器口不做端口安全,靠ACL和防火墙管。具体到你们公司,可以先从最容易出问题的工位下手,跑一周看日志再推广全公司。MAC地址和端口安全,说到底是接入层治理的一小部分,但管好了,能替你挡掉大量看起来玄乎的网络故障,这也是我个人一直在用的交付方式,希望对你有用。