VPN虚拟化
来源:互联网 发布:stl格式是什么软件 编辑:程序博客网 时间:2024/06/06 14:00
1. 基础知识
1.1 虚拟专用网 (Virtual Private Network,VPN)
每家公司都有自己的内部网络,但是这个网络是封闭的、有边界的。当一家公司拥有多个分布于不同地方的内部网络时,就需要一种方案将这些孤岛式的内部网络连接起来。一种解决方案是采用租用线路来将这些内部网络连接起来,但是这个方案成本高昂;另一种方案就是本文来谈到的 VPN 即虚拟专用网。我们可以把 VPN 理解成是虚拟出来的企业内部专线,它是一种建立在实际网络(或物理网络)基础上的功能性网络。对它的要求如下:
- 连通性:它通过实际网络(或物理网络)比如 Internet 将内部网络连在一起(site-to-site VPN),或者将 PC 和内部网络连在一起 (Client-to-site VPN)。
- 保密性:在 VPN 网络中,位于公共网络两端的网络在公共网络上传输信息时,其信息都是经过安全处理的,可以保证数据的完整性、真实性和私有性。
- 成本低:它利用低成本的公共网络做为企业骨干网,并不需要真正的去铺设光缆之类的物理线路。
- 透明性:对于用户来讲,VPN 的工作方式必须是完全透明的。
目前,实现 VPN 的方法有多种。按照 VPN 所使用的隧道协议,VPN 主要可以分为三种,PPTP、L2TP 和 IPSec,其中PPTP和L2TP协议工作在OSI模型的第二层,又称为二层隧道协议;IPSec是第三层隧道协议。而 OpenStack 社区 Neutron 项目提供的是基于 IPSec 技术的一种参考实现。
1.2 IPSec VPN
1.2.1 概念
IPSec(Internet Protocol Security)是 IETF 制定的为保证在 Internet 上传送数据的安全保密性能的三层隧道加密协议。IPSec 在 IP 层对 IP 报文提供安全服务。IPSec 协议本身定义了如何在 IP 数据包中增加字段来保证 IP 包的完整性、私有性和真实性,以及如何加密数据包。使用 IPsec,数据就可以安全地在公网上传输。简单地说,IPsec 提供了两个主机之间、两个安全网关之间或主机和安全网关之间的保护。
IPSec 协议:IPSec 包括报文验证头协议AH(协议号51)和报文安全封装协议ESP(协议号50)两个协议。AH 可提供数据源验证和数据完整性校验功能;ESP 除可提供数据验证和完整性校验功能外,还提供对IP报文的加密功能。
- AH 协议(IP协议号为51,使用较少)提供数据源认证、数据完整性校验和防报文重放功能,它能保护通信免受篡改,但不能防止窃听,适合用于传输非机密数据。AH的工作原理是在每一个数据包上添加一个身份验证报文头,此报文头插在标准IP包头后面,对数据提供完整性保护。可选择的认证算法有MD5(Message Digest)、SHA-1(Secure Hash Algorithm)等。MD5算法的计算速度比SHA-1算法快,而SHA-1算法的安全强度比MD5算法高。
- ESP 协议(IP协议号为50,使用较广)提供加密、数据源认证、数据完整性校验和防报文重放功能。ESP的工作原理是在每一个数据包的标准IP包头后面添加一个ESP报文头,并在数据包后面追加一个ESP尾。与AH协议不同的是,ESP将需要保护的用户数据进行加密后再封装到IP包中,以保证数据的机密性。常见的加密算法有DES、3DES、AES等。同时,作为可选项,用户可以选择MD5、SHA-1算法保证报文的完整性和真实性。这三个加密算法的安全性由高到低依次是:AES、3DES、DES,安全性高的加密算法实现机制复杂,运算速度慢。对于普通的安全要求,DES算法就可以满足需要。
IPSec 还支持 IKE 协议:
- IKE 协议(Internet Key Exchange ,RFC2409):IKE 使两个地点能够建立安全的连接,方法是使用事先共享的密钥或由一家认证机构管理的公钥基础结构(PKI)数字证书,后者是一种进行公钥登记的内部或外购服务。通过使用签名数字ID来确认端点的身份,IKE能够将VPN的规模扩展到数以千计的端点。 为确保安全的数据加密,Cisco在路由器和PIX上对IPSec的实施过程中既支持数据加密标准(DES) ,也支持三重DES算法。详情请参见 IKE 工作原理。
IPSec 和 IKE 的关系:
- IKE是 UDP 之上的一个应用层协议,是 IPSEC 的信令协议。
- IKE为 IPSEC 协商建立安全联盟,并把建立的参数及生成的密钥交给 IPSEC。 IPSEC 使用 IKE 建立的安全联盟对 IP 报文加密或验证处理。
- IPSEC 处理做为 IP 层的一部分,在 IP 层对报文进行处理。AH 协议和 ESP 协议有自己的协议号,分别是51和50。
IPSec 传输模式:隧道(tunnel)和传送(transport)两种工作方式。
- 在隧道方式中,用户的整个 IP 数据包被用来计算AH或ESP头,且被加密。AH 或 ESP 头和加密用户数据被封装在一个新的IP数据包中;
- 在传送方式中,只是传输层数据被用来计算AH或ESP头,AH或ESP头和被加密的传输层数据被放置在原IP包头后面。
而 IPSec VPN 即指采用 IPSec 协议来实现远程接入的一种 VPN 技术。
1.2.2 IPSec 连接
IPsec 的两个端点被称为是 IPsec 对等体,要在两个对等体之间实现数据的安全传输就要在两者之间建立安全关联(Security Association,SA)。SA 是 IPsec 的基础,也是 IPsec 的本质。SA 是通信对等体间对某些要素的约定,例如,使用哪种协议(AH、ESP还是两者结合使用)、协议的封装模式(传输模式和隧道模式)、加密算法(DES、3DES和AES)、特定流中保护数据的共享密钥以及密钥的生存周期等。SA 是单向的,在两个对等体之间的双向通信,最少需要两个 SA 来分别对两个方向的数据流进行安全保护。同时,如果两个对等体希望同时使用AH和ESP来进行安全通信,则每个对等体都会针对每一种协议来构建一个独立的SA。SA是具有生存周期的,且只对通过IKE协商建立的SA有效,手工方式建立的SA永不老化。
IPSec 两种传输模式的区别:
- 传输模式在 AH、ESP 处理前后IP头部保持不变,主要用于 End-to-End 的应用场景。
- 隧道模式则在 AH、ESP 处理之后再封装了一个外网 IP 头,主要用于 Site-to-Site 的应用场景。
1.2.3 IPSec 的优点
- 支持IKE(Internet Key Exchange,因特网密钥交换),可实现密钥的自动协商功能,减少了密钥协商的开销。可以通过IKE建立和维护安全关联(Security Association,SA)的服务,简化了IPsec的使用和管理。
- 所有使用IP协议进行数据传输的应用系统和服务都可以使用IPsec,由于IPSec工作在OSI的第3层,低于应用程序直接涉及的层级,所以对于应用程序来讲,利用IPSec VPN所建立起来的隧道是完全透明的,无需修改既有的应用程序,并且,现有应用程序的安全解决方法也不会受到任何影响。
- 对数据的加密是以数据包为单位的,而不是以整个数据流为单位,这不仅灵活而且有助于进一步提高IP数据包的安全性,可以有效防范网络攻击。
以上内容都引用自互联网,主要来自:
http://security.pconline.com.cn/0910/1866954_all.html
http://www.h3c.com.cn/Service/Channel_Service/Operational_Service/ICG_Technology/201005/675214_30005_0.htm
2. Neutron IPSec VPNaas
Neutron IPSec VPN 向用户提供 RESETS API, CLI 和 Horizon GUI 去操作 IPSec 所使用的各种协议和对象。
2.1 受 VPNaas 管理 IPSec 对象
2.1.1 IKE Policy
VPNaas 提供 vpn-ikepolicy-create CLI 来创建 IKE Policy。创建时可以指定各种参数:
参数解释VPNaas 支持值默认值说明auth-algorithmAuthentication algorithm. 验证算法{sha1}sha1 IKE 认证算法。encryption-algorithmEncryption algorithm 加密算法{aes-128,aes-256,aes-192}aes-128 IKE 加密算法。phase1-negotiation-modeIKE Phase1 negotiation mode (Phase 1 交互模式) main在IKE 第一阶段,VPN 网关或者客户端互相认证,通过确认对方的网关使用的是一个被认可的 Pre-Shared Key, certificates 或者 public key encryption。Pre-Shared Key 是用得最多的。该模式包括 Main 和aggressive。在 IKE 第二阶段,双方确定 IPSec 连接的参数。
ike-versionIKE version (版本){v1,v2} v1 IKE版本,包括 V1 和 V2.pfs Perfect Forward Secrecy{group2,group5,group14}group5Diffie-Hellman 键的计算方法。详细可参考 这篇文章。lifetime units=UNITS,value=VALUEIKE lifetime attributes. ‘units’-seconds。’value’-non
negative integer
units 默认值 为seconds
value 默认值为 3600
IKE negociation 的时间间隔,一般来说,越短越安全,但是成本也越高。详细可参考 这篇文章。2.1.2 IPSec Policy
VPNaas 提供 REST API 和 CL 来操作 IPSec Policy:
- vpn-ipsecpolicy-create Create an IPsec policy.
- vpn-ipsecpolicy-delete Delete a given IPsec policy.
- vpn-ipsecpolicy-list List ipsecpolicies that belongs to a given tenant connection.
- vpn-ipsecpolicy-show Show information of a given IPsec policy.
- vpn-ipsecpolicy-update Update a given IPsec policy.
units 默认值 seconds
value 默认值 3600
一个IPSec 连接的有效时间长度。可以设置 时间长度(seconds) 和传输的数据量 (kilobytes)。超过该 lifetime 后,IPSec 重走 加密和认证过程。2.1.3 VPN Service
VPN Service 的操作包括:
- vpn-service-create Create a VPN service.
- vpn-service-delete Delete a given VPN service.
- vpn-service-list List VPN service configurations that belong to a given tenant.
- vpn-service-show Show information of a given VPN service.
- vpn-service-update Update a given VPN service.
Subnet unique identifier for the VPN service
deployment.
一般来说,VPN 是向两个子网(site-to-site)提供的,因此 VPN 的两头是 Router 或者 Gateway。 VPNaas 使用 Router 作为一个端点,还需要使用一个 subnet 指定可以使用该 VPN Connection 的目标虚机网段。
2.1.4 IPSec Site Connection
IPSec Site Connection 操作包括:
- ipsec-site-connection-create Create an IPsec site connection.
- ipsec-site-connection-delete Delete a given IPsec site connection.
- ipsec-site-connection-list List IPsec site connections that belong to a given tenant.
- ipsec-site-connection-show Show information of a given IPsec site connection.
- ipsec-site-connection-update Update a given IPsec site connection.
VPN service instance ID associated with this
connection
Peer router identity for authentication. Can be
IPv4/IPv6 address, e-mail address, key id, or FQDN
一个例子:
host 1 ------ NEURON SERVER (-- INTERNET GATEWAY --) <--- IPSEC ---> (INTERNET GATEWAY) --Neutron Server---- host 2 | | | | | | | | | | | |192.168.64.0/24 10.10.20.2/1.2.3.10 1.2.3.9 4.3.2.9 4.3.2.10/10.10.20.10 192.168.63.0/24
左边的环境中,VPN Service 和 IPSec site connection 的配置为:
- ROUTER = router 1 (运行在 10.10.20.2 上的名为 “router1” 的 Router 的 UUID 或者 name。对于 IPSec tunnel 来说,本环境中的端点地址为 router 的 external port 的 IP 即 1.2.3.10)
- SUBNET = subnet1 (192.168.64.0/24 的 subnet UUID 后者 name)
- peer-cidr = 192.168.63.0/24
- peer-id = 4.3.2.10
- peer-address = 4.3.2.10
右边的环境中,VPN Service 和 IPSec site connection 的配置为:
- ROUTER = router 1 (运行在 10.10.20.10 上的名为 “router1” 的 Router 的 UUID 或者 name。对于 IPSec tunnel 来说,本环境中的端点地址为 router 的 external port 的 IP 即 4.3.2.10)
- SUBNET = subnet1 (192.168.63.0/24 的 subnet UUID 后者 name)
- peer-cidr = 192.168.64.0/24
- peer-id = 1.2.3.10
- peer-address = 1.2.3.10
两边的 IPSec Site Connection 需要使用同样的 IKE Policy 和 IPSec Policy。这样,两个 Router 之间的IPSec 隧道就可以建立起来了,192.168.63.0/24 和 192.168.64.0/24 两个网段内的虚机就可以直接通信了。
2.1.5 这些对象之间的关系
2.2 IPSec VPNaas:基于 OpenSwan (IPSec在Linux下的实现)的实现
2.2.1 OpenSwan
OpenSwan 是 IPSec 在 Linux 上的开源实现。因此,要使用 IPSec VPNaas,你需要在 L3 Agent 节点上安装它。它的配置保存在 /etc/ipsec.conf 中。这篇文章 详细阐述了使用 OpenSwan 构造 VPN 的方法。
2.2.2 IPSec VPNaas 的实现
同 LBaas 的实现方式一样,VPNaas 主要是实现了一个让用户通过 REST API 操作 OpenSwan 的框架:
- Extention 提供 REST API
- Plugin 实现了 DB 操作,以及通过 RPC 调用 VPNaas 的 OpenSwan driver。
- Driver 层实现了具体的功能
通过这些代码,Neutron 就能够通过配置 OpenSwan 为在指定 Router 上的指定子网提供 VPN 服务。
Driver 的实现代码主要在 neutron/services/vpn/device_drivers/ipsec.py 中。其start方法调用 ipsec 命令来配置 IPSec,包括:
(1)初始化,其中包括在 router 的 iptables nat 表中添加一条规则,来使得目的为 ipsec 隧道的网络包不会做 DNAT:
-A POSTROUTING -s <local_cidr> -d <peer_cidr> -m policy --dir out --pol ipsec -j ACCEPT
(2)Neutron Server 在 VPN Server 有变化时,通过 RPC 通知该 VPN Service 的 Router 的 L3 Agent 上的 VPNaas Agent。当有新的 VPN Server 被创建时,它执行以下操作:
(2.1)通过 RPC 获取新建的 VPN Service,并通过 _make_vpnservice_dict 函数将其配置转化为 IPSec 配置文件中的配置项,并初始化待启动的 IPSec 进程的配置。
(2.2)启动一个 pluto IKE keying daemon
self._execute([self.binary, 'pluto', '--ctlbase', self.pid_path, '--ipsecdir', self.etc_dir, '--use-netkey', '--uniqueids', '--nat_traversal','--secretsfile', self.secrets_file, '--virtual_private', virtual_private ])
(2.3)添加已配置的 IPSec 连接
for ipsec_site_conn in self.vpnservice['ipsec_site_connections']: nexthop = self._get_nexthop(ipsec_site_conn['peer_address']) self._execute([self.binary, 'addconn', '--ctlbase', '%s.ctl' % self.pid_path, '--defaultroutenexthop', nexthop, '--config', self.config_file, ipsec_site_conn['id']])
(2.4)初始化 IPSec 连接
for ipsec_site_conn in self.vpnservice['ipsec_site_connections']: if not ipsec_site_conn['initiator'] == 'start': continue #initiate ipsec connection self._execute([self.binary, 'whack', '--ctlbase', self.pid_path,'--name', ipsec_site_conn['id'],'--asynchronous', '--initiate'])
而这些命令的指定都是在用于 VPN Service 的那个 router 的 namespace 中执行的:
def _execute(self, cmd, check_exit_code=True): """Execute command on namespace.""" ip_wrapper = ip_lib.IPWrapper(self.root_helper, self.namespace) #self.namespace 是 Router 的 namespace return ip_wrapper.netns.execute(cmd, check_exit_code=check_exit_code)
3. 其它 Neutron VPNaas 实现
这篇文章 阐述了各种不同的 VPN 实现技术。目前,Neutron 项目中有几个不同的 blueprint 在实现基于不同技术的 VPNaas。
3.1 MPLS VPNaas
这个 blueprint 实现了 MPLS VPN。其出发点主要是 QoS 支持,以及目前 MPLS 已经在骨干网络中已经很普及了。根据 百度百科,MPLS VPN 是一种基于MPLS技术的IP-VPN,是在网络路由和交换设备上应用MPLS技术,简化核心路由器的路由选择方式,利用结合传统路由技术的标记交换实现的IP虚拟专用网络(IP VPN),可用来构造宽带的Intranet、Extranet,满足多种灵活的业务需求。
3.2 PPTP VPNaas
这个 blueprint 致力于实现 PPTP VPNaas。根据 百度百科,点对点隧道协议 (PPTP) 是由包括微软和3Com等公司组成的PPTP论坛开发的一种点对点隧道协,基于拨号使用的PPP协议使用PAP或CHAP之类的加密算法,或者使用 Microsoft的点对点加密算法MPPE。其通过跨越基于 TCP/IP 的数据网络创建 VPN 实现了从远程客户端到专用企业服务器之间数据的安全传输。PPTP 支持通过公共网络(例如 Internet)建立按需的、多协议的、虚拟专用网络。PPTP 允许加密 IP 通讯,然后在要跨越公司 IP 网络或公共 IP 网络(如 Internet)发送的 IP 头中对其进行封装。
3.3 其它 VPNaas
BGP VPNaas:https://blueprints.launchpad.net/neutron/+spec/neutron-bgp-vpn
VPN 相关的 blueprint:https://blueprints.launchpad.net/neutron?searchtext=VPN
- VPN虚拟化
- 云安全之虚拟专用网(VPN)虚拟化 [How Neutron implements VPN Virtualization]
- 虚拟VPN和虚拟防火墙
- 什么是VPN -虚拟专用网
- VPN虚拟专用网浅谈
- 虚拟专用网VPN
- VPN介绍--虚拟网络
- 虚拟专用网VPN
- 虚拟专用网VPN
- VPN(虚拟专用网络)
- VPN-虚拟专用网络
- VPN虚拟专用网
- 虚拟化的另一个用例:真正的VPN
- VPN代理服务器- VPN、虚拟号设置
- 组建VPN虚拟专用网络
- 虚拟专用网VPN连接基础
- 组建VPN虚拟专用网络
- (转)虚拟专用网VPN
- JSP和JavaBean测试
- 常用的正则表达式
- ResourceBundle.getBundle("baseName")的使用
- 获取用户位置ios8.0以上适配
- git开源库——视图控件——viewpager
- VPN虚拟化
- 隐马尔可夫模型(HMM) - 1 - 基本概念
- 代理模式 Proxy Design Pattern
- Linux,执行.sh文件,提示No such file or directory
- Bootstrap table 服务器端分页示例
- SQL编程:模糊表关联不求人 ---> concat + like就能行
- 一文搞懂算法的时间复杂度与空间复杂度
- C++中math.h库函数
- 笔记整理之BCP