資料介紹
這可能是第一篇關于BadVPN原理的中文介紹,所以我恪守職責,希望能將BadVPN的原理闡述清楚,而不僅僅是為了欺世盜名取天下之先。
前言
我關注VPN已經多年了,有三類VPN讓我覺得驚嘆幫我理解了網絡協議的體系結構。首先IPSec,I2TP,PPTP這種傳統的VPN技術讓我知道原來協議棧還可以如此的相互Over,然后就接觸到了OpenVPN,如此一個簡單的玩意兒竟然擁有如此強大的組網能力,我喜歡這個OpenVPN,一去就是三五年,期間這個玩意兒也為我帶來很多現實的東西,比如獎金,比如加薪升職什么的,打心眼里,我覺得利用OpenVPN的理念,可以創造出世界第一等的VPN產品。。.直到我遇到了BadVPN!
當然,最基本的VPN就是IPSec VPN,然而要想配置好一個多點的IPSec VPN網絡及其復雜和費事,最終EzVPN彌補了這個不足,它通過一個所謂的中心節點簡化了配置。然而這一切都是“官方”的方案。落實到普通程序員可以就地使用的方案,沒幾個。OenVPN是一個,BadVPN也是一個。
我承認,前幾年我被OpenVPN沖昏了頭腦,竟然忽略了世界上還有一個叫做BadVPN的東西。都到了2017年了,我才第一次注意到它,這多多少少有點讓自己覺得悲哀。
BadVPN是另一個VPN
為了能快速理解BadVPN的原理,我準備從OpenVPN開始,當你知道了OpenVPN有什么問題的時候,就會更加容易理解BadVPN是如何解決這些問題的了,而這些正是理解BadVPN的關鍵。我先來展示一個OpenVPN的結構圖,假設使用TAP Bridge模式:
可以看出,OpenVPN有一個所謂的“中心節點”,其它所有的子節點都連接到這個中心節點。OpenVPN的這個中心節點身兼兩職:
1. 提供總體的控制功能,負責與子節點密鑰協商,分配虛擬子網的IP地址給子節點,推送策略給子節點等;
2. 同時作為一個對等的VPN節點存在,和各個子節點所攜帶的子網互聯互通。
上述兩點可以看出,第一點是控制平面的功能,第二點是數據平面的功能,二者完全在一個鏈路上傳輸,這意味著什么?這意味著要精心設計OpenVPN的協議,以區分到來的數據包包含的是控制信息還是數據。
OpenVPN協議區分了數據是控制面的數據還是數據面的數據,然而這種區分是帶內實現的,也就是說通過協議頭的字段來實現的,姑且不說封裝這個協議頭會帶來什么開銷,僅僅在OpenVPN進程中去多路復用并行處理控制平面和數據平面就夠復雜的了。
按照傳統的網絡設計觀點,中心節點即服務端就是一個交換機,而各個VPN子節點客戶端就像是“該交換機端口的另一端”連接的各個主機或者級聯交換機,這是一個典型的星型拓撲。然而按照SDN控制平面的觀點來看的話,中心節點就是一個控制器,它控制了整個的VPN網絡轉發邏輯,所有的子節點要發送數據必須無條件轉發到中心節點,讓中心節點決定數據轉發到何方,這意味著哪怕是子節點客戶端之間互相通信,也必須經由中心節點來轉發。
不管站在什么立場上來看,OpenVPN的中心節點都是一個單點,不管是從效率還是從可用性上來權衡,這都不是一個優雅的方式。說點題外話,幸虧我個人精通Linux網絡,可以通過iptables,iproute2,多線程改造OpenVPN,bonding TAP網卡,Keepalived等措施來破除這種限制,消除種種效率和可用性上的威脅,我才得以駕馭OpenVPN,不然的話,用OpenVPN來組網還真的限制多多。即便我有能力Hold住存在單點問題的OpenVPN,最終我還是失敗了。我已經把OpenVPN堆積的不成樣子了,迫切需要一個新的思路。
OpenVPN的中心節點扮演了過于重量級的角色,這導致了任意建立VPN通道的節點之間的關系不可能是對等的,OpenVPN必須以主從方式建立VPN通道。這就主從結構的限制使得OpenVPN在組網方面很難構建多點對多點的網狀拓撲。
那么BadVPN有何不同呢?為了與OpenVPN做對比,我還是先來展示一個BadVPN的總覽圖:
所有的節點綜合起來構成了一個巨大的交換機,大家一起完成交換機的功能,各個VPN子節點(為了對比,我依然沿用OpenVPN中心節點,子節點的術語)就是交換機端口本身,而不再是“端口對端”連接的設備。其中,中心節點不再負責實際的數據轉發,而僅僅作為一個“維護這個交換機組成部分”的控制器存在,中心節點負責以下的事宜:
1. 記錄該VPN網絡中擁有多少節點主機,即“該大交換機中有多少端口”以及“端口的添加,刪除以及通告”;
2. 構建子節點與中心節點之間,子節點與子節點之間的TLS控制通道,協商子節點之間的通信密鑰。
這意味著各個子節點之間的VPN互通不再需要經過中心節點,實際上也根本就沒有什么可以進行數據通信的VPN中心節點。VPN通信節點之間變成了真正的點對點通信,除非你配置中繼(BadVPN的一種特殊運行方式,在權限受制的場景下使用,本文不討論,詳情參見BadVPN的Document),任何VPN之間的通信都是直接通信,不需要經過第三方。
這意味著什么?這意味著:
1. BadVPN的協議會非常簡單;
2. BadVPN的處理過程會非常簡單。
BadVPN將控制平面和數據平面做了帶外的分離,不再僅僅是帶內分離而依靠協議來區分。關于這一點,后面會詳述,下面的小節我們在感官上認識一下BadVPN的原理。
BadVPN的運行原理圖解
長篇大論終究會因為文筆不好而適得其反,所以還是通過畫圖具體來點情景分析為好。我分兩種場景來描述BadVPN的行為,即非打洞場景和打洞場景,先看非打洞場景。
- 集成電路封裝闡述 59次下載
- 基于BGP MPLS的以太網VPN環境搭建源碼 17次下載
- L2VPN與L3VPN 5次下載
- GRE_VPN概述 15次下載
- GETVPN OVER DMVPN‐P3 Solution 配置實例(Dynamic Multipoint VPN) 5次下載
- vpn代理服務器_VPN代理軟件下載 111次下載
- MPLS和VPN體系結構_CCIP版 0次下載
- VPN技術在數字社區的應用 28次下載
- 基于VPN技術的物流信息系統網絡設計
- 基于電子鑰匙的遠程訪問VPN身份鑒別方案
- 基于電子鑰匙的遠程訪問VPN身份鑒別方案
- 一種基于VPN網關的電原理設計與實現
- 基于PKI的VPN安全管理系統的設計與實現
- VPN L2TP協議
- 軟件SSL VPN設計與實現
- DTU如何運用VPN加密技術提升數據傳輸安全? 504次閱讀
- 什么是虛擬私有網VPN?VPN的常用技術有哪些? 1959次閱讀
- 什么是VPN?如何應對VPN安全風險 5209次閱讀
- 20張圖帶你詳解EVPN 1183次閱讀
- 1萬字 20張圖帶你詳解EVPN 1279次閱讀
- Juniper防火墻IPSec VPN的配置 4564次閱讀
- MPLS VPN是什么? 1.9w次閱讀
- 闡述邊緣計算服務的優勢 2400次閱讀
- SSL VPN的基本工作原理是怎么樣的 1.3w次閱讀
- 關于元器件名稱、符號和封裝的命名問題 9761次閱讀
- VPN的定義是什么?對SD-WAN有何作用 5178次閱讀
- 集成L2、L3服務的以太網VPN 8264次閱讀
- VPN的工作原理_好用的VPN有哪些(分類) 9.5w次閱讀
- 照明用LED的簡要闡述 1190次閱讀
- 基于MPLS的VPN技術原理及其實現 1039次閱讀
下載排行
本周
- 1DC電源插座圖紙
- 0.67 MB | 2次下載 | 免費
- 2AN158 GD32VW553 Wi-Fi開發指南
- 1.51MB | 2次下載 | 免費
- 3AN148 GD32VW553射頻硬件開發指南
- 2.07MB | 1次下載 | 免費
- 4AN111-LTC3219用戶指南
- 84.32KB | 次下載 | 免費
- 5AN153-用于電源系統管理的Linduino
- 1.38MB | 次下載 | 免費
- 6AN-283: Σ-Δ型ADC和DAC[中文版]
- 677.86KB | 次下載 | 免費
- 7SM2018E 支持可控硅調光線性恒流控制芯片
- 402.24 KB | 次下載 | 免費
- 8AN-1308: 電流檢測放大器共模階躍響應
- 545.42KB | 次下載 | 免費
本月
- 1ADI高性能電源管理解決方案
- 2.43 MB | 450次下載 | 免費
- 2免費開源CC3D飛控資料(電路圖&PCB源文件、BOM、
- 5.67 MB | 138次下載 | 1 積分
- 3基于STM32單片機智能手環心率計步器體溫顯示設計
- 0.10 MB | 130次下載 | 免費
- 4使用單片機實現七人表決器的程序和仿真資料免費下載
- 2.96 MB | 44次下載 | 免費
- 53314A函數發生器維修手冊
- 16.30 MB | 31次下載 | 免費
- 6美的電磁爐維修手冊大全
- 1.56 MB | 24次下載 | 5 積分
- 7如何正確測試電源的紋波
- 0.36 MB | 17次下載 | 免費
- 8感應筆電路圖
- 0.06 MB | 10次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935121次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420062次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233088次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191367次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73810次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論