2.2 配置VTP Pruning
SW1# vlan database
SW1(vlan)#vtp pruning
Pruning switched ON
SW1(vlan)#exit
APPLY completed.
Exiting....
SW1#
这个时候,根据拓扑可以看出,VTP 修剪只会在SW_ACCESS交换机上有效果,要注意的是 VLAN 1 是不应该被裁剪的,而且也不支持裁剪,默认裁剪的范围是VLAN 2-1005。我们可以通过命令Show interface trunk 来查看哪些TRUNK链路上的哪些VLAN被裁剪:
SW1:show interface trunk
SW1#sh inter trunk
Port Mode Encapsulation Status Native vlan
Fa0/11 on 802.1q trunking 1
Port Vlans allowed on trunk
Fa0/11 1-1005
Port Vlans allowed and active in management domain
Fa0/11 1,10,20
Port Vlans in spanning tree forwarding state and not pruned
Fa0/11 1,10,20
//可以看到并没有任何VLAN被裁剪因为去往VLAN 10 20的流量都会走F0/11
SW2:show interface trunk
SW2#sh interfaces trunk
Port Mode Encapsulation Status Native vlan
Fa0/12 on 802.1q trunking 1
Port Vlans allowed on trunk
Fa0/12 1-1005
Port Vlans allowed and active in management domain
Fa0/12 1,10,20
Port Vlans in spanning tree forwarding state and not pruned
Fa0/12 1,10,20
//可以看到并没有任何VLAN被裁剪因为去往VLAN 10 20的流量都会走F0/12
SW_ACCESS:show interface trunk
SW_ACCESS#sh interfaces trunk
Port Mode Encapsulation Status Native vlan
Fa0/1 on 802.1q trunking 1
Fa0/11 on 802.1q trunking 1
Fa0/12 on 802.1q trunking 1
Port Vlans allowed on trunk
Fa0/1 1-1005
Fa0/11 1-1005
Fa0/12 1-1005
Port Vlans allowed and active in management domain
Fa0/1 1,10,20
Fa0/11 1,10,20
Fa0/12 1,10,20
Port Vlans in spanning tree forwarding state and not pruned
Fa0/1 1,10,20
Fa0/11 1,10
Fa0/12 1,20
//可以看到,VTP修剪已经在SW_ACCESS上生效了,因为SW1上只配置了SVI10,交换机会把SVI10当做VLAN 10的直连接口,但是没有配置VLAN 20 的SVI接口,所以SW1会认为自己没有VLAN20的客户,所以SW_ACCESS会在去往SW1的TRUNK 接口F0/11上面把VLAN 20给裁剪掉。
SW2和SW1类似,我们也可以看到和R1连接的TRUNK接口F0/1上面没有进行裁剪,但为什么SW_ACCESS知道对端的R1需要VLAN 10 和 20的流量呢?因为在启用了VTP Pruning的交换机上面,如果一个TRUNK接口没有VTP消息传过来,是不会对这个接口进行VTP Pruning的。
2.3 配置SW_ACCESS 为VTP Transparent
配置SW_ACCESS:
SW_ACCESS#vlan database
SW_ACCESS(vlan)#vtp transparent
Setting device to VTP TRANSPARENT mode.
SW_ACCESS(vlan)#exit
APPLY completed.
Exiting....
SW_ACCESS#
这时我们再看VTP Pruning情况:
SW_ACCESS:
SW_ACCESS#show interfaces trunk
Port Mode Encapsulation Status Native vlan
Fa0/1 on 802.1q trunking 1
Fa0/11 on 802.1q trunking 1
Fa0/12 on 802.1q trunking 1
Port Vlans allowed on trunk
Fa0/1 1-1005
Fa0/11 1-1005
Fa0/12 1-1005
Port Vlans allowed and active in management domain
Fa0/1 1,10,20
Fa0/11 1,10,20
Fa0/12 1,10,20
Port Vlans in spanning tree forwarding state and not pruned
Fa0/1 1,10,20
Fa0/11 1,10,20
Fa0/12 1,10,20
//可以看到把SW_ACCESS配置成透明模式后,VTP 修剪已经失效
SW1:
SW1#sh inter trunk
Port Mode Encapsulation Status Native vlan
Fa0/11 on 802.1q trunking 1
Port Vlans allowed on trunk
Fa0/11 1-1005
Port Vlans allowed and active in management domain
Fa0/11 1,10,20
Port Vlans in spanning tree forwarding state and not pruned
Fa0/11 1,20
分析:这时就出现问题了,我们知道SW1上面启用的是SVI 10,也就是需要与R1上面的10.1.1.254通信,而这时vlan 10 却在去往SW_ACCESS的Trunk接口F0/11上被裁剪了,所以导致了和R1子接口通信失败。
SW2:
SW2#sh interfaces trunk
Port Mode Encapsulation Status Native vlan
Fa0/12 on 802.1q trunking 1
Port Vlans allowed on trunk
Fa0/12 1-1005
Port Vlans allowed and active in management domain
Fa0/12 1,10,20
Port Vlans in spanning tree forwarding state and not pruned
Fa0/12 1,10
//与SW1一样,自己需要Vlan 20通往R1却被裁剪了。
3、问题原因
但是为什么SW1没有裁剪VLAN20,SW2没有裁剪VLAN10?
要想真正了解VTP Prung的工作机制,我们需要通过抓包来分析。
正常情况下VTP Pruning功能是通过code为0x04的join/prue消息来实现的,消息里面not pruned vlan字段指出我需要哪些VLAN的流量。
我们先来看看正常情况下VTP修剪机制是怎么实现的。
一旦启用了VTP Pruing,交换机将会每6秒向所有Trunk接口发送VTP join/prue消息。
SW1发往SW_ACCESS:
我们可以看到,源地址为SW1的MAC地址:cc04.1584.0000,目的地址组播地址:cc04.1584.0000,这个组播地址被多个协议所使用。VTP协议最下方的通告活动VLAN字段指出了,本地有哪些VLAN是活动的,要注意的是VTP Pruning是对出的流量做过滤。
SW_ACCESS收到这个VTP信息就知道,SW1方向有VLAN 10在活动,所以在正常情况下是应该修剪掉20的,这和前面的正常情况相符合。
SW2发往SW__ACCESS:
SW2相应的报告活动的VLAN是 20。
SW__ACCESS发往SW1/SW2:
由于SW_ACCESS与R1之间的TRUNK没有VTP信息传输,所以SW_ACCESS会把所有VLAN流量都当做在本交换机上存在,并通告出去。也是因为SW1/SW2都收到了这个VTP消息,在去往SW_ACCESS的Trunk接口上都不会对VLAN 10 与 VLAN 20进行修剪。这也和前面的正常情况的现象相符合。
根据前面的抓包可以得出,一旦SW_ACCESS变成透明模式,不会生成VTP消息,但是却会转发VTP消息(注:当网络中有Transparent模式的交换机时,推荐在网络中使用VTP版本2 ,版本1 Transparent模式的交换机只会转发自己相同域且密码一致的VTP消息,而版本2会转发任何VTP消息) 。使得SW1在F0/11接口上收到了经过SW_ACCESS转发来的SW2的VTP消息,但是SW_ACCESS自己没有生成的VTP消息(由于与R1启用了Trunk但却收到不R1方向发来的VTP信息,需要放行所有VLAN),所以SW1在接口F0/11上面只收到了关于VLAN 20的VTP消息,所以对VLAN 10进行了裁剪,相反的SW2在接口F0/12上面只收到了SW1关于VLAN 10的VTP消息,所以对VLAN 20进行了裁剪,这就导致了SW1、SW2与R1之间通信出现了问题。
结论
这是由于VTP Transparent模式的特性决定的,所以只有要想避免出现这种问题,如果在网络中启用了VTP Pruning功能,请注意不要把位于拓扑边缘的交换机配置成Transparent模式,这会导致如果某VLAN的客户端只存在于这台交换机下的话(在本例中是VLAN 10与20),其它交换机将会在与这台透明模式交换机连接的Trunk接口上裁剪掉去往这个VLAN的流量。
可以发现,这种情况是属于比较难见的情况,但是不能否认会发生,我们正常都会把新加入的思科交换机设为VTP Transparent模式,然后才加入到网络中,但是这时要注意,请避免某些VLAN的客户端只存在于这台新加入的且VTP 设为Transparent模式的交换机上,或是在这台Transparent模式的交换机单独新增加VLAN,除非该VLAN只需要在这台交换机上单独使用。
转载于:https://blog.51cto.com/lanbiyu/991461