windows连接L2TP Over IPSec后可以ping通服务器但无法访问web服务

操作系统版本:windows 10 21H2 LTSC
VPN: L2TP Over IPSec
故障描述:
前置条件: 建立VPN后,取消VPN生成默认路由(也可以不取消,不是造成故障的原因),手动添加目标网段的路由: 管理员cmd route add x.x.x.x mask x.x.x.x x.x.x.x
使用命令行终端 可以ping通多个不同系统版本的服务器,并确认有线以太网网段与VPN非同网段目标网段也非公网地址tracert也是通过VPN接口地址转发,但是使用浏览器访问服务器提供的web服务(使用IP地址的方式非域名)均不能打开网页。

环境对比测试:
1.已经确认内网PC可以访问WEB服务;
2.使用同一网络环境下的macOS系统终端拨入VPN后也可以访问WEB服务;
3.非同一网络环境非同一windows版本下的windows终端拨入VPN后也可以访问WEB服务;
4.相同PC终端,不使用有线连接,连接手机热点后拨入VPN,也可以访问WEB服务。

解决思路:

登录WEB服务器,tcpdump抓包查看到在PC终端与WEB服务器段在进行到HTTP报文传输请求后,随即出现大量TCP DUP ACKTCP Retransmission(即服务器的响应client未收到,需要服务端重新发送响应报文,但client始终未收到)。

对比正常访问WEB服务的client交付的报文,未出现TCP DUP ACK。随即猜测是否是服务器到Client之间的链路丢失了报文。结合既往经验,中间链路丢包极有可能是链路MTU限制导致,虽然有TCP协商MSS,但有可能是中间链路小于两端MTU,那样MSS就无法探测到最小值(猜测,知识原理掌握不够)。所以在发送ICMP包能够通,WEB业务请求时丢包的原因(WEB业务数据大于默认ICMP包size)。

通过ping x.x.x.x -l 1500来测试发现到达某个值果然就丢包了。
通过cmd命令查看各个接口的MTU值:netsh interface ipv4 show subinterfaces
可以看到如图(示例)

虽然VPN的MTU小于以太网的MTU,但是在添加了PPP的报头后,就超过了以太网的MTU,进而导致丢包。


解决办法:

使用命令:管理员CMD运行netsh interface ipv4 set subinterface "VPN连接名称" mtu=1280 store=persistent 永久修改VPN接口的MTU值。


本文参考1
本文参考2

posted @ 2022-10-13 21:31  来自江南的阿豪  Views(57)  Comments(0Edit  收藏  举报