拓冰建站拓冰建站
首页 / 资讯中心 / 正文

华为交换机同网段互访ACL控制:Hybrid接口与排障实践

有些朋友可能听过一句话叫“华为数通里同网段互访的权限控制十个有九个会配错”。这话有点标题党但我接过的排障求助里确实见过太多类似案例需求很明确就是同一个VLAN里某台终端不能访问某台服务器/打印机/摄像头结果ACL加了不少要么完全没生效要么整个VLAN都不通了最后只能默默删掉配置。其实问题不在ACL本身而在对“同网段互访流量到底走哪条路径”的理解。再加上华为交换机的Hybrid接口本身就比Access/Trunk灵活用好了可以做很多精准控制用不好就变成连环坑。这篇文章我把这个场景从头到尾拆一遍把为什么容易配错、ACL该放在哪、Hybrid怎么配合、以及排障思路一次讲清楚。1. 先看翻车现场同网段互访为什么这么难管1.1 一个典型的“禁访服务器”需求假设你有一台服务器IP是192.168.1.200接在交换机G0/0/20口同一VLAN 10下有三台员工电脑IP分别是192.168.1.100、192.168.1.101、192.168.1.102。领导要求只允许192.168.1.100访问服务器其他电脑不能访问但各电脑之间的正常办公互访不能受影响。这个需求在网络工程师看来非常简单但实际操作中翻车率非常高。为什么因为这里有一个隐藏条件服务器和电脑都在VLAN 10IP都在192.168.1.0/24网段也就是说它们之间是同网段二层互访。同网段互访的流量不会去找网关不会经过VLANIF三层接口交换机直接在二层就把报文从入口端口转发到了出口端口。这个特性决定了你配置ACL的位置和方向必须完全按照“二层交换路径”来设计而不是按“跨网段三层路由”的思路来。1.2 我见过最多的两种错配方式第一种是把ACL下在VLANIF接口上。比如interface Vlanif10 traffic-filter inbound acl 3001配置完一测发现该不通的还在通。原因是VLANIF接口只处理“进入三层路由的流量”同VLAN主机之间的二层互访报文根本不会上送到VLANIFACL自然匹配不到。第二种是把ACL下在物理接口上但方向理解反了。比如在服务器接口G0/0/20上配置了inbound方向的ACL想拦“其他终端访问服务器”的流量结果发现某些情况下能拦某些情况又拦不干净或者服务器自身的正常访问也被阻断。原因是方向到底匹配的是哪个方向的报文、源IP和目的IP分别是谁很多人没想清楚。所以要配对这个场景必须先弄明白两件事Hybrid接口的报文标签行为是什么以及ACL在物理接口上的匹配路径是什么。2. 搞懂Hybrid它比Access/Trunk灵活在哪2.1 PVID、untagged、tagged到底在干嘛华为交换机的端口链路类型默认就是Hybrid很多刚接触华为设备的人甚至会忽略这一点。简单来说Hybrid接口一个端口可以同时属于多个VLAN但对外发送报文时你可以决定哪些VLAN的报文保留标签哪些VLAN的报文剥掉标签。三个关键参数PVID端口的默认VLAN收到不带标签的帧时交换机会给这个帧打上PVID对应的VLAN标签。untagged VLAN列表这些VLAN的报文从该接口发出时会被剥掉标签以无标签形式发送。tagged VLAN列表这些VLAN的报文从该接口发出时保留原标签。举个例子interface GigabitEthernet0/0/1 port link-type hybrid port hybrid pvid vlan 10 port hybrid untagged vlan 10 20 port hybrid tagged vlan 30这个端口的PVID是10收到无标签帧会归到VLAN 10发出VLAN 10和VLAN 20的报文时不带标签发出VLAN 30的报文时带标签。一个端口同时放通了3个VLAN这在Access或Trunk上实现起来都比较别扭。2.2 同网段互访场景下Hybrid能干什么在同网段互访控制这个场景里Hybrid最常见的用法是作为接入端口配置成和Access类似的效果PVID10untagged vlan 10。此时它和Access口的唯一区别就是“可以额外放通其他VLAN”这正是后面进阶玩法的基础。如果只是控制同一个VLAN内终端访问服务器其实Access口也能做用不上Hybrid的特殊能力。但为什么业界总把“Hybrid ACL”放在一起说因为很多实际组网里同一个IP网段的主机由于历史原因被分在了不同VLAN或者接入交换机上联口需要同时透传多个VLAN这时候Hybrid的“一个端口同时untagged多个VLAN”的能力就派上用场了。它能让你把原本隔离在不同VLAN里的“同IP网段”主机重新“拉回”同一个二层广播域然后再用ACL做精细化权限收敛。所以Hybrid在这个方案里的角色不是“必须”而是“让组网更灵活、让ACL有地方可以精准下发”。理解了这一点后面看配置就不会觉得命令很玄乎。3. ACL要放在“流量真正走的路径”上3.1 二层互访的流量路径先画一条最简单的路径PC_A192.168.1.101访问Server192.168.1.200两台设备都接在同一台交换机上属于VLAN 10。PC_A发出一个目的MAC为Server MAC的以太网帧进入交换机G0/0/12口。交换机查MAC地址表知道Server的MAC对应G0/0/20口于是将这个帧从G0/0/20口转发出去。整个过程MAC表就够了不需要查路由表不需要涉及VLANIF也不会把报文送CPU处理。ACL要想拦住这个流量必须作用在“从G0/0/12进”或者“从G0/0/20出”这两个方向上。华为交换机物理接口下的traffic-filter就是干这个的。有人会问能不能在交换机全局或者VLAN下配置ACL华为确实有基于VLAN的ACL绑定方式但老款设备上行为比较难统一而且可读性差。对于绝大多数场景直接在物理接口上配traffic-filter最直观也最好排障。3.2 inbound和outbound方向怎么选接口下的traffic-filter有两个方向inbound匹配“从这个接口接收进来”的报文。outbound匹配“从这个接口发送出去”的报文。对于PC_A访问Server的场景在PC_A接入接口G0/0/12上配置inbound方向匹配到的报文源IP是192.168.1.101目的IP是192.168.1.200。在Server接入接口G0/0/20上配置outbound方向匹配到的报文源IP依然是192.168.1.101目的IP是192.168.1.200。这两种做法都能拦住PC_A到Server的流量但维护习惯不同。我个人的建议是如果只控制少数几台终端就在终端接口inbound方向配如果有多台终端要访问同一个服务器/资源就在服务器接口outbound方向配这样ACL只需要维护在服务器侧一个端口下后续加终端规则只动这个ACL即可。注意方向一定不能想当然。很多人以为服务器接口上配置inbound方向就能“拦别人访问服务器”其实inbound匹配的是“进入交换机服务器的这个接口”的报文也就是从服务器发出来的报文方向完全反了。想拦外部访问服务器的流量必须用outbound方向。这是高频翻车点。4. 实操同一VLAN内“精准禁访”一台服务器4.1 组网与需求为了把配置讲清楚我给一个可以直接抄作业的组网交换机华为S5700系列其他S系列也大同小异VLAN 10业务网段192.168.1.0/24Server192.168.1.200接在G0/0/20PC_101192.168.1.101接在G0/0/12要求禁止访问ServerPC_100192.168.1.100接在G0/0/11允许访问ServerPC_102192.168.1.102接在G0/0/13允许访问Server所有终端都需要能互相访问不能因为加了限制影响办公4.2 完整配置先规划VLAN和端口vlan batch 10PC接入端口配置为HybridPVID和untagged都设为VLAN 10这一步其实和Access效果一样但为了后面可能扩展我习惯直接用Hybrid。interface GigabitEthernet0/0/11 port link-type hybrid port hybrid pvid vlan 10 port hybrid untagged vlan 10 quit interface GigabitEthernet0/0/12 port link-type hybrid port hybrid pvid vlan 10 port hybrid untagged vlan 10 quit interface GigabitEthernet0/0/13 port link-type hybrid port hybrid pvid vlan 10 port hybrid untagged vlan 10 quit interface GigabitEthernet0/0/20 port link-type hybrid port hybrid pvid vlan 10 port hybrid untagged vlan 10 quit然后在PC_101的接入接口G0/0/12上配置ACL并调用traffic-filteracl number 3001 rule 5 deny ip source 192.168.1.101 0 destination 192.168.1.200 0 rule 10 permit ip quit interface GigabitEthernet0/0/12 traffic-filter inbound acl 3001 quit这里“source 192.168.1.101 0”的0是华为ACL的通配符写法写成0表示精确匹配这个IP地址。如果你希望匹配整个网段可以写成source 192.168.1.0 0.0.0.255。关键的一点deny规则后面必须跟一条permit ip。否则这个接口下所有来源的IP报文都会被末尾隐含的deny any丢弃结果就是PC_101不仅访问不了Server连和其他电脑通信也会全部中断。4.3 为什么这样配就能生效现在PC_101访问Server时报文从G0/0/12进入交换机traffic-filter inbound会先检查这个报文。ACL规则从上往下匹配rule 5明确匹配了源IP为192.168.1.101、目的IP为192.168.1.200的报文直接丢弃。PC_101访问PC_100时源IP是192.168.1.101但目的IP不是192.168.1.200所以rule 5不命中继续匹配rule 10 permit ip放行。PC_100和PC_102的接入接口没有调用ACL完全不受影响。如果希望把所有“非授权终端访问Server”的流量全部集中在服务器接口下管理也可以改成在G0/0/20上配置outbound方向的ACLacl number 3002 rule 5 deny ip source 192.168.1.101 0 destination 192.168.1.200 0 rule 10 permit ip quit interface GigabitEthernet0/0/20 traffic-filter outbound acl 3002 quit此时PC_101发往Server的报文从交换机向G0/0/20口发送时方向是outbound源IP是192.168.1.101目的IP是192.168.1.200同样命中rule 5被丢弃。我实际更推荐第二种方式因为当服务器不止一个时你可以在服务器侧的接口上统一维护所有终端IP和权限新增一台无权限终端时只需要改一个ACL不必跑到对应终端口上去加配置。5. 进阶Hybrid让“跨VLAN同网段”也能互相管控5.1 跨VLAN同网段的尴尬有一种历史遗留组网特别让人头疼终端A在VLAN 10IP是192.168.1.10终端B在VLAN 20IP也是192.168.1.20。两个VLAN的IP网段相同都是192.168.1.0/24但业务上需要A和B能互访。这里的问题在于不同VLAN之间本来要靠三层路由互通但3层设备上如果同时存在VLANIF 10和VLANIF 20这两个三层接口都会处于192.168.1.0/24网段。这样路由表会有冲突ARP表项也会互相覆盖终端A访问终端B时网关根本不知道该把报文转给谁整个通信会乱成一团。老工程师遇到这种局通常的办法就是改IP地址重新规划但很多时候业务不能停、地址不能动。这时Hybrid接口就是救场选手。5.2 Hybrid“合并广播域”的做法思路很简单既然三层路由走不通那就绕过三层让它们在二层直接互访。Hybrid接口允许一个物理接口同时untagged多个VLAN这意味着交换机可以把VLAN 10和VLAN 20的报文都从同一个口剥掉标签发出去。举个例子一台汇聚交换机下连两台接入交换机。汇聚交换机的下联口G0/0/1连接接入交换机A终端在VLAN 10G0/0/2连接接入交换机B终端在VLAN 20。现在希望两边192.168.1.0/24网段的终端能够二层互访。在汇聚交换机上可以这样配vlan batch 10 20 interface GigabitEthernet0/0/1 port link-type hybrid port hybrid pvid vlan 10 port hybrid untagged vlan 10 20 port hybrid tagged vlan 10 20 quit interface GigabitEthernet0/0/2 port link-type hybrid port hybrid pvid vlan 20 port hybrid untagged vlan 10 20 port hybrid tagged vlan 10 20 quit如果接入交换机上送到汇聚时打的trunk带标签那么汇聚下联口只需要允许对应VLAN通过即可Hybrid可以根据需要保留或剥掉标签。这里的关键是当VLAN 10的报文从G0/0/1进入汇聚交换机在向G0/0/2转发时由于G0/0/2同时放通了VLAN 10和VLAN 20并且对VLAN 10是允许通过的报文就能从G0/0/2转发出去。两个VLAN在汇聚交换机这个层面实现了二层互通。5.3 配合ACL做权限收敛“合并广播域”是把双刃剑。它解决了同网段互访问题但打破了VLAN原有的隔离。如果不做任何控制VLAN 10和VLAN 20里所有终端都能互相访问广播报文也会在两个VLAN之间泛洪存在安全和性能隐患。所以正当的用法永远是让Hybrid在二层打通通路再用ACL在物理接口上把不需要的互访关系“掐掉”。比如要求192.168.1.10VLAN 10可以访问192.168.1.20VLAN 20但192.168.1.11VLAN 10不能访问192.168.1.20。那么可以在汇聚交换机G0/0/2接口的inbound方向下发ACLacl number 3003 rule 5 deny ip source 192.168.1.11 0 destination 192.168.1.20 0 rule 10 permit ip quit interface GigabitEthernet0/0/2 traffic-filter inbound acl 3003 quit这样从接入交换机B进来的所有流量只要匹配源IP 192.168.1.11、目的IP 192.168.1.20就被汇聚交换机在入口方向丢弃。其他流量正常放行。这个场景中如果没有Hybrid的“多VLAN untagged”能力VLAN 10和VLAN 20在二层就是隔离的ACL配置得再对也没有意义因为流量根本不会经过同一个接口。注意这种做法适合小型网络、临时改造或业务割接过渡期使用。如果网络规模很大不建议长期把多个VLAN的广播域合并否则排障和安全性都会变得很痛苦。能用正规三层路由VLANIF方案解决的话还是优先改规划。6. 常见问题与排查实录6.1 现象与原因对照表我做了一个速查表基本覆盖了日常能碰到的大部分问题。现象最可能的原因解决方法在VLANIF下配了ACL同网段互访没被拦VLANIF只处理三层流量同VLAN二层互访不经过它把ACL下发到对应物理接口用traffic-filter终端口开了inbound ACL后所有访问都不通了deny规则后面没有permit ip补一条rule 10 permit ip服务器口outbound ACL配置了但终端还能访问服务器ACL规则里源IP和目的IP写反了确认方向outbound匹配从接口发出的报文源是终端IP目的是服务器IP在服务器口用了inbound方向拦“别人访问服务器”拦截不彻底方向理解错误inbound匹配的是服务器发出的报文改成outbound方向或改到终端接入口的inbound方向ACL已经配置display acl也能看到规则但计数不增加流量没有经过该接口或ACL绑错了接口检查接口编号确认终端接在哪个口终端ping服务器不通但ARP表项里能学到对方MACACL只拦了IP报文ARP协议报文不受IP ACL影响属于正常现象不用处理跨VLAN同网段用Hybrid后广播报文变多了个别人还能绕过ACL互访广播域扩大VLAN隔离被Hybrid打破细化ACL规则控制互访范围尽量避免长期使用该方案6.2 排查命令与思路遇到“ACL存在但没生效”的故障我有几个固定的排查习惯。先用display acl all看规则和命中计数。规则里有matched字段如果一直是0说明报文根本没匹配到这条规则。这时候先别怀疑硬件先看接口有没有绑对、方向有没有选对。display acl all然后看接口下的traffic-filter应用记录确认ACL到底绑在哪个接口、哪个方向display traffic-filter applied-record如果ACL规则计数在增长但业务看起来还是通的那要确认是不是有其他放行策略优先级更高。华为设备上如果同时配置了MQC流策略、端口隔离、traffic-filter等生效顺序可能因为设备型号不同而有差异。我一般建议不要在一个接口同时叠多种过滤方式能合并到同一个ACL里就合并否则排障时会非常痛苦。再看接口的VLAN信息确认Hybrid配置是否符合预期display port vlan这条命令可以清楚看到每个接口的link-type、PVID、untagged VLAN和tagged VLAN排查“报文带不带标签”“VLAN放通状态”非常有用。如果还解决不了就把问题拆成两步先单独验证ACL比如临时写一条permit/deny所有IP的规则确认接口方向有没有绑错再验证Hybrid把两个终端分别接入用抓包或display mac-address看MAC表项确认二层转发路径。网络问题只要能把“路径”和“过滤点”对齐九成都能解决。7. 写在最后一些经验和小技巧我在实际项目里用这套组合踩过不少坑也有几个习惯可以分享。第一同网段互访控制优先在“被访问资源侧”的接口做outbound过滤。比如控制员工访问服务器就在服务器的接入接口上统一挂ACL这样权限规则集中在一处后续新增终端、调整权限都好维护。如果网络里服务器不止一台可以每台服务器按需挂或者在服务器接入的上联口统一管控。第二明确“ACL可以拦IP但拦不住ARP”。很多人用ping测试不通就以为ACL全部生效了其实ARP请求是二层广播报文IP ACL对ARP不生效。所以你会发现即使ping不通ARP表项还是能学到。这不是配置错误而是协议特性别浪费时间在这个点上。第三Hybrid非常灵活但不要滥用。华为端口默认就是Hybrid很多人在没有任何意识的情况下就用了它。对于普通接入端口PVID、untagged VLAN列表和tagged VLAN列表最好保持简洁能一眼看出端口属于哪个VLAN。只有在需要“同VLAN内精准控制”或“跨VLAN同网段互通”的场景才把Hybrid的多VLAN能力拉出来用配合ACL收口。第四如果业务要求只是“某些端口之间完全隔离、同VLAN内不通信”用端口隔离port-isolate比ACL更省事。但端口隔离是一刀切无法做到“特定终端不能访问服务器、但还能访问其他终端”。你能接受这种粒度就直接用隔离不行的话还是老老实实HybridACL。最后再分享一个实用小技巧在ACL里写规则时建议给后续扩展预留编号空间。华为默认步长是5你写了rule 5、rule 10以后想在中间插入一条规则可以用rule 6或者rule 8不用重新改编号。别一上来就把10、20、30用满。我见过很多同事在规则中间想插一句结果只能全部删除重建都是编号规划不好惹的祸。华为数通这套东西命令本身不算难难的是把流量路径和过滤逻辑理解透。只要记住“同网段互访走二层ACL就下到物理接口Hybrid负责让流量按你的预期走ACL负责把不该通的流量悄悄扔掉”以后再遇到类似的权限控制需求基本就不会配错了。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门