资料介绍
这可能是第一篇关于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的行为,即非打洞场景和打洞场景,先看非打洞场景。
- 集成电路封装阐述 58次下载
- 基于BGP MPLS的以太网VPN环境搭建源码 16次下载
- 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加密技术提升数据传输安全? 203次阅读
- 什么是虚拟私有网VPN?VPN的常用技术有哪些? 1035次阅读
- 什么是VPN?如何应对VPN安全风险 3341次阅读
- 20张图带你详解EVPN 653次阅读
- 1万字 20张图带你详解EVPN 827次阅读
- Juniper防火墙IPSec VPN的配置 3705次阅读
- MPLS VPN是什么? 1.8w次阅读
- 阐述边缘计算服务的优势 2294次阅读
- SSL VPN的基本工作原理是怎么样的 1.2w次阅读
- 关于元器件名称、符号和封装的命名问题 9471次阅读
- VPN的定义是什么?对SD-WAN有何作用 5089次阅读
- 集成L2、L3服务的以太网VPN 8111次阅读
- VPN的工作原理_好用的VPN有哪些(分类) 9.5w次阅读
- 照明用LED的简要阐述 1145次阅读
- 基于MPLS的VPN技术原理及其实现 985次阅读
下载排行
本周
- 1电子电路原理第七版PDF电子教材免费下载
- 0.00 MB | 1490次下载 | 免费
- 2单片机典型实例介绍
- 18.19 MB | 93次下载 | 1 积分
- 3S7-200PLC编程实例详细资料
- 1.17 MB | 27次下载 | 1 积分
- 4笔记本电脑主板的元件识别和讲解说明
- 4.28 MB | 18次下载 | 4 积分
- 5开关电源原理及各功能电路详解
- 0.38 MB | 10次下载 | 免费
- 6基于AT89C2051/4051单片机编程器的实验
- 0.11 MB | 4次下载 | 免费
- 7基于单片机和 SG3525的程控开关电源设计
- 0.23 MB | 3次下载 | 免费
- 8基于单片机的红外风扇遥控
- 0.23 MB | 3次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 2PADS 9.0 2009最新版 -下载
- 0.00 MB | 66304次下载 | 免费
- 3protel99下载protel99软件下载(中文版)
- 0.00 MB | 51209次下载 | 免费
- 4LabView 8.0 专业版下载 (3CD完整版)
- 0.00 MB | 51043次下载 | 免费
- 5555集成电路应用800例(新编版)
- 0.00 MB | 33562次下载 | 免费
- 6接口电路图大全
- 未知 | 30320次下载 | 免费
- 7Multisim 10下载Multisim 10 中文版
- 0.00 MB | 28588次下载 | 免费
- 8开关电源设计实例指南
- 未知 | 21539次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935053次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537791次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191183次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183277次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138039次下载 | 免费
评论
查看更多