Cisco VPC peer-gateway 对直连 BFD 邻居建立的影响
作者简介:冯亚伟,去哪儿网 NETOPS,2014 年 7 月加入去哪儿网,拥有丰富的网络运维经验,现负责公司 IDC 和骨干传输网络的运维工作。
一、场景介绍
如下图所示:两台思科 nexus 交 换机通过 VPC 为服务器提供双上联接入;服务器通过 bond0(主备模式)双上联到两台交换机上面。连接 SW1 的网卡为主用网卡,连接 SW2 的网卡为备用网卡;服务器作为 k8s 节点需要与两台接入交换机建立 iBGP ,为了缩短 BGP 的收敛时间用单跳 BFD 进行链路故障检测。两台接入交换机使用 interface vlan IP 与 Server 建立 BGP 和 BFD 邻居。Server 与 SW2 的流量需要经过 VPC peer-link。
二、问题介绍:
Server 与 SW2 的 BGP 正常建立,BFD 邻居不能正常建立。
三、问题处理
设备 IP 及 MAC 地址:
如下图所示:通过抓包,发现 SW2 收到 server 的 BFD 数据包后,给 server 回复了一个 ICMP port unreachable 消息,说明 SW2 没有处理 server 的 BFD 数据包。
如下图:再次仔细观察发现, SW2 收到的来自 server 的 BFD 数据包的 TTL 值是 254(正常应该是 255),数据包的源 MAC 地址是 SW1 的 MAC 地址。说明数据包在经过 SW1 时, SW1 对它进行了三层转发,因此 TTL 值才会被减 1,源 MAC 地址被替换。
通过查阅 Cisco NX-OS BFD 的文档发现出于安全考虑,思科交换机在处理直连 BFD 的数据包之前会先检查数据包的 TTL 值,如果不是 255,则不会对数据包进行处理。SW2 看到来自 server 的 BFD 数据包的 TTL 值为 254,所以没有处理 BFD 数据包,然后给 server 回复了一个 ICMP 端口不可达消息。
那么,server,SW1,SW2 都属于同一网段,为什么 SW1 要对数据包进行三层转发呢?要弄清楚这个问题,我们首先需要了解一下 VPC peer-gateway 的功能:VPC peer-gateway 使交换机在收到数据包的目的 MAC 地址是它的 vpc peer 的 MAC 地址时,充当数据包的网关对其进行三层转发,以减少了跨 VPC peer-link 的二层流量。这是一种保护 VPC Peer-link 的机制。启用 vpc peer-gateway 后,交换机复制本地 interface vlan MAC 地址给它的 vpc peer,复制过去的 MAC 地址在它的 vpc peer 的 MAC 地址表中使用 G flag(Gateway flag)进行标记。
我们在实验环境中对 vpc peer-gateway 进行了观察:
测试拓扑同场景介绍中的拓扑。
测试设备:
测试 1:SW1 启用 vpc peer-gateway, SW2 不启用 vpc peer-gateway,查看两台交换机的 MAC 地址表。
如下图所示:在 SW1 上启用 vpc peer-gateway 后,其 interface vlan 400 的 MAC 地址 00ea.bd5f.dfa7 在 SW2 的 MAC 地址表中有 G 标记。发送到 SW1 的 interface vlan 400 的 MAC 地址的数据包在经过 SW2 时,SW2 会对数据包进行三层转发,数据包的源 MAC 地址会被替换为 SW2 的 MAC 地址 6c8b.d3ca.ff67,且 TTL 值会被减 1。在 SW2 上未启用 vpc peer-gateway,其 interface vlan 400 的 MAC 地址 6c8b.d3ca.ff67 在 SW1 的 MAC 地址表中没有 G 标记。发送到 SW2 的 interface vlan 400 的 MAC 地址的数据包在经过 SW1 时,会通过二层转发经过 vpc peer-link ,源 MAC 地址不会改变,TTL 值也不会减 1。而在 SW1 和 SW2 上 HSRP VIP 的虚拟 MAC 地址 0000.0c07.ac01 都有 G 标记。所以,发送给 HSRP VIP 的数据包在 SW1 和 SW2 上都会进行本地三层转发。
测试 2:SW1 关闭 vpc peer-gateway , SW2 启用 vpc peer-gateway ,查看两台交换机的 MAC 地址表。
如下图所示:SW1 关闭 vpc peer-gateway 以后,其 interface vlan 400 的 MAC 地址在 SW2 的 MAC 地址表中的 G 标记消失;SW2 启用 vpc peer-gateway 以后,其 interface vlan 400 的 MAC 地址在 SW1 的 MAC 地址表中出现 G 标记;而在 SW1 和 SW2 上 interface vlan 400 的 HSRP VIP 的虚拟 MAC 地址依然都有 G 进行。
测试 3:SW1 和 SW2 都关闭 vpc peer-gateway ,查看两台交换机的 MAC 地址表。
如下图所示:在 SW1 和 SW2 上关闭了 vpc peer-gateway 以后,其 interface vlan 400 的 MAC 地址在它的 vpc peer 的 MAC 地址表中的 G 标记消失;而 interface vlan 400 的 HSRP VIP 的虚拟 MAC 地址在两台 vpc peer 的 MAC 地址表中仍然有 G 标记,所以在关闭了 vpc peer-gateway 以后,以 HSRP VIP 为网关的要去往 vpc 域外或者其它 vlan 的数据包,在两台 vpc 对等体上仍然会进行本地三层转发,而不会出现 HSRP standby 设备将去往 HSRP VIP MAC 地址的数据包通过 vpc peer-link 二层转发到 HSRP active 设备的现象。
测试结论:
vpc peer-gateway 的启用会让本地 interface vlan 的 MAC 地址在它的 VPC peer 的 MAC 地址表中有 G 标记。交换机对发送到有 G 标记的 MAC 地址的数据包进行三层转发。不管 vpc peer-gateway 是否启用,HSRP VIP 的虚拟 MAC 地址在两台 vpc 对等体的 MAC 地址表中都有 G 标记,两台 vpc 对等体在不启用 vpc peer-gateway 的情况下,也会本地三层转发目的 MAC 地址是 HSRP VIP 虚拟 MAC 地址的数据包。
四、处理结果:
现在我们知道是 vpc peer-gateway 功能使 SW1 对 server 发送给 SW2 的 BFD 数据包进行了三层转发。在关闭了 vpc peer-gateway 功能以后,SW1 二层转发 server 发送给 SW2 的 BFD 数据包。数据包的 TTL 值不再被减 1,server 与 SW2 的 BFD 邻居正常建立。
五、注意事项与参考文献
在测试时发现 vpc peer-link 不使用 LACP 时,也会影响跨 vpc peer-link 的 BFD 邻居正常建立,建议作为 vpc peer-link 的 port-channel 使用 LACP 协议。
BFD RFC:datatracker.ietf.org/doc/html/rf…
Cisco NX-OS bfd:www.cisco.com/c/en/us/td/…
Cisco VPC Peer-gateway:community.cisco.com/t5/switchin…
BFD over LACP portchannel:www.cisco.com/c/en/us/sup…
版权声明: 本文为 InfoQ 作者【Qunar技术沙龙】的原创文章。
原文链接:【http://xie.infoq.cn/article/74fb467fb39042cfe2622f164】。未经作者许可,禁止转载。
评论