下载地址:https://openvpn.net/community-downloads/

1、服务器和客户端均使用相同安装文件

服务器端安装时需选择openvpn service和openssl utilities都安装,客户端可不用安装

安装完以后可以看到如下图:

win server 2008 部署openVPN_服务器

2、服务器端制作CA证书、生成服务端和客户端的证书与私钥

win server 2008 部署openVPN_服务器_02

如没有特殊要求,则vars文件保持默认即可。

现在打开cmd(管理员权限),切换到“C:\Program Files\OpenVPN\easy-rsa”目录下

cd C:\Program Files\OpenVPN\easy-rsa

EasyRSA-Start.bat

输入EasyRSA-Start.bat回车后,我们会进入到easy-rsa3的shell会话

win server 2008 部署openVPN_文件名_03

执行init-pki来创建pki目录

./easyrsa init-pki

win server 2008 部署openVPN_服务器_04

现在,使用下面的命令构建证书颁发机构(CA)密钥。这个CA根证书文件稍后将用于签署其他证书和密钥。我们使用的“nopass”选项用于禁用密码。

./easyrsa build-ca nopass

命令将被要求输入通用名称。这里我输入的VPN服务器主机名是OPENVPNSERVER,这是一种常见的做法。在这里,我们可以自由使用任何名称或值。同时创建的CA证书将被保存到文件夹“C:\Program Files\OpenVPN\easy-rsa\pki”,文件名为“ca .crt”。请参考下面的截图。

win server 2008 部署openVPN_文件名_05

现在使用下面的命令构建一个服务器证书和密钥。这里将< SERVER >替换为您自己的服务器名。我还使用Option nopass来禁用密码。

./easyrsa build-server-full 服务器名  nopass

颁发的服务器证书将在“C:\Program Files\OpenVPN\easy-rsa\pki\issued”文件夹中,比如文件名为SERVER .crt。

win server 2008 部署openVPN_客户端_06

这里可以使用以下命令进行验证,返回ok就没问题

openssl verify -CAfile pki/ca.crt pki/issued/SERVER.crt

现在,使用下面的命令构建客户端证书和密钥。将< CLIENT >替换为您的客户端名称。也使用选项nopass来禁用密码。

./easyrsa build-client-full 客户端计算机名  nopass

以上命令为需要加入VPN的电脑单独生成一个,用于分IP使用,如果使用相同名称,则会出现多台IP均为一样的情况

颁发的客户端证书也会被保存到“C:\Program Files\OpenVPN\easy-rsa\pki\issued”文件夹中,文件名为“CLIENTXXB.crt”。

win server 2008 部署openVPN_服务器_07

同样这里可以使用以下命令进行验证,返回ok就没问题

openssl verify -CAfile pki/ca.crt pki/issued/CLIENT.crt

到这里就完成了CA证书,服务器和客户端证书的生成和密钥。这些密钥将用于OpenVPN服务器和客户端之间的身份验证。

现在生成一个用于标准RSA证书/密钥之外的共享密钥。文件名为tls-auth.key。

使用这个密钥,我们启用TLS -auth指令,它添加一个额外的HMAC签名到所有SSL/TLS握手包的完整性验证。任何不带有正确HMAC签名的UDP包可以被丢弃而无需进一步处理。

启用tls-auth可以保护我们免受:

OpenVPN UDP端口上的DoS攻击或端口泛洪。 端口扫描,以确定哪些服务器UDP端口处于侦听状态。 SSL/TLS实现中的缓冲区溢出漏洞。 从未经授权的机器发起SSL/TLS握手。 首先使用GitHub链接https://github.com/TinCanTech/easy-tls下载Easy-TLS。它是一个Easy-RSA扩展工具,我们正在使用它来生成tls-auth密钥。

请参考下面的截图。

win server 2008 部署openVPN_文件名_08

win server 2008 部署openVPN_客户端_09

然后解压“easy-tls-2.7.0.zip文件夹,将“easytls”和“easytls-openssl.cnf”文件拷贝到“C:\Program files \OpenVPN\easy-rsa”目录下。查看下面的截图作为参考。

win server 2008 部署openVPN_服务器_10

有可能 没有这两个程序,可以下载2.5版本找到以上两个文件

现在回到EasyRSA shell提示符并输入下面的命令。初始化easy-tls脚本程序。

./easytls init-tls

现在,使用下面的命令生成tls-auth密钥。

./easytls build-tls-auth

该命令将生成名为“tls-auth”的密钥文件。在“C:\Program Files\OpenVPN\easy-rsa\pki\easytls”文件夹下。请参考下面的截图。

win server 2008 部署openVPN_服务器_11

现在我们需要生成Diffie Hellman参数

OpenVPN服务器必须要生成Diffie Hellman参数

这些参数定义了OpenSSL如何执行Diffie-Hellman (DH)密钥交换。Diffie-Hellman密钥交换是一种通过公共信道安全地交换密码密钥的方法

发出下面的命令,从EasyRSA shell生成Diffie Hellman参数(这个过程可能需要1分钟左右时间)

./easyrsa gen-dh

该命令将在“C:\Program Files\OpenVPN\easy-rsa\pki”文件夹下创建dh文件,文件名为“dh .pem”。请参考下面的截图。

win server 2008 部署openVPN_客户端_12

这就完成了OpenVPN服务所需的SSL/TLS密钥文件的生成。我们将能够在下面的文件夹中找到创建的文件。

win server 2008 部署openVPN_文件名_13

下面是有关文件的简短说明

win server 2008 部署openVPN_文件名_14

步骤三:服务器端配置ip转发和网络共享 打开注册表,win+R,输入regedit.exe,依次找到:HKEY LOCAL MACHINESYSTEM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters将IPEableRouter值改为1,如下图

win server 2008 部署openVPN_客户端_15

然后打开控制面板,找到“控制面板\网络和 Internet\网络连接”,右键点击“以太网”,点击“属性”,在“共享”中钩上“允许其他网络用户通过此计算机的internet连接来连接”,并选择“OpenVPN TAP-Windows6”,点击确定。

win server 2008 部署openVPN_客户端_16

win server 2008 部署openVPN_服务器_17

步骤四:创建服务端配置文件 首先打开Windows资源管理器,进入C:\Program Files\OpenVPN\sample-config文件夹,将server.ovpn(将设服务器名称为SERVER)文件复制一份到C:\Program Files\OpenVPN\config目录下。

同时将以下文件一并复制到C:\Program Files\OpenVPN\config目录下

ca.crt

dh.pem

SERVER.crt

SERVER.key

tls-auth.key

win server 2008 部署openVPN_服务器_18

编辑server.ovpn文件,修改以下地方,其他保持默认即可

local x.x.x.x # 这个是服务器的内网IP地址

ca ca.crt

cert SERVER.crt

key SERVER.key

dh dh.pem

push " route 192.168.10.0 255.255.255.0" # 内网网段

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 114.114.114.114" # 可以改成其他的DNS服务器

push "dhcp-option DNS 8.8.8.8"

tls-auth tls-auth.key 0 # This file is secret

cipher AES-256-GCM

点击连接,图标变绿就正常。

步骤五:客户端安装

双击之前下载的OpenVPN.msi安装,选择‘’install now‘’:

步骤六:配置客户端 复制以下文件到你的客户端,并且在同一目录下

ca.crt CLIENT.crt CLIENT.key tls-auth.key client.ovpn(“C:\Program Files\OpenVPN\sample-config”) 编辑client.ovpn(假设客户机计算机名为client),修改以下参数,其他保持默认

remote ... 8080 # 服务器公网IP地址

ca ca.crt

cert client.crt

key client.key

tls-auth tls-auth.key 1

cipher AES-256-GCM

右击桌面任务栏带锁小图标,点击连接,变绿说明连接成功:

win server 2008 部署openVPN_文件名_19

步骤八:吊销客户端证书 当我们创建了多个用户使用,然后某些原因,个别用户需要禁用的时候,我们就可以使用吊销证书的方式来处理。

首先在你的OpenVPN服务器上,打开cmd管理员权限窗口,进入目录“C:\Program Files\OpenVPN\easy-rsa\”

cd "C:\Program Files\OpenVPN\easy-rsa"

EasyRSA-Start.bat

进入easyrsa的shell界面

输入以下命令

./easyrsa revoke <client>  # 你要吊销的客户端名

./easyrsa gen-crl # 生成crl.pem文件,用来记录吊销的证书

编辑server.ovpn(“C:\Program Files\OpenVPN\config”下),在行尾加入一行

crl-verify "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\crl.pem" # 用来告知服务端有哪些证书是被吊销的


客户端发现速度有点慢,作了如下修改:

优化后的服务端配置文件server.conf

local 0.0.0.0
port 1194       
proto udp            #优化项,udp
dev tun             #采用路由隧道模式
ca ca.crt            #ca证书位置,相对路径,表示ca.crt和server.conf要在同一目录
cert server.crt      #服务端证书
key server.key       #服务端key
dh dh.pem             #dh密钥
server 10.8.0.0 255.255.255.0        
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"     #客户端网关使用openvpn服务器网关
push "dhcp-option DNS 223.5.5.5"               #指定dns
push "dhcp-option DNS 114.114.114.114"
keepalive 10 300              
tls-auth ta.key 0             #服务端值为0,客户端为1
cipher AES-256-CBC
#comp-lzo            #取消传输数据压缩
persist-key
persist-tun
duplicate-cn
status openvpn-status.log
verb 3
log-append /var/log/openvpn/openvpn.log
client-config-dir /etc/openvpn/ccd 
sndbuf 0    ##优化项
rcvbuf 0    ##优化项

客户端配置文件

[root@caiwuvpn ~]# cat /etc/openvpn/client.ovpn 
client
dev tun 
proto udp  #优化项
remote xxxx 1194 
resolv-retry infinite 
nobind
persist-key 
persist-tun
ca ca.crt
cert client.crt 
key client.key 
remote-cert-tls server
tls-auth ta.key 1
#comp-lzo   #取消数据传输压缩,减小服务器压力
verb 3
cipher AES-256-CBC
sndbuf 0  #新增优化项
rcvbuf 0   #新增优化项