做网络维护或者安防工程的朋友基本都遇到过这种需求同一个交换机下面的一堆终端既要能访问上层的服务器又不想让终端之间互相访问。很多人第一反应是划VLAN但真动手时会发现VLAN一划IP地址、网关、路由策略全要跟着动客户可能还要求所有设备必须在同一个网段里。这种场景下端口隔离就是专门解决“同一交换机内、同一VLAN下端口之间二层互访管制”的技术。今天这篇就把端口隔离到底是什么意思、怎么配、有哪些坑一次性理清楚。端口隔离简单说就是让交换机上的端口“互相看不上”同在一个VLAN广播域还是共享的但二层数据帧不允许在隔离端口之间转发。它和VLAN、ACL一样是二层管控里非常常用的一种手段而且几乎不用改动网络规划配置成本很低。适合做接入网、视频监控、企业办公网的“精准单点隔离”也是我在调试华为、H3C、海康等设备时用得最多的功能之一。1. 到底什么是端口隔离先把它放在整个网络体系里看1.1 最典型的三个现实场景在视频监控网络里摄像头往往全部接在同一台交换机上同一个网段。问题是摄像头之间其实根本不需要互访。但如果某台摄像头被突破或者被误配置它就能扫到同网段的所有摄像头发起探测甚至重放攻击。开启端口隔离后摄像头之间互不可见只有后端的NVR、平台能访问它们攻击面一下子就小了很多。海康的交换机甚至有拨码/按钮直接开启端口隔离就是给这种场景准备的。办公网中也很常见财务、人事、研发在一个VLAN里大家都要访问公共打印机和文件服务器但老板不见得想让财务电脑能被研发电脑直接访问。如果按VLAN拆IP网段全变了各部门路由策略、防火墙规则都要跟着改。如果只靠ACL去限制规则多了以后根本维护不动。端口隔离这时候就变成了最轻量的方案几个端口放进同一个隔离组只拦二层互访该上的服务一样不耽误。酒店或园区公共网络也是典型场景。客人设备接入后默认应该互相隔离防止ARP欺骗、私设DHCP、横向攻击但同时又必须能访问外网和认证服务器。这种“既要上网、又要看不见邻居”的需求用端口隔离来处理接入交换机非常合适。这三个场景有一个共同点设备之间没必要互访但必须共享同一个IP子网。VLAN做不到这种精细度ACL又太繁琐端口隔离正是为这种场景定制的。1.2 VLAN、ACL都解决不了吗有人会问要做隔离直接用VLAN不行吗VLAN确实是隔离广播域的不同VLAN之间默认不互访。但问题在于VLAN一旦划分三层地址往往也得跟着重新规划。同一个交换机上如果每个端口一个VLAN同一台设备能用的VLAN ID资源有上限而且管理起来非常混乱。更重要的是监控、物联网设备往往要求整个网络使用同一个子网改成多VLAN多网段后NVR、网关、防火墙策略、组播配置全部要重动项目风险很大。ACL也能做到端口间拒绝而且比VLAN灵活能在同网段内按IP协议精确控制。但ACL是逐条匹配的规则多了以后不仅难维护还可能在低端交换机上影响转发性能。尤其是要做“都允许上网但互相不能通”这种需求得写两条以上规则还要小心规则匹配顺序配置稍微复杂就要反复调试。而端口隔离直接在交换芯片的转发面处理一条命令就能让一组端口互相“隐身”不涉及IP地址、不查ACL表直观多了。不过也要提醒一句端口隔离只是“二层隔离”的一种手段它解决的是“同一交换机内某些端口不能二层互通”。如果隔离对象跨了交换机、跨了三层路由那VLAN、ACL、防火墙还得上场。端口隔离不是万灵丹但它是接入层最顺手的一件工具。2. 端口隔离的工作原理与核心模式2.1 隔离的方向双向隔离和单向隔离端口隔离的本质是让交换芯片在查MAC地址表、决定转发路径的时候增加一条判断源端口和目的端口是否在同一个隔离属性集合内。如果在直接丢弃不管MAC地址表里有没有条目。所以说它是在数据面生效的不像ACL那样需要逐条匹配正常流量转发性能几乎不受影响。绝大多数设备默认实现的是双向隔离。A和B都加入隔离组之后A永远发不出到B的二层帧B也永远发不出到A的二层帧。这在监控、酒店场景里足够了。但偶尔也会有这种需求“领导电脑能访问员工电脑员工不能访问领导电脑”即单向访问。标准端口隔离命令通常不提供方向参数一般做成双向。要真正实现单向限制得借助ACL、策略路由或者上层防火墙我在后面配置章节会专门说这个坑。端口隔离方向的问题经常被忽略。很多朋友配好之后测试发现两边ping不通就以为达到效果了。但如果是需要“A可以访问BB不能访问A”端口隔离本身是做不到的。如果你直接把A和B放进同一隔离组那A访问B也不通。理解了这个“双向”默认特性才不会在实际项目里选错工具。2.2 隔离组组内隔离、组间放通为了适配“一组PC之间互相隔离但都要访问服务器”这种需求主流交换机厂商设计了隔离组。隔离组的概念并不难理解同一个隔离组内的端口互相隔离不同隔离组的端口默认可以互通没有使能端口隔离的端口可以访问所有隔离端口隔离端口也能访问它。这一点很关键。并不是说“所有使能了隔离的端口就互相不见”而是“同组的才隔离不同组的放通”。举个例子监控交换机里把摄像头端口都加入隔离组1NVR接在G0/0/24上不加入任何隔离组。那么摄像头之间二层不通但NVR可以访问所有摄像头。这个架构在监控网里是最合理的因为NVR需要主动取摄像头码流摄像头之间却不需要互相说话。我在现场见过不少同事配完之后发现PC还能访问服务器就以为隔离没生效其实这正是设计意图。判断隔离是否生效要看两端口的隔离组关系而不是看某个端口“是否配置了隔离”。如果目的端口是未隔离的服务器那源端口即使隔离了一样可以正常访问。简单记一句话只有入端口和出端口都落在同一个隔离组里流量才会被丢掉。2.3 与普通VLAN、ACL、MUX VLAN的横向对比端口隔离不是唯一的二层隔离手段实际项目里经常会拿它和VLAN、ACL做比较。我用一张表来概括对比项端口隔离划分VLANACL过滤主要作用同VLAN内端口互访控制隔离广播域按IP/协议做访问控制是否必须改IP网段不需要同网段可用一般需要重新规划网段不需要方向控制能力默认双向双向默认不通可按规则控制方向广播隔离效果很多产品只隔离单播隔离广播/组播不隔离广播维护成本极低中高高转发性能影响极小极小规则多时受限除了这三种还有一个容易混淆的概念叫MUX VLAN。MUX VLAN可以理解为VLAN内更精细化的端口隔离在一个VLAN里分出主VLAN和多个从VLAN从VLAN的端口可以和主VLAN通信但同组从VLAN之间默认隔离。它比端口隔离更灵活但配置也更复杂多数在汇聚层或框式交换机上使用。对纯接入层而言端口隔离的性价比最高。3. 华为/H3C交换机端口隔离配置实操3.1 华为交换机基础配置示例先以华为S系列交换机为例说明最简单的双向隔离配置。假设有两个PC分别接在GE0/0/1和GE0/0/2都划到VLAN 10要求两个PC之间不能互访但网关和服务器不受影响。system-view vlan 10 quit interface GigabitEthernet0/0/1 port link-type access port default vlan 10 port-isolate enable group 1 quit interface GigabitEthernet0/0/2 port link-type access port default vlan 10 port-isolate enable group 1 quit这段命令最关键的是port-isolate enable group 1。两个接口加入同一个隔离组后它们之间就不能二层互通了。GE0/0/3如果不配置这条命令无论它是接服务器还是接上联网关都和这两个端口保持互通。配置好之后可以用下面命令查看隔离组信息display port-isolate group输出里能看到隔离组编号、成员端口列表。很多朋友在ENSP模拟器里练了这个命令再到真机上发现版本不一样也可能命令有差异。比如部分华为框式、CloudEngine系列还支持port-isolate mode之类的参数。真机调试时第一件事是看版本display version看型号后再通过?补全命令提示确认参数是否支持。批量配置多个接口时建议用port-group或者一次性interface range的方式避免漏配。我习惯是先建一个端口组把摄像头口全部加进去然后统一配置port-group pg-camera group-member GigabitEthernet0/0/1 to GigabitEthernet0/0/16 port-isolate enable group 1这样既不会漏后面查看配置也方便。3.2 H3C交换机配置示例H3C Comware系统的配置思路和华为类似但命令细节不同。以H3C S5130系列为例把GE1/0/1和GE1/0/2划入隔离组1system-view vlan 10 port GigabitEthernet1/0/1 to GigabitEthernet1/0/2 quit interface GigabitEthernet1/0/1 port link-type access port access vlan 10 port-isolate enable group 1 quit interface GigabitEthernet1/0/2 port link-type access port access vlan 10 port-isolate enable group 1 quit验证命令是display port-isolateH3C默认所有端口都属于隔离组0但没有使能隔离行为所以端口之间照常转发。执行了port-isolate enable group 1后端口才会加入指定的隔离组并产生隔离效果。不同隔离组之间默认可以互通这跟华为的逻辑一致。需要提醒的是H3C的某些老款交换机可能不支持group参数用的是全局port-isolate enable方式所有使能隔离的端口自动加入同一个默认隔离组。这种模式下就无法区分多个隔离组了。配置前先用display version和display port-isolate ?确认自己的设备支持哪种模式免得把文档里的命令敲进去之后报错。3.3 服务器可访问各PC、PC之间互不可见的配置思路这是我在项目里遇到最多的需求也最适合用端口隔离来处理。假设有PC1、PC2、文件服务器都接在同一台华为交换机上。PC1和PC2都加入隔离组1文件服务器所在的端口不加入隔离组。这样PC1和PC2互相不通但PC1和PC2都能访问文件服务器。如果文件服务器接口也误配了隔离加入隔离组1那么PC访问文件服务器就会失败因为入端口和出端口都在同一个隔离组内数据帧会被直接丢弃。很多朋友把服务器、NVR、打印机也顺手加进了隔离组结果业务全断最后排查半天才发现是服务器口不该加。这个错误非常典型我至少看过三次。那么网络里如果有DHCP服务器呢同样不要把DHCP服务器端口加到PC的隔离组里。否则PC发送的DHCP Discover广播报文很可能被端口隔离规则挡掉拿不到地址。即便广播没被隔离DHCP服务器回给PC的单播ACK报文也可能因为“两端都在同一隔离组”而被丢弃。最简单的做法就是所有提供公共服务的端口不使能端口隔离或者单独放在另一个隔离组里。另外要注意上联口。如果PC需要访问网关或者外网上联口千万不要加进隔离组。否则PC连网关的流量也会被丢弃。端口隔离只应作用于需要隔离的接入端口上联口、服务器口、路由口都应该处于“未隔离”状态。3.4 单向访问如何用ACL配合实现端口隔离默认是双向的那真遇到“A能访问BB不能主动访问A”怎么办常见做法是在接入侧用ACL做方向限制。比如B是192.168.1.20A是192.168.1.10要求A可以访问B但B不能访问A。很多朋友直接在连接B的物理接口入方向写acl number 3001 rule 5 deny ip source 192.168.1.20 0.0.0.0 destination 192.168.1.10 0.0.0.0 rule 10 permit ip interface GigabitEthernet0/0/2 traffic-filter inbound acl 3001这条规则确实会把B主动发给A的报文挡住。但要注意普通交换机ACL是无状态的。A访问B的时候B要回复响应报文这个响应报文的源IP是B目的IP是A正好也匹配了上面的deny规则同样会被丢掉。结果就是A也访问不了B整个“单向访问”根本建立不起来。这就是网上很多人问“华为交换机ACL单向访问不管用”的核心原因。想要实现单向访问并且应答正常需要在两个方向都写合理的ACL允许B回包、拒绝B主动访问。实际操作上非常麻烦因为普通ACL无法区分“这是不是刚才那个会话的响应包”。真要实现严格单向访问建议交给防火墙或支持状态检测的设备去做。端口隔离加ACL更多是用来解决“同VLAN内不许互访”的应用层端口控制而不是全业务单向访问。在ENSP模拟器里我见过更隐蔽的问题ACL规则写好了但没应用到正确的接口方向或者用了traffic-filter却不小心应用到出方向。排查时先用display acl 3001和display traffic-filter applied-record看规则计数和应用端口确认有没有报文计数增加。如果计数增加但业务仍通说明ACL匹配顺序或规则本身有问题再逐条核对源、目的IP。4. 端口隔离的常见误区与排查实录4.1 配置后依然能互访先查这5个原因端口隔离配置失败的现象很直接两个PC还是能互相ping通。这时候按顺序排基本跑不出这几个原因。第一确认两个端口是不是真的在同一个隔离组里。只给其中一个端口配了port-isolate enable另一个没配那它们就不会被隔离。第二确认是不是跨交换机了。端口隔离是单台交换机芯片内部实现的A在1号交换机、B在2号交换机流量经过级联链路转发后1号交换机根本不知道B所在的端口是否处于隔离状态。这种跨交换机问题不是端口隔离能解决的。第三确认是不是走了三层转发。如果两个设备不在同一个网段需要通过网关三层转发那端口隔离只管二层帧三层转发后已经绕过隔离限制了。这时候要用VLAN间ACL才能阻止。第四确认上联口或网关相关的端口有没有被误加隔离组。我把上联口加进隔离组之后PC连DHCP都拿不到地址业务直接全断当时排查了很久。第五确认协议口有没有特殊放通。部分厂商对ARP、LLDP、DHCP等协议报文可能不做隔离处理这会导致隔离端口还能学到对方的ARP信息但实际应用流量发不过去。这不算配置失败而是设备行为差异。4.2 端口隔离是否影响广播、DHCP和网关这个问题我经常被问。端口隔离主要隔离的是二层单播帧广播和组播是否被隔离不同厂商实现不同。华为很多S系列交换机上端口隔离默认不隔离广播报文所以即使两个PC配置了隔离它们还是能互相收到ARP广播。这时用ARP命令可能还看到对方的MAC地址但真正ping的时候ICMP报文是单播会被丢弃于是ping不通。如果只看ARP表会误以为隔离没生效。H3C和其他一些厂商的端口隔离实现可能会把广播、组播也一起隔离配置不当就会导致DHCP失效。比如PC和DHCP服务器在同一个隔离组里PC的DHCP Discover广播被隔离掉服务器根本收不到自然无法分配地址。这个问题的本质是端口隔离是把“端口”作为隔离边界而不是把“业务”作为边界。凡是需要被终端访问的公共服务都得放在隔离组之外。网关不受影响的场景是终端通过上联口访问网关上联口没有加隔离组。只要上联口干净端口隔离就不会影响VLAN间路由和NAT上网。如果网关是一个三层子接口也就是单臂路由接在交换机上只要这个子接口的上联物理口不加隔离组隔离端口到网关的流量也是通的这一点可以放心。4.3 跨交换机为什么隔离不住很多项目规模稍大接入交换机不止一台。比如一台48口交换机接摄像头不够用了再加一台48口交换机两台之间用一根网线级联。这时在每台接入交换机上都配置端口隔离满足不了“跨交换机摄像头之间不能互访”的需求。原因很简单端口隔离状态没有封装在数据帧里传递A交换机芯片只看到“这个帧要从我某个口进来从另一个口出去”如果出端口是级联口它不知道对端最终会转发给谁。要解决跨交换机的二层隔离有几个思路。一是用汇聚交换机做MUX VLAN或者PVLAN把整个二层VLAN的隔离逻辑收敛在汇聚层统一管控接入交换机只做透明透传。二是如果核心网关能支持VLAN间ACL把需要隔离的IP段用ACL控制在网关设备上拦截但这会引入三层策略只适合规模不大的网络。三是物理分区直接把不同区域的摄像头划分到不同交换机再用VLAN或者物理隔离这样最笨但最可靠。我个人在监控项目里更推荐把摄像头按区域交换机分组再用“每台接入交换机内部端口隔离核心侧ACL”来做跨设备限制。端口隔离要放在最靠近终端的接入层跨设备的问题不要指望它解决否则后期会被各种“还有两台设备能互通”的反馈折腾死。4.4 工程实操中三条建议第一配置前一定要画流量矩阵。哪几个端口之间需要隔离哪几个上联口和服务口必须放通用一张表列清楚。不要凭感觉把所有端口都塞进隔离组否则第二天网络就出各种“奇怪”故障。第二隔离组编号要固定下来。比如100号给监控摄像头200号给办公PC300号给物联网设备。现场维护的人看到port-isolate enable group 100就知道大概是什么业务不用再去翻配置文件猜。组编号本身也有助于防止后续误操作。第三变更前先备份配置变更后做一次“双端测试”。测试时不要只看ping还要测试关键业务能不能获得DHCP地址、能不能访问文件服务器、摄像头能不能被NVR拉到流。端口隔离影响的往往是那些不起眼的服务一旦被隔离组误伤排查起来非常痛苦。用display current-configuration预先看一遍所有隔离相关配置再动手能省掉一大半踩坑时间。最后说一个我自己的习惯端口隔离不是替代VLAN和ACL的大一统方案而是“接在同一台接入交换机上的同VLAN终端互访控制”的最后一层挡板。我一般把它用在一张网最边缘的接入层只需要挡住同一台设备里的水平流量。至于跨交换机的隔离再交给VLAN、ACL或防火墙去处理。这个组合用熟了之后客户网络里能少掉很多莫名其妙的ARP攻击和内部横向流量。
阅读完成 · 觉得有帮助?