OpenVPN下载、安装、配置及使用详解

 

OpenVPN简介

OpenVPN是一个用于创建虚拟专用网络(Virtual Private Network)加密通道的免费开源软件。使用OpenVPN可以方便地在家庭、办公场所、住宿酒店等不同网络访问场所之间搭建类似于局域网的专用网络通道。OpenVPN使用方便,运行性能优秀,支持Solaris、Linux 2.2+(Linux 2.2+表示Linux 2.2及以上版本,下同)、OpenBSD 3.0+、FreeBSD、NetBSD、Mac OS X、Android和Windows 2000+的操作系统,并且采用了高强度的数据加密,再加上其开源免费的特性,使得OpenVPN成为中小型企业及个人的VPN首选产品。

使用OpenVPN配合特定的代理服务器,可用于访问Youtube、FaceBook、Twitter等受限网站,也可用于突破公司的网络限制。由于OpenVPN支持UDP协议,还可以配合HTTP代理(HTTP Proxy)使用,使得只要是能够打开网站或上QQ的地方,就可以访问外部的任何网站或其他网络资源。

OpenVPN的官方最新版本是OpenVPN 2.3.0(发布于2013年01月08日),你可以点击此处查看OpenVPN 2.3.0的更新日志内容

OpenVPN下载

你可以点击下列链接直接从360云盘下载OpenVPN 2.3.0的官方正式版Windows安装文件(特别值得注意的是:由于Windows自身的限制,Windows版本的OpenVPN只有具备管理员权限的用户才能成功安装。当前最新版本的OpenVPN 2.3.0 只能在Windows XP及以上版本的操作系统上安装)。
OpenVPN 2.3.0 Windows 32位 安装文件(1.6 MB)
OpenVPN 2.3.0 Windows 64位 安装文件(1.6 MB)

OpenVPN安装

在这里笔者以同一个局域网内的两台电脑A(IP:192.168.0.2,操作系统:Windows 7 SP1 64位旗舰版)和B(IP:192.168.0.3,操作系统:Windows XP SP3 32位 专业版)为例,将电脑A作为VPN服务器、电脑B作为VPN客户端,进行安装、配置、连通测试。在这里,笔者将统一安装OpenVPN 2.3.0 Windows 32位版本的安装文件。

在安装之前,先给读者们介绍一下OpenVPN的大致工作原理,以便于更好地理解后面的安装和使用操作。

在OpenVPN中,服务器端和客户端使用的是同一个安装文件,安装方法也是一样的,只是配置方法不一样。其主要区别是,在安装目录的config文件夹下,服务器端配置的文件叫做server.ovpn,客户端配置的文件叫做client.ovpn,当然,配置文件中的内容也不相同。OpenVPN通过不同的设置来决定该程序是充当服务器端还是客户端。

OpenVPN的大致工作原理就是在服务器端和客户端之间搭建一个独立于当前网络环境的加密通道,将服务器端和多个客户端组建成一个独立的虚拟局域网,从而实现服务器端和客户端、客户端和客户端之间的相互通信。

例如,我们的电脑A和电脑B的局域网网段是192.168.0.*,OpenVPN可以在它们之间搭建一个独立的虚拟局域网,并且网段配置为10.0.0.*(网段可以由用户随意配置,只要不和它们自身的网段192.168.0.*冲突即可)。此时:

电脑A在本地局域网中的IP地址是192.168.0.2,在虚拟局域网中的IP地址是10.0.0.1;
电脑B在本地局域网中的IP地址是192.168.0.3,在虚拟局域网中的IP地址是10.0.0.6(笔者的OpenVPN客户端的IP地址设置为由服务器自动分配)。

电脑B可以通过IP地址192.168.0.1访问电脑A,也可以通过IP地址10.0.0.1访问电脑A。虚拟局域网是独立存在的,不会和本地其他网络之间形成干扰,不过虚拟局域网之间的相互访问和操作方式与本地局域网的几乎完全相同。

当然,笔者这里由于条件限制,电脑A和电脑B本身就在同一个局域网中,并且可以互相访问。可是在一些情况下,多台计算机不在同一个局域网内,并且它们之间无法直接互相访问,或者它们直接互相访问没有进行数据加密——不够安全,这个时候就轮到OpenVPN出马了。

OpenVPN在安装的时候会在电脑上安装一个虚拟网卡驱动,并在网络连接里创建一个本地连接的图标(下图的【本地连接2】)。OpenVPN就是靠它来搭建虚拟局域网的。

接下来,我们正式开始安装OpenVPN,在电脑A和电脑B上分别双击安装程序进行安装(安装方式完全一致)。在安装的时候,必须注意的是:在OpenVPN 2.3.0中,默认是不安装easy-rsa(一个加密证书生成程序)的,因此,我们必须手动勾选如下图所示的两个选项(在OpenVPN 2.2中是默认选中的)。

然后一路Next(如果询问是否安装TAP-Win32驱动程序时,请选择「仍然继续」),就安装成功了。

OpenVPN的配置

OpenVPN的配置工作主要分为如下两步:

  • 第一步,创建加密证书和私钥,其中包括服务器端和客户端都要用到的核心CA证书和私钥,服务器端自身的加密证书(即公钥)和私钥,以及每个客户端对应的加密证书和私钥。
  • 第二步,为服务器和客户端编写对应的配置文件,然后将其与第一步中生成的相应证书、私钥放在OpenVPN安装目录的config文件夹下。

OpenVPN支持基于加密证书的双向认证。在OpenVPN中,不管是服务器还是客户端,所有的证书和私钥都需要由服务器端生成,客户端要先获得服务器端分配给它的加密证书和密钥才能成功连接。这与使用网上银行有些类似,大多数银行网站都会要求你先下载并安装一个数字证书,才允许你进行网上付款或其他操作。

下面我们开始具体配置:

第一步:创建加密证书和私钥

1、修改OpenVPN服务器端vars.bat.sample文件(客户端的无需做任何修改)。

使用记事本或其他文本编辑工具打开OpenVPN安装目录\easy-rsa\vars.bat.sample文件,如下图所示:

变量HOME表示easy-rsa文件夹的路径 (笔者的OpenVPN服务器端安装在D:\OpenVPN)。
变量KEY_SIZE表示生成的私钥大小,一般填写为1024或2048,默认为1024位,你可以根据自己的需要进行修改,笔者这里使用默认值。

由于稍后给客户端生成对应加密证书和私钥时,程序会要求我们输入一些注册信息。如果你需要配置多个客户端,并且许多信息都相同(比如国家、省市、地址、公司名称等)你还可以修改vars.bat.sample文件后面的一些相关变量的默认值,这样在稍后生成客户端证书的时候,如果该信息项不输入就会采用默认值。

2、运行DOS命令,初始化执行环境。

在作为服务器端的电脑A上打开DOS命令窗口,并进入到%OpenVPN的安装目录%\easy-rsa目录。笔者的服务器端安装目录是D:\OpenVPN,因此这里进入D:\OpenVPN\easy-rsa

然后依次输入并执行以下命令(括号内的是笔者附加的注释):

init-config(初始化配置,将vars.bat.sample文件的内容复制到vars.bat。实际上,你也可以直接双击执行easy-rsa目录下的init-config.bat文件来代替这一步。)
vars(设置相应的局部环境变量,就是我们在vars.bat.sample文件中设置的内容)
clean-all(相关设置和清理工作)

3、创建CA根证书:build-ca

如上图所示,在build-ca的时候需要输入一些注册信息。在输入信息的时候,如果你不输入任何信息,就表示采用默认值(前面[]中的内容就是默认值);如果你输入.,则表示当前信息项留空白。值得注意的是,上图中红色矩形框中的OpenVPN_CA是证书的通用名称(Common Name),相当于我们常说的账号,你也可以自行输入其他名称。

4、创建服务器端证书:build-key-server server

如上图所示,命令中的参数server指的是生成的证书文件名称,你可以按照自己的需要进行修改,不过后面的Common Name也应保持一致。第二个红色矩形框中是输入的密码,你也可以根据意愿自行输入。最后程序会询问你是否注册并提交证书,两次均输入y即可。

5、创建迪菲·赫尔曼密钥:build-dh

迪菲·赫尔曼密钥交换(Diffie–Hellman key exchange,简称「D–H」) 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。

6、创建客户端证书:build-key client

如上图所示,命令中的参数client表示生成的证书文件名称,你可以按照自己的需要进行修改,不过后面的Common Name也应保持一致。第二个红色矩形框中是输入的密码,你也可以根据意愿自行输入。最后程序会询问你是否注册并提交证书,两次均输入y即可。

如果你想创建多个不同的客户端证书,只需要重复此步骤即可。切记,Common Name不要重复,这是OpenVPN用来区分不同客户端的关键所在。

7、生成ta.key:openvpn --genkey --secret keys/ta.key (可选操作)

这一步其实是可选操作,生成的ta.key主要用于防御DoS、UDP淹没等恶意攻击。命令中的第3个参数keys/ta.key表示生成的文件路径(含文件名)。

创建完证书后,我们会发现easy-rsa目录下多了一个keys文件夹。现在我们将keys文件夹中对应的文件复制到OpenVPN服务器或客户端的安装目录的config文件夹下。

服务器端config目录需要的文件包括:

ca.crt
ca.key(核心CA证书和私钥)
dh1024.pem(如果最初的变量KEY_SIZE设为2048,这里就是dh2048.pem)
server.crt
server.key(名称server根据个人设置可能有所不同)
ta.key(名称也可自行设置,如果不需要防御攻击,可以不创建或复制此文件)

客户端config目录需要的文件包括:

ca.crt
client.crt
client.key(名称client根据个人设置可能有所不同)
ta.key(如果服务器端具备此文件,客户端也应具备)

非常重要的提醒:以上命令都是在同一个DOS窗口中执行的,如果你以后需要打开新窗口来执行命令(比如创建新的客户端证书):你不需要再执行init-config命令,除非你再次改动了vars.bat.sample文件;每一次打开新窗口时都需要先执行vars命令,后面才能执行其他命令。

第二步:编写对应的配置文件

上面我们已经创建了OpenVPN配置所需要的各种证书和私钥,现在我们开始为服务器和客户端编写对应的配置文件。

对于一个刚刚接触OpenVPN的人来说,我们应该配置些什么呢,又该从哪里入手呢?别着急,OpenVPN已经考虑到了这一点。在OpenVPN的安装目录的sample-config文件夹中存放有3个示例模板文件:server.ovpn、client.ovpn、sample.ovpn。其中,server.ovpn是服务器的配置模板,client.ovpn是客户端的配置模板(sample.ovpn也可用作客户端配置模板,不过配置比较简单,不够全面。按照官方的说法,client.ovpn可用于连接具有多个客户端的服务器端配置文件)。

现在,我们就复制server.ovpn到服务器的config目录,client.ovpn到客户端的config目录,并在此基础上进行修改。在OpenVPN的配置文件中,前面带「#」或「;」的表示注释内容。

1、 编辑服务器端配置文件。

server.ovpn的英文注释中已经比较清楚地解释了每一个设置的作用,笔者对配置文件的英文注释作了全文翻译,你可以点击查看server.ovpn的配置内容详解,在此不再赘述,下面只提取所有用到的命令。

local 192.168.0.2     #指定监听的本机IP(因为有些计算机具备多个IP地址),该命令是可选的,默认监听所有IP地址。
port 1194             #指定监听的本机端口号
proto udp             #指定采用的传输协议,可以选择tcp或udp
dev tun               #指定创建的通信隧道类型,可选tun或tap
ca ca.crt             #指定CA证书的文件路径
cert server.crt       #指定服务器端的证书文件路径
key server.key    #指定服务器端的私钥文件路径
dh dh1024.pem         #指定迪菲赫尔曼参数的文件路径
server 10.0.0.0 255.255.255.0   #指定虚拟局域网占用的IP地址段和子网掩码,此处配置的服务器自身占用10.0.0.1。
ifconfig-pool-persist ipp.txt   #服务器自动给客户端分配IP后,客户端下次连接时,仍然采用上次的IP地址(第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP)。
tls-auth ta.key 0     #开启TLS,使用ta.key防御攻击。服务器端的第二个参数值为0,客户端的为1。
keepalive 10 120      #每10秒ping一次,连接超时时间设为120秒。
comp-lzo              #开启VPN连接压缩,如果服务器端开启,客户端也必须开启
client-to-client      #允许客户端与客户端相连接,默认情况下客户端只能与服务器相连接
persist-key
persist-tun           #持久化选项可以尽量避免访问在重启时由于用户权限降低而无法访问的某些资源。
status openvpn-status.log    #指定记录OpenVPN状态的日志文件路径
verb 3                #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细

实际修改内容参见下面的截图。

2、 编辑客户端配置文件。

client.ovpn中所有用到的命令如下:

client         #指定当前VPN是客户端
dev tun        #必须与服务器端的保持一致
proto udp      #必须与服务器端的保持一致
remote 192.168.0.2 1194      #指定连接的远程服务器的实际IP地址和端口号
resolv-retry infinite    #断线自动重新连接,在网络不稳定的情况下(例如:笔记本电脑无线网络)非常有用。
nobind         #不绑定特定的本地端口号
persist-key
persist-tun
ca ca.crt      #指定CA证书的文件路径
cert client.crt       #指定当前客户端的证书文件路径
key client.key    #指定当前客户端的私钥文件路径
ns-cert-type server      #指定采用服务器校验方式
tls-auth ta.key 1     #如果服务器设置了防御DoS等攻击的ta.key,则必须每个客户端开启;如果未设置,则注释掉这一行;
comp-lzo              #与服务器保持一致
verb 3                #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细

修改完毕并保存之后,我们就可以看到在电脑A(服务器端)的OpenVPN安装目录的config文件夹下包含如下文件:

在电脑B(客户端)的OpenVPN安装目录的config文件夹下包含如下文件:

最后,我们在电脑A(服务器端)的Windows运行框中输入「services.msc」,进入windows服务界面,启动服务「OpenVPN Service」:

然后,我们进入电脑B,双击OpenVPN安装时在桌面上生成的图标,此时在任务栏的右下角将会出现如下图所示的红色小图标,右键该图标,点击connect:

紧接着,就会自动弹出如下窗口,右下角图标变为黄色。

连接成功后,窗口自动关闭,右下角的图标变为绿色。

至此,OpenVPN就已经安装成功了,你可以像局域网一样地使用OpenVPN客户端访问服务器或其他客户端了。

必须说明的是,上面的有些操作并不是绝对的,比如:启动OpenVPN服务器,并不一定只有「启动OpenVPN Service服务」这一种方式,客户端的证书也不一定非得在服务器端生成……不过这些情况相对比较复杂,再次就不多作讨论了。

OpenVPN下载、安装、配置及使用详解的更多相关文章

  1. Linux中redis安装配置及使用详解

    Linux中redis安装配置及使用详解 一. Redis基本知识 1.Redis 的数据类型 字符串 , 列表 (lists) , 集合 (sets) , 有序集合 (sorts sets) , 哈 ...

  2. webpack安装配置使用教程详解

    webpack安装配置使用教程详解 www.111cn.net 更新:2015-09-01 编辑:swteen 来源:转载 本文章来为各位详细的介绍一下关于webpack安装配置使用教程吧,这篇文章对 ...

  3. FastDFS分布式文件系统&Nginx负载均衡最小环境安装配置[超级详解]

    1.背景 FastDFS 是一款开源的.分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发.该开源项目的主页是 http://code.google. ...

  4. CentOS 7.4下源码编译安装配置LAMP环境详解

    CentOS 7.4搭建LAMP,LAMP:Linux.Apache.MySQL.PHP. 目录:第一部分 准备工作第二部分 安装Apache服务第三部分 安装MySQL服务第四部分 搭建PHP运行环 ...

  5. 安装配置Xdebug模块详解

    1.XDebug安装配置 (1)下载XDebug下载地址:http://www.xdebug.org/必须下载跟机器上安装的php匹配的版本才行.具体下载方法如下:将phpinfo网页的源代码拷贝到h ...

  6. Redis安装配置及使用详解

    1. 简介-两个程序通信,除了socket就是文件了,但是通过磁盘效率太低了,之前的RabbitMQ只是实现了消息的传递,现在要是实现数据的共享(一份数据,可供多人查阅),可以通过缓存实现,一个中间商 ...

  7. pureftpd安装配置-pureftp参数详解(一)

    1. 下载 #cd /usr/local/src/ #wget ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.30.tar.g ...

  8. 【新技术】CentOS系统下docker的安装配置及使用详解

    1 docker简介    Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器.它原本是dotCloud 启动的一个业余项目,并在前些时候开源了.它吸引了大量的关注和讨 ...

  9. [转载]Docker的安装配置及使用详解

    简介    官网:http://www.docker.com/,点击get started进入下载,目前三个系统的docker容器都有,Windows版需要win10系统,我的是win7系统一开始用的 ...

  10. Docker的安装配置及使用详解

    基本概念 Docker 包括三个基本概念 镜像(Image) 容器(Container) 仓库(Repository) 先理解了这三个概念,就理解了 Docker 的整个生命周期. 1.docker安 ...

随机推荐

  1. aggregations 详解1(概述)

    aggregation分类 aggregations —— 聚合,提供了一种基于查询条件来对数据进行分桶.计算的方法.有点类似于 SQL 中的 group by 再加一些函数方法的操作. 聚合可以嵌套 ...

  2. 关于Git和SVN的对比

    1.git的提交是一个DAG有向无欢图.可以看到哥哥分支之间的合并关系.SVN的提交是一条直线. 2.git的提交版本号不是一个简单递增的数字,而是一个长达40位的十六进制数字(哈希值) 但是可以适用 ...

  3. winform 上传

    public class ImitateSelectFile { public void Select(HtmlElement htmlEle, string fileFullPath) { html ...

  4. dirname(__FILE__) 的使用总结

    dirname(__FILE__) php中定义了一个很有用的常数,即 __file__ 这个内定常数是当前php程序的就是完整路径(路径+文件名). 即使这个文件被其他文件引用(include或re ...

  5. 【转载】最近在用Arrays的asList()生成的List时,List元素的个数时而不正确,数组转化为List,即Arrays.asList(intArray);

    最近在用Arrays的asList()生成的List时,List元素的个数时而不正确. Java代码 //经多次测试,只要传递的基本类型的数组,生成List的元素个数均为1 char arrc = { ...

  6. 【转】oracle的substr函数的用法

    [转]oracle的substr函数的用法 )     would return 'The' ) value from dual

  7. Plugin with id 'android-apt' not found

    解决路径: 1.查看miniSDK最外面的build.gradle 添加这句.具体参考一下demo.谢谢

  8. 在shell的if条件里,判断 a>0 且 (b>0 或 c>0) ,如何编写?

    if [ $b -gt 0 -o $c -gt 0 -a $a -gt 0 ]; then.fi对shell中的关系运算符说明如下:-gt 表示greater than,大于-lt 表示less th ...

  9. Eclipse查看历史代码

    选中要查看的文件(.class等) 右击->Team->Show Local History

  10. Trie,HDU1875world puzzle

    附上代码 #include<iostream> #include<cstdio> #include<string> #include<cstring> ...