挂 VPN 无法 ping 通内网 SUSE 11 服务器

大家好,我遇到一个很诡异的网络问题,google了好久没法解决。
我用笔记本电脑在公司连wifi,访问SUSE 11 Server,连接正常,回家后,连家里的wifi,连公司vpn,在直接连server,就会出现连不上的情况,ping显示timeout,这时候,我通过跳板机连上server,tcpdump抓包之后可以看到server端收到了ping请求包和tcp sync包,就是没有回复响应的ping reply包或者 tcp ack/sync包,tcpdump的抓包里没看到这2种包,奇怪的是,过了几分钟之后,又能通过笔记本直接连上服务器,回复包什么的都有了。
请问有大神知道为什么吗,或者怎么排查?

乱猜一下:会不会和 ARP 有关?

检查下 VPN 宿主机的路由表。SLE 不回应 ping 的原因要么是防火墙挡住了,要么是 VPN 没传回你。

你好,我是在服务器端抓包,服务器是收到ping request包的,但是没有抓到回复包,应该是服务端没有响应request包?或者在响应的时候ignore掉了request包?tcp建连也是的,sync包确实收到了,但是没有回应ack/sync

我理解ARP有问题的话,在服务端抓包应该能抓到回复包的?另外访问cenos服务器没问题,arp在vpn网关,不知道怎么排查

好像晚了点…如果是你连上 VPN 后什么都不做过几分钟自己就会好,我觉得很像某种自动学习的东西在收敛,可能是 ARP, 可能是某种动态路由协议,也可能是网关上的防火墙有类似默认阻止陌生地址之类的策略

但是你说服务端抓不到回包确实有点奇怪,能不能描述下服务端的部署/网络情况,比如 VPN 服务器是运行在物理机上还是在虚机里面,有没有跑什么路由协议,服务器内/宿主机上是否有防火墙,服务器到客户端之间是否有专门的防火墙…之类的

另外还可以试试用别的设备在家里和公司的网络环境分别连接,看是否会有相同的现象

把vpn断了看有没有响应

感谢,现在发现那个服务器为了跑公司产品,替换了一些lib库,当然这些lib库都是在该平台下编译的,把这些lib库屏蔽掉之后,就没问题了,目前编库的同事在排查,根据他重现这个问题,发现回复包被发送到另外一个接口了,因为他在traceroute的时候发现报错,报错说包被发送到一个down的接口那,服务器的接口情况是em1:up,em2: down,也就是说em1收到请求包,回复包发送到em2了。等找到问题所在,在把问题原因和解决方法发上来吧,非常感谢各位大神。

“em1收到请求包,回复包发送到em2了” 这个听起来就很像路由的问题呀,检查过默认路由 / VPN 客户端网段所在的路由条目吗?
不过如果你们是通过底层某些手段直通网卡了的那就不一定了…

好吧,问题解决了:

net.ipv4.rt_cache_rebuild_count = -1

问题就是路由,内核ip route cache功能关掉就好了,默认值是4,设成了7。

SLE 内核版本是是3.0.13,这个版本的内核还有ip route cache功能,centos是3.10版本的内核,这个功能去掉了。