OpenVPN 安装、配置客户端和服务端,以及OpenVPN的使用 Windows 平台

  • 时间:2017-06-02
  • 分类:数据库/系统
  • 2210 人浏览
[导读]OpenVPN允许参与创建VPN的单点使用公开密钥、电子证书、或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。

OpenVPN 开源,好用,而且免费,感谢 OpenVPN 团队开发此产品。
 
简介
OpenVPN允许参与创建VPN的单点使用公开密钥、电子证书、或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。目前OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows 2000/XP/Vista/Windows 7以及Android上运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。
加密
OpenVPN使用OpenSSL库加密数据与控制信息:它使用了OpenSSL的加密以及验证功能,意味着,它能够使用任何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协议的情况下。
安全
OpenVPN与生俱来便具备了许多安全特性:它在用户空间运行,无须对内核及网络协议栈作修改;初始完毕后以chroot方式运行,放弃root权限;使用mlockall以防止敏感数据交换到磁盘。

OpenVPN通过PKCS#11支持硬件加密标识,如智能卡。

ee7b65c23597dd993bd3a71870231131_Center.jpg

连接模式大致如图所示
 
OpenVPN 可以为1对1或者1对多,甚至多对多的分散计算机构筑安全的互联网络,简单的说,就是通过物理网卡的连接,创建虚拟网络,借由虚拟网卡访问虚拟网络,形成一个跨越广域网的虚拟局域网。
相互间的通讯经严格加密,安全可靠,比如远程管理服务器,但又当心3389或者FTP之类的端口被那些草根黑客用字典猜密码,复杂的密码虽然不大可能猜中,但也实在很烦,但真正的黑客我还是很敬仰他们的,那么言归正传。管理这类服务器通过 OpenVPN 的证书认证连接成功后,你和服务器之间如同局域网,对内网再开放端口会安全的多,维护也较容易,防火墙对外网,则只针对例如80 端口和OpenVPN 端口(可以自定,默认是1194)开放,否则就无法访问了。


OpenVPN 的配置不复杂,以 Windows 环境下为例,选择全部组件安装,安装完毕后 cmd 控制台进入C:Program FilesOpenVPNeasy-rsa 目录,我们需要创建服务端和客户端证书。
进入cmd前可能需要将C:Program FilesOpenVPNin添加到环境变量的path中。
OpenVPN 经测试,能运行于32位和64位操作系统,不过若在Windows 7下安装的话,必须以管理员权限运行。旧版本 OpenVPN 很可能在 Windows 8 运行不正常,其他旧版 Windows 32/64 平台均没问题,最新版已经支持 Windows 10。
 
制作证书,运行控制台命令
#初始化配置
init-config
#复制配置文件为批处理
vars
#清除key文件夹内的文件,文件夹不存在会自动创建
clean-all
#生成证书及key,需要填写一些参数,建议不要默认
build-ca
#创建服务端证书及key,需要填写一些参数,建议不要默认
build-key-server server
#创建一个客户端证书及key,需要填写一些参数,建议不要默认
build-key client1
#再创建一个客户端证书及key,需要填写一些参数,建议不要默认
build-key client2
#再创建一个客户端证书及key,需要填写一些参数,建议不要默认
build-key client3
#生成1024bit的key,并结束此次创建
build-dh

证书制作完毕,得到一些文件,但如果参数填写不恰当,可能生成一些0字节的crt文件,那么就得重新生成证书。生成结束后,可按照如下表格分别将文件拷贝到客户端和服务端的 config 目录中(测试时全部放一起也没关系)。

      文件名       
位置
目的
  保密
ca.crt
server + all clients
Root CA certificate
NO
ca.key
 key signing machine only
Root CA key
YES
dh{n}.pem
server only
 Diffie Hellman parameters
NO
server.crt
server only
Server Certificate
NO
server.key
server only
Server Key
YES
client1.crt
client1 only
Client1 Certificate
NO
client1.key
client1 only
Client1 Key
YES
client2.crt
client2 only
Client2 Certificate
NO
client2.key
client2 only
Client2 Key
YES
client3.crt
client3 only
Client3 Certificate
NO
client3.key
client3 only
Client3 Key
YES
 
若要增加证书,如果不是第一次创建用户,只需运行
vars
build-key mark

若要撤销证书,则使用以下命令,并得到 crl.pem 文件,
vars
revoke-full client2
再在服务端配置中加上
crl-verify crl.pem
下一步是配置文件,在 C:Program FilesOpenVPNsample-config 目录内有 client.ovpn、server.ovpn,将client.ovpn拷贝到客户端的config,server.ovpn拷贝到服务端的 C:Program FilesOpenVPNconfig 目录。

配置文件内需要指定证书文件名(默认已存在),请务必确认配置文件内证书文件名描述正确!
如果仅仅使用证书配置,除证书文件名描述正确外,只需要修改客户端配置文件指向的服务端IP即可。
也就是说,simple-config 内的配置几乎不需要修改,在证书正常的情况下,就可以直接使用!

修改客户端的 client.ovpn的remote 项,让它指向服务端外部 IP 地址,格式例如:remote x.x.x.x 1194,1194是服务端定义的端口,这个可以通过服务端的配置文件修改,服务端和客户端端口必须匹配。
证书:在第92,93行的(大概)位置,修改指定的 crt 和 key 文件,与之生成的证书文件名匹配。
 
修改服务端的 server.ovpn,其实服务端配置不修改也已经可以使用了,如果想指定内部地址10.254.254.1可自行调整;默认的crt和key就是server,若名字不同,则需要修改一下。

确保客户端 DHCP Client 服务打开,客户端需要通过这个服务接收服务端分配的 IP。
 
打开操作系统自带的 DHCP Client 服务(管理工具的服务,但通常是自动),用于获取被分配的IP地址。

部署完毕后,服务端运行 OpenVPN GUI,右键选择 server 再选择connect,激活服务端连接。注意看日志,或者 控制台运行openvpn --config server 也可以,日志将详细显示连接情况,若有问题很容易排查,全部调试通过后建议以自动启动的服务的方式运行(服务内已经被安装了OpenVPN的一项,默认手动),这样不登入桌面也可以使用VPN。
 
客户端运行 OpenVPN GUI,右键选择 client1 在选择connect,尝试连接服务端。注意看日志,便于排除问题,这次连接成功后,下次可以使用系统服务来使用OpenVPN,不需要OpenVPN GUI,这样使用更方便。
 
至此 OpenVPN 连接完成。

至于看不明白是为什么的,照葫芦画瓢走一两道,应该就明白了。
 
有一点注意,若需要更新证书,自己又处于远程位置,则在服务端控制台将证书全部生成后,先把客户端证书下载好(但不部署),接着部署服务端证书,然后重新启动 OpenVPN 的服务端的服务(这时VPN中断),再将下载好的客户端证书部署好,并重新连接,即完成全部证书更新,不过整个过程需特别谨慎,不能有差错,否则可能被关在服务器外面,或者先把3389打开,再更新证书,但风险会有提高。
 
官方推荐使用UDP协议(UDP要比TCP节省资源),不过据我个人测试下来,TCP连接在意外中断后自动重连接速度更快一些,但UDP协议兼容性更高;客户端和服务端的配置文件还有一些其他属性,各位可以参考备注或者下面留的链接。
 
通过配置文件的 client to client 开关,还能将互联网上的多台终端集合到一个虚拟的局域网中,实现相互访问。

来源:本文为线上采编,如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除!