遇到虚机不通网关的问题,首先看二层通信是否正常,如果二层通信都不正常,那么就是基本的通信都不行。如果二层正常,那么就是不通网关的问题。现将工作中遇到的情况总结如下。
情况一:虚机所在的宿主机没有加路由(以CNP3.5为例)
1、查看虚机上面的arp表,确认其中是否存在vpcgw的网关地址,使用如下命令:
arp -n
就是查子网数据库中的网关地址和arp地址。这一步的目的是为了查看虚机能不能正确学习到mac地址。
2、查看虚机所属subnet的id,去数据库查询,使用如下命令
select host_ip,network_id,mac,reg5,fix_ips from port where device='';
3、查看该subnet在vpcgw上面对应的loop口的ip地址与mac地址,使用如下命令查询:
vppctl show interface ctl |grep id
vppctl show interface addr loopxxx
查看mac地址,使用该命令:vppctl show hardware-interface loopxxx
4、查看虚机所属network 的segmentation_id
5、查看vpcgw上面vxlan tunnel信息,使用如下命令
vppctl show vxlan tunnel | grep vni segmentation_id
6、查看虚机所属ovs的vtep口ip,使用命令如下:
# ovs-vsctl show
7、查看虚机所属ovs与vpcgw集群的连通性, 在虚机的宿主机上ping vpp的vtep地址,此时网络不通
8、查看虚机所属ovs的路由表,可以与正常ovs的路由表做对比,使用如下命令查询
route -n
至此,定位到虚机不通网关的原因是虚机所在的宿主机没有学习到路由。
总结
以上总结只是虚机不通网关问题中的一个示例,实际的虚机不通网关问题要复杂的多。本文所讲述的例子是基于CNP3.5讲述的,其查询命令是CNP3.5的命令,但是排查逻辑是通用的,在实际工作中可以借鉴该排查思路。