實戰案例:為啥VPN 傳文件速度只有20M?我企業總部-分部可是100M 專線啊!
背景介紹
客戶企業是一家300人左右規模的衣服零售單位,總部在深圳、分部在海口,為了打通總、分之間內網互聯,企業購買了一條100M企業專線,並在出口某J路由器上做IPSEC VPN以打通兩端內網。大致拓撲如下圖所示:
(1) 典型拓撲
(2) 目前問題
總分之間拷文件的速度僅有20Mbps吃不滿專線百兆的頻寬。而諮詢了某J路由器的廠商IPSEC VPN吞吐能力可達200Mbps,不存在設備瓶頸問題。
排障分析
第一步:確認問題現象
透過FTP或SMB2,總部PC1去拉取分支PC2的檔案速率:
拷文件確實是20M上下,吃不滿百兆專線。下一步看看是不是PC自己的問題,即總-分兩邊自己的內網拷貝測試。
第二步:確認總-分自己內部網路傳輸是否正常
總-分本地區域網路拷貝的情況如下:
可以看到總-分部全千兆區域網路中FTP或SMB2拷貝是能達千兆的,兩端PC確認均無問題。但我想說的是,其實區域網路跑流和跨IPSEC跑流是有本質區別的:
- 區域網路交換器跑流是硬體轉發,有加速;
- IPSEC隧道保留是隧道封裝CPU軟體轉發,無加速。
CPU轉送的跑流問題一般和會話數有關,會話數越高能跑的總吞吐也就越高,因為會話流會基於不同CPU核多執行緒處理。而硬體轉送則是高速轉發,無需多會話整體吞吐量也能跑上去。下一步看下SMB2流會話數。
第三步:確認拷文件SMB2的資料流
抓取總-分通過VPN隧道傳輸流並分析會話數:
可以看到拷文件只有1條會話流,由於IPSEC隧道是經由出口路由器封裝後的CPU轉發,所以會話數太少吞吐量就起不來。對此下一步通過IPerf3跑流測試。
第四步:IPerf3多會話跑流測試
拓樸依然是總-分兩台PC,一端作為IPerf3伺服器一端為客戶端,互跑TCP流測試如下:
方向 | 會話數 | 吞吐量 |
總部—>分支 | 1 | 20Mbps上下 |
總部—>分支 | 5 | 60Mbps左右 |
總部—>分支 | 10 | 100Mbps打滿專線 |
總部<—分支 | 1 | 20Mbps上下 |
總部<—分支 | 5 | 60Mbps左右 |
總部<—分支 | 10 | 100Mbps打滿專線 |
可以看到10條TCP流同時跑的情況下是可以吃滿百兆專線頻寬的。
總結及解決方案
(1) 小結如下
由於總-分拷檔案會話數只有1條,經由IPSEC VPN隧道轉送吞吐量低符合預期,多會話流同時跑才會打到更高的效能瓶頸。
(2) 解決方案
無問題無需解決,要想跑滿專線頻寬,多台PC同時傳文件就可以了,一對一是不行的。