记录一个H3C 三层交换机自环通信问题
三层交换机vpn-instance自环问题排查记录
设备型号:H3C S6520X-54QC-EI
版本:H3C Comware Software, Version 7.1.070, Release 6652P02
问题起因:
我在使用使用S6520X配置vxlan过程中(静态隧道且无分布式网关情况)需要使用多个终端进行连通性测试,为了方便使用一台支持ip VPN-Instance/VRF的三层交换模拟多个终端;
问题现象
模拟终端的方式为将物理端口转换为三层接口(route模式)并划分进不同的ip vpn-instance中,由于路由表隔离此时每个端口可以理解为一个独立终端。不过在测试过程中发现无法通信,在排除vxlan配置错误情况后,做了进一步测试发现即使两端口直接物理连接仍然无法通信。问题简单化为下图这种自环情况:
解决办法
手动指定三层接口的MAC地址,并做如下配置
undo mac-address static source-check enable
首次排查
检查后发现,三层交换机端口切换为路由模式后端口的mac地址均相同;此时我恍然大悟,同一广播域下mac地址冲突难怪无法通信,随后我将端口mac地址改成唯一,但仍然无法通信;
但是当我将三层物理端口换成二层物理口配合vlanif时候就正常了。此时还是不解其中原因。
三层模式+手动设置mac地址
再次排查
后来我寻求H3C 400的帮助总解决此问题,即关闭 **静态mac地址原校验功能**。
原因分析
交换机接口默认为2层接口,三层一般使用vlanif,此交换机(本例中为H3C S6520X)接口支持模式切换成三层(route模式),但是三层接口的mac地址均相同,在没有在自环的场景使用一般不会有问题;
但是本例中要求设备接口自环(或者说处于同一个广播域中),同一个广播域通信的基础是具有域内唯一的mac地址,进而需要更改端口mac地址;
但又会导致另一个问题:手动指定的mac会被当做静态mac地址处理,设备默认开启了静态mac地址源校验;上图拓扑当37口收到来自38口的数据包后,准备回包(目的mac为38口的mac)经过静态mac地址源检查,发现此mac位于本地拒绝发送,这就导致无法正常通信;
这里有一点复杂:对于接口37来说38口的mac位于link上,但是对于mac源检查来说此mac位于local(本地)正是由于这种不一致导致的无法正常回包;
使用vlanif的方式之所以正常是因为vlanif的mac地址是不同的,也就无需手动指定mac地址,从而不会触发静态mac地址源校验安全机制。
vlanif mac不同
后记
期间我也测试过其他设备,如下发现一并记录:
- 不通品牌、不通型号设备默认行为并不一样;例如H3C 10510X vlanif的mac地址是一样的;华为的S5735交换机无法手动更改vlanif的mac地址,且mac地址也是相同的;H3C/HUAWEI路由器默认的三层接口mac地址不同;
- 在S6520x中虽然指定mac地址会被当做静态mac,但是执行下面命令无法查到
- 当手工在接口配置mac地址时,静态mac地址的检查不仅限于激活(UP状态)的接口,如下这种情况在开启“静态mac源校验”时也是无法正常通信的:
某些设备将vlanif的mac地址设置为相同,也建议设为相同的原因估计也是如此。
4. 一个教训:三层交换机尽量使用vlanif不建议使用接口的route模式,这样也更灵活。