VPS搭建VPN(四):OpenVPN的搭建步骤

OpenVPN安装(Windows版)

在这里笔者以同一个局域网内的两台电脑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就是靠它来搭建虚拟局域网的。

TAP-WIN32驱动程序创建的本地连接

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

OpenVPN安装截图

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

OpenVPN的配置

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

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

下面我们开始具体配置:

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

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

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

vars.bat.sample文件截图1

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

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

vars.bat.sample文件截图2

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

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

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

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

OpenVPN初始化DOS命令截图

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

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

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

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

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

OpenVPN创建DH参数

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

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

OpenVPN_创建客户端证书

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

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

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

OpenVPN_创建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,等级越高日志内容越详细

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

OpenVPN_Server配置文件截图1

OpenVPN_Server配置文件截图2OpenVPN_Server配置文件截图3

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文件夹下包含如下文件:

OpenVPN_Server配置文件截图

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

OpenVPN_Client配置文件截图

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

OpenVPN_Service截图

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

OpenVPN_客户端图标截图

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

OpenVPN_连接自动弹出窗口

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

OpenVPN_安装并连接成功

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

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

  • OpenVPN的搭建步骤
    安卓汉化版下载(提取码:frp4) Windows32位下载(提取码:1tge) Windows64位下载(提取码:jmte)
     

    
    		
    操作系统 软件
    Installer (32-bit), Windows XP openvpn-install-2.3.10-I001-i686.exe
    Installer (64-bit), Windows XP openvpn-install-2.3.10-I001-x86_64.exe
    Installer (32-bit), Windows Vista and later openvpn-install-2.3.10-I601-i686.exe
    Installer (64-bit), Windows Vista and later openvpn-install-2.3.10-I601-x86_64.exe

    (注:适用centos6.X的系统搭建,比较稳定)

  • 1. 安装OpenVPN软件包(Linux版)

    默认的Centos软件源里面没有OpenVPN的软件包,我们可以添加rpmforge的repo,从而实现yum安装openvpn

    针对CentOS 5

    rpm -ivh http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

    针对CentOS 6

    rpm -ivh http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

    安装完rpmforge的repo之后,执行yum命令安装OpenVPN

    yum install -y openvpn

    2. 生成OpenVPN需要的证书

    使用easy-rsa脚本产生OpenVPN所需的CA证书、CA私钥、服务端证书、服务端私钥、客户端证书、客户端私钥
    先将easy-rsa脚本copy到/etc/openvpn,并添加可执行权限

    cp -R /usr/share/doc/openvpn-*/easy-rsa /etc/openvpn 
    cd /etc/openvpn/easy-rsa/2.0
    chmod +x  *

    然后使用easy-rsa的脚本产生证书

    ln -s openssl-1.0.0.cnf openssl.cnf
    . vars
    ./clean-all
    ./build-ca server
    ./build-key-server server
    ./build-key client
    ./build-dh

    执行以上命令后将在/etc/openvpn/easy-rsa/2.0/keys/目录下产生对应的证书和秘钥,ls一下确认都已经生成,后面要用到。

    ls /etc/openvpn/easy-rsa/2.*/keys/

    3.生成OpenVPN服务端配置文件

    编辑/etc/openvpn/server.conf文件,内容如下:

    port        1194
    proto       udp
    dev         tun
    ca          /etc/openvpn/easy-rsa/2.0/keys/ca.crt
    cert        /etc/openvpn/easy-rsa/2.0/keys/server.crt
    key         /etc/openvpn/easy-rsa/2.0/keys/server.key
    dh          /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
    server      10.1.1.0 255.255.255.0
    push        "redirect-gateway def1 bypass-dhcp"
    push        "dhcp-option DNS 8.8.8.8"
    log         /var/log/openvpn.log
    keepalive   10 120
    verb        3
    client-to-client
    comp-lzo
    persist-key
    persist-tun

    4.开启OpenVPN服务

    将openvpn设置为开机自启动的服务

    chkconfig openvpn on

    立即启动openvpn服务

    /etc/init.d/openvpn start

    如果OpenVPN启动失败,请查看OpenVPN的启动日志/var/log/openvpn.log。可能导致启动失败的原因:

    • 第3步使用easy-rsa生成的证书有问题,请重新按照第3步重新生成

    5.服务端开启nat功能

    客户端拨入OpenVPN后,默认网关会指向OpenVPN服务器,为了能使客户端可以上网,需要在服务端开启nat功能
    首先,打开ip forward功能

    sed -i '/net.ipv4.ip_forward/s/0/1/g' /etc/sysctl.conf 
    sysctl -w net.ipv4.ip_forward=1

    然后,配置iptables snat

    iptables -t nat -A POSTROUTING -s 10.1.1.0/255.255.255.0 -j SNAT --to-source SERVER_IP

    将SERVER_IP替换为服务器的出口ip

    OpenVPN客户端配置

    好了服务端准备就绪,接下来开始客户端配置

    对于Windows客户端

    http://openvpn.se/download.html 下载gui版的OpenVPN,按照提示安装完成后,进入到安装目录,如D:Program FilesOpenVPN。将Linux服务端使用easy-rsa产生的客户端证书、私钥和ca证书下载到本地。即需要下载到本地的文件如下:

    /etc/openvpn/easy-rsa/2.0/keys/ca.crt       #ca证书
    /etc/openvpn/easy-rsa/2.0/keys/client.crt   #客户端证书
    /etc/openvpn/easy-rsa/2.0/keys/client.key   #客户端私钥

    将这些文件下载到D:Program FilesOpenVPNconfig下。
    编辑客户端OpenVPN配置文件client.ovpn,内容如下:

    client
    dev tun
    proto udp
    remote SERVER_IP 1194
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    ca ca.crt
    cert client.crt
    key client.key
    comp-lzo
    verb 3
    redirect-gateway def1
    route-method exe
    route-delay 2

    将SERVER_IP写成OpenVPN服务器的ip,然后打开OpenVPN的GUI,点击连接,完成OpenVPN拨入

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

  • 接下来是手机连接OpenVPN的过程: 

    手机安装openvpn应用程序:

  • 1.安装完进入点击右上角,弹框里选import

  • 2.点击import profile from sd,意思是导入已上传的openvpn.ovpn配置文件

  • 3.然后输入自己创建的用户名和密码,点击Connect

  • 4.出现OpenVPN:Connected表明已经连接

  • 5.在浏览器输入ip回车,查看ip是否已经改变

  • 6.打开谷歌测试成功,OpenVPN成功连接

  •  

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。