windows連接L2TP Over IPSec后可以ping通服務器但無法訪問web服務
操作系統版本:windows 10 21H2 LTSC
VPN: L2TP Over IPSec
故障描述:
前置條件: 建立VPN后,取消VPN生成默認路由(也可以不取消,不是造成故障的原因),手動添加目標網段的路由: 管理員cmdroute 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 ACK和TCP 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值。

浙公網安備 33010602011771號