一次VPN隧道建立異常分析
一、故障現象:
賓館無線上網使用者使用VPN客戶端無法與VPN閘道器正常建立VPN隧道, VPN客戶端一直停留在如下狀態:
二、環境介紹
1、賓館無線上網使用者經過運營商的NAT裝置(使用NAT POOL做的地址轉換)雙鏈路訪問網際網路;
三、隧道建立異常分析
1、通過故障現象,可以發現隧道無法建立時,顯示為正在協商,並且停止在協商第一階段:野蠻模式正在傳送第一個協商包,說明IPSEC VPN隧道建立異常,問題是出在協商過程;
3、抓包分析(分別在VPN客戶端和VPN閘道器上抓包)
3.1、抓包之前,先了解下天融信VPN客戶端隧道建立過程
天融信VPN客戶端與天融信VPN閘道器建立IPSEC VPN隧道的主要流程如下:
1)VPN客戶端通過VPN閘道器的TCP 2012埠,在閘道器上進行註冊;這個過程閘道器上會判斷(可以通過使用者名稱+口令的形式,也可以通過證書的形式)該VPN客戶端使用者是否為閘道器上預先定義的合法使用者,如果是,將給客戶端分配一個虛擬地址用於加密隧道內的通訊;
2)VPN客戶端註冊成功後,客戶端會向閘道器的UDP 2012埠傳送通告,閘道器則向VPN客戶端傳送反向通告;
3)VPN客戶端通過野蠻模式進行第一階段協商;
4)第一階段協商成功的話,則通過快速模式進行第二階段協商;
5)如果第二階段協商成功,則IPSEC VPN隧道建立成功;
6)隧道建立成功,則可以實現VPN隧道內的安全訪問。
3.2、客戶端抓包分析
1)14—25資料包清晰的顯示了VPN客戶端向VPN閘道器注冊(使用的是TCP2012埠)的通訊過程,其中14—16三次握手建立通訊,17—21雙向傳輸資料包,22—25四次握手拆除連線。
2)314為VPN客戶端向VPN閘道器通告的通訊資料包,使用的是UDP 2012埠;
3)328為VPN客戶端與VPN閘道器之間相互協商的資料包,使用的是UDP500埠;
至此,僅從VPN客戶端抓包分析還無法定位故障,下面將繼續在VPN閘道器抓包分析。
3.3、VPN閘道器抓包分析
1)連線順序降序排列,從最下面第一個連線開始,很清晰得看到賓館客戶端出口地址222.88.150.43已經與服務端地址10.0.36.200在UDP 500埠上協商;
2)接著往上走發現資料包通訊埠由UDP 500變成UDP 4500(這是由於VPN客戶端是經過NAT訪問網際網路的,天融信的IV VPN客戶端支援NAT-T協議,所以在野蠻模式下,第三個資料包自動漂移到UDP 4500埠進行通訊了,具體參見RFC3947),大家看仔細啦,這裡不僅僅通訊埠變成4500,IP地址也變成218.28.16.242(聯通地址),繼續向上發現最頂端的那個UDP 500連線,IP地址是變化後的218.28.16.242,已經不是最早建立連線的出口地址222.88.150.43(電信地址),而這不是我們所期望的地址,看來這就是導致異常的原因啦。
通過上面的資料包分析,我們可以清楚的發現:無線使用者在跟VPN閘道器建立隧道時,經過NAT裝置後,VPN客戶端資料包是以兩個不同的IP地址來跟VPN閘道器通訊的,因此VPN閘道器會將來自222.88.150.43的資料包丟棄,並且給218.28.16.242重傳資料包,導致隧道協商異常。
四、故障解決
既然找到了故障根源,故障解決就比較好辦了,可以使用兩種方式:
2、讓運營商給無線上網使用者採用固定鏈路地址NAT訪問網際網路。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26008584/viewspace-1098242/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一次分割槽查詢異常的分析
- Flutter 常見異常分析Flutter
- 一次ORACLE分散式事務鎖異常處理分析Oracle分散式
- VPN隧道協議-GRE、L2TP、IPSEC協議
- Flutter | 記一次Mixin Analysis異常Flutter
- 一次帶庫備份異常
- 記一次 .NET 某教育系統API 異常崩潰分析API
- VPN中隧道模式與傳輸模式的簡要比較模式
- Android異常分析(轉)Android
- 乾貨 | 攜程一次Redis遷移容器後Slowlog“異常”分析Redis
- 一次透過dump檔案分析OutOfMemoryError異常程式碼定位過程Error
- 一次django記憶體異常排查Django記憶體
- 在華為裝置上實施GRE隧道和IPSECVPN
- binlog 異常暴漲分析
- 跑批SQL效能異常分析SQL
- 記一次 .NET 某車零件MES系統 登入異常分析
- 兩臺linux建立GRE隧道Linux
- wireshark、異常資料分析、常見RST介紹
- 當機導致slave異常分析
- Oracle JOB異常中斷原因分析Oracle
- 一次ceph心跳機制異常的處理
- 無線網路異常的一次診斷
- IPSEC隧道抓包分析
- 異常篇——異常處理
- 異常和異常呼叫鏈
- [異常等待事件latch undo global data]分析事件
- RocketMQ Series---No route info of this topic異常分析MQ
- Java異常的深入研究與分析Java
- DRF之異常捕獲原始碼分析原始碼
- Java自定義異常的建立及多層呼叫Java
- 一次資料庫異常的處理過程資料庫
- 記一次棧溢位異常問題的排查
- Linux 常見異常分析,請收好這份排查指南~Linux
- Java 異常(二) 自定義異常Java
- Java checked異常和unchecked異常。Java
- JAVA異常處理原則和log4j輸出詳細異常分析Java
- 採用手工方式建立IPSec隧道示例
- Java 建立使用者異常類、將異常一直向上拋、 throw和throws的區別Java