团队已经搭建过几次openstack后,决定分组搭建环境,并将network节点独立出来。
安装完成后,发现ssh远程连接不上,通过VNC发现机器是正常的。
经过多次测试,开机后ssh连接正常,但等Linux bridge启动后就连接断开,后经分析,发现新建的拥有ip的网桥的mac地址与物理网卡的mac地址不一致,试着指定网桥的mac为网卡的mac,ssh连接恢复。
# ifconfig brqfd64f5fd-a5 hw ether fa:16:3e:90:ee:b0
后面团队内分析由于ip与mac映射改变了,导致无法通信,一度认为这是openstack的bug。
后面查看了几个环境的网络信息,发现网桥与物理网卡的mac不一定相同,但本身网络都是没有问题的。分析与网络节点失联,原因可能做了类似ip与mac绑定的策略,ip与mac映射关系改变后就无法通信。
相同:
不同:
但为什么bridge的mac地址有时与物理网卡一致,有时不一致,引起了注意。
后在网上查找相关的资料,发现linux 的网桥mac是按如下规则变化:
bridge的MAC地址会根据bridge中port的变化,自动选择port中最小的一个MAC地址作为bridge的MAC地址。可以通过hw ether制定bridge的mac地址为port中的一个。
因此,做了如下测试:
1、新建BRIDGE和3个TAP设备
brctl addbr br0
ip tuntap add "tap1" mode tap
ip link set "tap1" address 00:50:56:a4:41:b6
ip tuntap add "tap2" mode tap
ip link set "tap2" address 00:50:56:a4:41:b5
ip tuntap add "tap3" mode tap
ip link set "tap3" address 00:50:56:a4:41:b7
# ifconfig br0
br0: flags=4098<BROADCAST,MULTICAST> mtu 1450
ether 00:00:00:00:00:00 txqueuelen 0 (Ethernet)
2、添加mac居中的tap设备
# brctl addif br0 tap1
# ifconfig br0
br0: flags=4098<BROADCAST,MULTICAST> mtu 1500
ether 00:50:56:a4:41:b6 txqueuelen 0 (Ethernet)
3、添加mac最小的tap设备
# brctl addif br0 tap2
# ifconfig br0
br0: flags=4098<BROADCAST,MULTICAST> mtu 1500
ether 00:50:56:a4:41:b5 txqueuelen 0 (Ethernet)
4、添加mac最大的tap设备
# brctl addif br0 tap3
# ifconfig br0
br0: flags=4098<BROADCAST,MULTICAST> mtu 1450
ether 00:50:56:a4:41:b5 txqueuelen 0 (Ethernet)
5、删除mac最小的tap设备
# brctl delif br0 tap2
# ifconfig br0
br0: flags=4098<BROADCAST,MULTICAST> mtu 1450
ether 00:50:56:a4:41:b6 txqueuelen 0 (Ethernet)
通过如上步骤证实,bridge自动选择port中最小的一个MAC地址作为bridge的MAC地址。