OpenVPN 2.3.4部署 创建 配置客户端证书

1.OpenVPN简介

VPN直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN无疑是Linux下开源VPN的先锋,提供了良好的性能和友好的用户GUI。

OpenVPN允许参与建立VPN的单点使用共享金钥,电子证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3 /TLSv1 协议函式库。OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows 上运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。

虚拟私有网络(VPN)隧道是通过Internet隧道技术将两个不同地理位置的网络安全的连接起来的技术。当两个网络是使用私有IP地址的私有局域网络时,它们之间是不能相互访问的,这时使用隧道技术就可以使得两个子网内的主机进行通讯。例如,VPN隧道技术经常被用于大型机构中不同办公区域子网的连接。

有时,使用VPN隧道仅仅是因为它很安全。服务提供商与公司会使用这样一种方式架设网络,他们将重要的服务器(如,数据库,VoIP,银行服务器)放置到一个子网内,仅仅让有权限的用户通过VPN隧道进行访问。如果需要搭建一个安全的VPN隧道,通常会选用IPsec,因为IPsec VPN隧道被多重安全层所保护。

VPN (虚拟专用网)发展至今已经不在是一个单纯的经过加密的访问隧道了,它已经融合了访问控制、传输管理、加密、路由选择、可用性管理等多种功能,并在全球的信息安全体系中发挥着重要的作用。也在网络上,有关各种VPN协议优缺点的比较是仁者见仁,智者见智,很多技术人员由于出于使用目的考虑,包括访问控制、 安全和用户简单易用,灵活扩展等各方面,权衡利弊,难以取舍;尤其在VOIP语音环境中,网络安全显得尤为重要,因此现在越来越多的网络电话和语音网关支持VPN协议。

原理

OpenVpn的技术核心是虚拟网卡,其次是SSL协议实现:
虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统下都有相应的实现,这也是OpenVpn能够跨平台一个很重要的理由。

在OpenVpn中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发送出去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程,反之亦然。

2.vpn的优点与缺点

优点:成本低,vpn是一个廉价有效的构建私有网络的方式,用它可以替代昂贵的实体专线;灵活,vpn比实体专线更灵活。例如,一个公司可以在VPN站点的数量调整,根据不断变化的需求。
缺点:搭建vpn不容易,对技术要求非常高,需要对网络和安全问题有高水平的理解以及认真地规划和配置。由于在互联网上缺乏质量服务(QoS)管理,可能会导致数据包丢失和其他性能问题。若公共网络条件发生问题,则私网的VPN管理员不能控制。出于这个原因,许多大公司一般购买使用可信VPN使用专用网络,以保证服务质量。

3.VPN有什么用?

一、访问外网
大家知道,为了社会的和谐,我们在国内是无法访问某些国外网站的,而很多人为了学习与交流,需要访问比如twitter、facebook、youtube等网站,那么你该怎么做呢? 有人会说,通过代理上网,网上有一些免费在线代理上网的服务,可以试试。我只能说这是个权益之计,因为用在线代理上网,有很大的局限性。比如说网站打开速度超慢、网页广告超多、关键网页打不开(登录页面及评论页面)等等,更重要的是安全性得不到保障。所以在线代理只能用于临时性的访问网站,想要经常性、长久性的访问,在线代理是远远满足不了要求的。

然而如果你拥有VPN的话,一切就不用那么复杂了,连接上VPN后,国外的网站任由你访问,速度快、无广告、无限制,你可以自由的打开FaceBook、Twitter、Youtube等网站。当然,有些场合中使用VPN还是出于安全的考虑(如企业分公司之间)。

二、提升网速
1、加快访问国外网站的速度:由于我国的国际出口带宽较小的原因,与国外(泛指中国大陆之外的网络)相互访速度非常慢,使用VPN便可加快出国访问网站的速度。
2、由于国内的电信运行商之间特殊的原因,导致南北网络互访很慢(网通和电信之间,网通和教育网之间,网通和铁通、联通之间,电信和教育网之间…)。

实用案例:网游加速
举个例子,如果你是玩网络游戏的,一定知道某款游戏在不同的地域,都会有相应服务器,而我们在选择服务器的时候,往往会选择自己所在地域的服务器,原因是自己地域的服务器对自己来说,速度肯定是最快的。然而有时候,某款游戏没有在自己所在地域放置服务器,比如说韩服、美服、台服等外服网游和部分国服网游。这时候,如果只凭我们自己上网的网络,要不连不上,要不延迟高,而且有时会掉线,而如果我们拥有VPN,就可以轻松连上我们想去的服务器。

4.vpn分类

PPTP

点对点隧道协议 (PPTP) 是由包括微软和3Com等公司组成的PPTP论坛开发的一种点对点隧道协,基于拨号使用的PPP协议使用PAP或CHAP之类的加密算法,或者使用Microsoft的点对点加密算法MPPE。其通过跨越基于 TCP/IP 的数据网络创建 VPN 实现了从远程客户端到专用企业服务器之间数据的安全传输。PPTP 支持通过公共网络(例如 Internet)建立按需的、多协议的、虚拟专用网络。PPTP 允许加密 IP 通讯,然后在要跨越公司 IP 网络或公共 IP 网络(如 Internet)发送的 IP 头中对其进行封装。

img

L2TP

第 2 层隧道协议 (L2TP) 是IETF基于L2F (Cisco的第二层转发协议)开发的PPTP的后续版本。是一种工业标准 Internet 隧道协议,其可以为跨越面向数据包的媒体发送点到点协议 (PPP) 框架提供封装。PPTP和L2TP都使用PPP协议对数据进行封装,然后添加附加包头用于数据在互联网络上的传输。PPTP只能在两端点间建立单一隧道。 L2TP支持在两端点间使用多隧道,用户可以针对不同的服务质量创建不同的隧道。L2TP可以提供隧道验证,而PPTP则不支持隧道验证。但是当L2TP 或PPTP与IPSEC共同使用时,可以由IPSEC提供隧道验证,不需要在第2层协议上验证隧道使用L2TP。 PPTP要求互联网络为IP网络。L2TP只要求隧道媒介提供面向数据包的点对点的连接,L2TP可以在IP(使用UDP),桢中继永久虚拟电路 (PVCs),X.25虚拟电路(VCs)或ATM VCs网络上使用。

img

IPSec

IPSec 的隧道是封装、路由与解封装的整个过程。隧道将原始数据包隐藏(或封装)在新的数据包内部。该新的数据包可能会有新的寻址与路由信息,从而使其能够通过网络传输。隧道与数据保密性结合使用时,在网络上窃听通讯的人将无法获取原始数据包数据(以及原始的源和目标)。封装的数据包到达目的地后,会删除封装,原始数据包头用于将数据包路由到最终目的地。

img

SSLVPN

SSL协议提供了数据私密性、端点验证、信息完整性等特性。SSL协议由许多子协议组成,其中两个主要的子协议是握手协议和记录协议。握手协议允许服务器 和客户端在应用协议传输第一个数据字节以前,彼此确认,协商一种加密算法和密码钥匙。在数据传输期间,记录协议利用握手协议生成的密钥加密和解密后来交换 的数据。

img

SSL独立于应用,因此任何一个应用程序都可以享受它的安全性而不必理会执行细节。SSL置身于网络结构体系的传输层和应用层之间。此外java培训,SSL本身就被几乎所有的Web浏览器支持。这意味着客户端不需要为了支持SSL连接安装额外的软件。这两个特征就是SSL能 应用于VPN的关键点。

三种技术对比

L2TPSSL VPNIPSec
发起方远端PC远端PC总部、分支、远端PC
身份验证基于PPP认证用户名+口令+证书地址或名字+口令或证书
加密保证
地址分配
客户端XP自带或第三方免安装式浏览器插件通常为厂家设备内部实现,PC使用厂家专用客户端
兼容互通性优良,基本上各个厂家都兼容XP客户端PC使用浏览器打开VPN,与浏览器相关优良,已经达到工业化标准成都,大部分厂家能够互通
资源消耗
性能加速加密卡硬件加速加密卡硬件加速
隧道穿越NAT可以可以可以

5.什么是VPN使用的隧道技术与隧道协议

VPN隧道所使用的公共网络可以是任何类型的通信网络。可以是Internet,也可以是企业内部网。为创建隧道,VPN的客户机和服务器必须使用相同的隧道协议,常用的隧道协议包括点对点隧道协议PPTP、第2层隧道协议L2TP和安全IP隧道模式IPSec。

按照开放系统互联OSI参考模型划分,隧道技术可以分为以第2层隧道协议为基础的技术和以第3层隧道协议为基础的技术。第2层隧道协议对应OSI模型中的数据链路层,使用帧作为数据传输单位。PPTP和L2TP协议属于第2层隧道协议,都是将数据封装在点对点协议(PPP)的帧中通过Internet发送。第3层隧道协议对应OSI模型中的网络层,使用包作为数据传输单位。安全IP隧道模式IPSec属于第3层隧道协议,是将数据包封装在附加了IP包头的新数据包中通过IP网络传送。

点对点隧道协议(PPTP,Point-to-PointTunnelingProtocol)将点对点协议(PPP,Point-to-PointProtocol)的数据帧封装进IP数据包中,通过TCP/IP网络进行传输。PPTP可以对IP、IPX或NetBEUI数据进行加密传递。PPTP通过PPTP控制连接来创建、维护和终止一条隧道,并使用通用路由封装(GRE,GenericRoutingEncapsulation)对PPP数据帧进行封装。封装前,PPP数据帧的有效载荷(有效传输数据)首先必须经过加密、压缩或是两者的混合处理。

第2层隧道协议(L2TP,LayerTwoTunnelingProtocol)是PPTP和第2层转发技术(L2F,LayerTwoForward)的结合。第2层转发是Cisco公司提出的隧道技术。为了避免PPTP和L2F两种互不兼容的隧道技术在市场上彼此竞争给用户造成困惑和带来不便,Internet工程任务委员会IETF要求将两种技术结合在单一隧道协议中,并在该协议中综合PPTP和L2F两者的优点,由此产生了L2TP。L2TP协议将PPP数据帧封装后,可通过TCP/IP、X.25、帧中继或ATM等网络进行传送。L2TP可以对IP、IPX或NetBEUI数据进行加密传递。目前,仅定义了基于TCP/IP网络的L2TP。L2TP隧道协议既可用于Internet,也可用于企业内部网。

为了实现在专用或公共IP网络上的安全传输,安全IP隧道模式IPSec使用安全方式封装和加密整个IP包。它首先对IP数据包进行加密,然后将密文数据包再次封装在明文IP包内,通过网络发送到接收端的VPN服务器。VPN服务器对收到的数据包进行处理,在去除明文IP包头,对内容进行解密之后,获得原始的IP数据包,再将其路由到目标网络的接收计算机。

在这三种隧道协议中,点对点隧道协议PPTP和第2层隧道协议L2TP的优点是对用微软公司操作系统的用户来说很方便学习java培训,因为微软公司已把它们作为路由软件的一部分;缺点是PPTP和L2TP将不安全的IP数据包封装在安全的IP数据包内。PPTP和L2TP适用于远程访问虚拟专用网。安全IP隧道模式IPSec的优点是它定义了一套用于认证、保护私密和数据完整性的标准协议,缺点是微软公司对IPSec的支持不够。IPSec适用于可信的局域网之间的虚拟专用网,即企业内部网VPN应用。

OpenVPN
典型的SSL VPN应用如OpenVPN,是一个比较好的开源软件。PPTP主要为那些经常外出移动或家庭办公的用户考虑;而OpenVPN主要是针对企业异地两地总分公司之间的VPN不间断按需连接,例如ERP在企业中的应用。
OpenVPN 允许参与建立VPN的单点使用预设的私钥,第三方证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库,以及SSLv3/TLSv1 协议。OpenVPN能在Linux、xBSD、Mac OS X与Windows上运行。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。

隧道加密
OpenVPN使用OpenSSL库加密数据与控制信息:它使用了OpesSSL的加密以及验证功能,意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。

验证
OpenVPN提供了多种身份验证方式,用以确认参与连接双方的身份,包括:预享私钥,第三方证书以及用户名/密码组合。预享密钥最为简单,但同时它 只能用于建立点对点的VPN;基于PKI的第三方证书提供了最完善的功能,但是需要额外的精力去维护一个PKI证书体系。OpenVPN2.0后引入了用 户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍有一份服务器证书需要被用作加密.

网络
OpenVPN所有的通信都基于一个单一的IP端口,默认且推荐使用UDP协议通讯,同时TCP也被支持。OpenVPN连接能通过大多数的代理服务 器,并且能够在NAT的环境中很好地工作。服务端具有向客户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。OpenVPN提供 了两种虚拟网络接口:通用Tun/Tap驱动,通过它们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数 据可通过LZO算法压缩。IANA(Internet Assigned Numbers Authority)指定给OpenVPN的官方端口为1194。OpenVPN 2.0以后版本每个进程可以同时管理数个并发的隧道。
OpenVPN使用通用网络协议(TCP与UDP)的特点使它成为IPsec等协议的理想替代,尤其是在ISP(Internet service provider)过滤某些特定VPN协议的情况下。在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择 TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。

安全
OpenVPN与生俱来便具备了许多安全特性:java培训在用户空间运行,无须对内核及网络协议栈作修改; 初始完毕后以chroot方式运行,放弃root权限;使用mlockall以防止敏感数据交换到磁盘。
OpenVPN通过PKCS#11支持硬件加密标识,如智能卡。

根据企业生产场景需求选择VPN方案建议

1、如果领导愿意花钱,可以选择相关硬件产品,不错的成熟的很多,例如:
防火墙、负载均衡等硬件产品都附带VPN功能。
2、对于多数互联网公司,为了体现我们运维架构师的价值,我们应该建议老板
选择开源产品,优势就是省钱,可扩展性更强(每个机房可以有高可用),例如:二次开发,相应的改动。
3、对于开源的产品建议:

  • 个人拨号选择openvpn,功能强大、稳定可靠。
  • 如果不希望单独安装客户端拨号,则可选择PPTP(pptp不支持家庭无法使用)。
  • 多个企业之间或者多个IDC机房直接互联,选择ipsec vpn或openvpn。

6.OpenVPN 2.3.4部署

系统环境
CentOS版本:6.4

OpenVPN版本:2.3.4

需求说明
使用VPN,实现广域网内服务器之间的安全互访。

选择OpenVPN,因为其在可靠性方面值得信赖,在后续的使用中,证明了这一点。

配置过程

6.1 安装依赖包

1
yum install openssl-devel lzo-devel pam-devel gcc

6.2 下载安装包

官网下载安装包openvpn-2.3.4.tar.gz,解压

1
2
3
./configure
make
make install

6.3 安装easy-rsa

新建/etc/openvpn目录,下载easy-rsa

wget https://github.com/OpenVPN/easy-rsa/archive/release/2.x.zip
解压上述文件,进入解压后的目录

cp -r ./easy-rsa /etc/openvpn
修改/etc/openvpn/easy-rsa/2.0/var文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# These are the default values for fields

# which will be placed in the certificate.

# Don't leave any of these fields blank.

export KEY_COUNTRY="xx"
export KEY_PROVINCE="xx"
export KEY_CITY="xx"
export KEY_ORG="xx"
export KEY_EMAIL="xxxx"
export KEY_OU="xx"
检查本机安装的openssl版本:

rpm -q openssl
执行结果:

openssl-1.0.1e-16.el6_5.15.x86_64
重命名预置的openssl配置文件

cp /etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/2.0/openssl.cnf

6.4 生成key

在/etc/openvpn/easy-rsa/2.0执行下列命令

1
2
3
4
5
6
. ./vars
./clean-all
./build-ca server
./build-key-server server #服务端密钥
./build-key xxx #xxx为客户端名称
./build-dh #Diffie Hellman参数

6.5 开启包转发

编辑/etc/sysctl.conf,修改

1
net.ipv4.ip_forward = 0为net.ipv4.ip_forward = 1

保存,运行

sysctl –p
配置生效,修改防火墙策略

1
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source xx.xx.xx.xx (xx.xx.xx.xx为公网IP)

6.6 配置文件

从源码包中获取配置文件模板

1
cp /root/download/openvpn-2.3.4/sample/sample-config-files/server.conf /etc/openvpn/

修改配置文件

1
2
3
4
5
6
loacl xx.xx.xx.xx
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh2048.pem
push "redirect-gateway def1 bypass-dhcp"

6.7 服务端启动

screen启动:

1
openvpn --config /etc/openvpn/server.conf

后台启动:

1
nohup openvpn --config /etc/openvpn/server.conf &

7.客户端配置

7.1 安装Openvpn客户端,将服务端生成的密钥文件

客户端下载

ca.crt
client.crt
client.key
放在客户端安装目录的config目录

修改客户端配置文件client.ovpn

1
2
3
4
remote xx.xx.xx.xx 1194 (服务端IP)
ca ca.crt
cert client.crt
key client.key

7.2 启动客户端

Linux
启动方式,同服务端相同

Windows
以管理员权限启动客户端OpenVPN GUI

点击Connect

7.3 固定客户端IP地址

打开配置

client-config-dir ccd
在/etc/openvpn新建ccd目录

在ccd目录中新建以客户端key为名称的文件,如client(无后缀名)

文件内容ifconfig-push 10.8.0.5 10.8.0.6

openvpn只支持255.255.255.252 的子网

252子网只有三个IP,客户端,服务器,广播地址

如子网10.8.0.36 主机10.8.0.37 10.8.37 广播地址10.8.0.39
子网10.8.0.40 主机10.8.0.41 10.8.42 广播地址10.8.0.43
子网10.8.0.44 主机10.8.0.45 10.8.46 广播地址10.8.0.47
子网10.8.0.48 主机10.8.0.49 10.8.50 广播地址10.8.0.51

7.4 客户端证书注销

进入 /etc/openvpn/easy-rsa/2.0 目录

执行 . ./vars 命令

1
./revoke-full xxx ( xxx 为待注销的客户端名称)

keys 目录生成一个 crl.pem

在 服务端 server.conf 配置中,增加配置

1
crl-verify /etc/openvpn/easy-rsa/2.0/keys/crl.pem

重启服务端生效

-------------本文结束感谢您的阅读-------------