有同事反馈用公司的192.168.192.0/19的网段的ip通过vpn无法访问北京的虚拟机172.16.1.46,但访问另一个虚拟机172.16.1.143是可以的,问如何排查定位?
自己ping了一下,并pathping跟踪经过的节点。如下图:
ping出现time out的可能性原因:
1、目的设备防火墙拦截的ping的request消息,导致高层无法收到,所以不回ping的reply消息。
2、跨网段环境中存在ip冲突或一设备多网卡,接在同一交换机下,回答了访问的arp请求,把错误的mac给了源主机,导致网关把ping的request消息发给其他mac地址。
3、也与目的主机的路由相关,没有回程路由,如同网段可能掩码错误,没有配置网关的话。
4、回程路由指向其他ip地址,导致源ip没有收到ping的reply消息。
5、ping消息的入接口和回程出接口不是设备的同一接口,设备开启方向路由检测导致的不回包。
6、环境中传输有问题,误码过高或者带宽被占用,导致节点压包,丢包。
Ping的结果是time out,跟踪发现经过节点4后,就没有回包了,感觉应该是对方服务器的回程路由或者防火墙问题,因为这个172.16.1.46这个设备在北京的访问是正常的,而且节点也没有icmp的主叫不可达之类的消息过来。
同事登录服务器,检查路由如下:
看到,包是从em1的172.16.1.0进来的,而路由表里有一个与之匹配掩码长的路由是192.168.0.0/16,走em2,判断一般linux系统,开启反向路由检测功能,就是收到包后检查回程路由的出口是否和入口是同一个接口,不是的话,就舍弃。这个time out应该是这样。
考虑到原来做的路由不知道作用是啥,于是决定加一条回程路由指向172.16.1.1,于是添加192.168.192.0/19的回程路由,指向172.16.1.1,走em1接口。
如何添加一个掩码为19位的路由,比192.168.0.0/16优先,结果ping正常。
总结: