为什么配置二层远程端口镜像需要关闭MAC学习功能
首先了解一下二层远程端口镜像如何将镜像报文转发到监控设备。
如图8-19所示,在二层远程端口镜像中,镜像报文会通过VLAN10转发到中间设备SwitchB。SwitchB是没有任何镜像配置的,镜像报文只能通过一般二层通信流程转发到Server。而且,由于镜像报文的目的MAC与原始报文目的MAC相同,不是监控设备的MAC,也就是说,镜像报文不能通过MAC表进行转发,而是依赖未知单播的处理流程——广播方式进行转发。只要VLAN10对应的MAC表中不包含镜像报文目的MAC对应的表项,镜像报文就可以通过广播方式转发到Server。
绝大多数二层远程镜像场景中,在中间设备上,用于转发镜像报文的VLAN是不会学习到镜像报文的目的MAC的,即镜像报文可以通过广播的方式转发到监控设备。但是在如下的场景,因为VLAN内有镜像报文目的MAC对应的MAC表项,而导致二层远程镜像失败。
原始的业务流与复制后的镜像流用同一个VLAN转发
如图8-20所示,某公司为了监控研发部员工访问DNS Server的流量,在SwitchA上配置二层远程端口镜像,并且研发部与DNS Server通信的流量、镜像流量都通过VLAN10转发。此处以HostA访问DNS Server为例,当SwitchA收到来自HostA的报文,就会复制一份镜像报文,向VLAN10转发,目的MAC和原始报文一样,都是DNS Server的MAC地址。由于HostA与DNS Server之间的通信会学习到DNS Server MAC地址对应的MAC表项,所以当SwitchB在VLAN10内收到目的地址为DNS Server的MAC地址的镜像报文时,就会按MAC表进行转发,二层远程端口镜像失败。
解决方法:
配置二层远程端口镜像时不要用同一个VLAN转发普通业务流量和镜像流量,如图8-21所示。如果必须要使用同一个VLAN,可以在SwitchB上用mac-address learning disable命令将VLAN10的MAC学习功能关闭,但是这会导致链路带宽的浪费,尤其是用户接入比较多的情况下。
发送端不同的镜像流用同一个VLAN转发
如图8-22所示,某公司为了监控研发部与市场部之间的通信流量,分别在SwitchA和SwitchC上配置了二层远程端口镜像,并且用于转发镜像流量的VLAN都是VLAN10,部门之间通信用的是其他VLAN。当SwitchA和SwitchC的镜像端口收到来自于下游主机的流量时,它们就会镜像一份向VLAN10转发。由于两个方向镜像报文的源MAC是各自Host的MAC地址,会在SwitchB上学习到会对应的MAC表项。而它们的目的MAC地址又是对方Host的MAC地址,就会在MAC表中查到对应的表项,镜像报文就会按MAC表转发,二层远程镜像失败。
通过下面三种方法之一都可以解决上面的问题: