window server部署open VPN
目录
一、下载
需要启用TLS -auth当前easy-tls的最新版本是:2.7.0,对应的支持版本
- Easy-RSA Version 3.0.6+
- OpenVPN Version 2.5.0+
因此我们下载OpenVPN时要注意,下载2.5.*版本,不能一股脑的下载最新版本,不然到最后启用TLS-auth时,就会提示OpenSSL版本不支持
open VPN下载地址(注意选择版本 2.5.10):https://openvpn.net/community-downloads/
easy-tls下载地址(版本 2.7.0):https://github.com/TinCanTech/easy-tls
二、安装openVPN
双击OpenVPN安装程序,选择Customize
默认情况下不会安装的两个功能OpenVPN Service和OpenSSLUtilities,我们需要在安装过程中进行选择。
功能选择1. 选择安装 OpenVPN Service,
功能选择2. 选择安装 OpenSSL Utilities,
选择后点击 Install Now进行安装。
安装完成后点击Close后,会启动opwnVPN,然后弹出报错
这里先不管这个错误,直接点击确定。
我们打开网络连接,可以看到多了两个OpenVPN的网络,看到这两个就代表OpenVPN安装成功
三、设置CA证书、生成服务端和客户端的证书和私钥等
3.1、新建vars配置文件
找到目录“C:\Program Files\OpenVPN\easy-rsa”,将文件vars.example复制一份改名为vars,“vars”文件包含内置的Easy-RSA配置设置。可以保持默认设置,也可以自定义更改。
属性 | 默认值 | 作用 |
set_var EASYRSA | C:\Program Files\OpenVPN\easy-rsa | Defines the folder location of easy-rsa scripts |
set_var EASYRSA_OPENSSL | C:\Program Files\OpenVPN\bin\openssl.exe | Defines the OpenSSL binary path |
set_var EASYRSA_PKI | C:\Program Files\OpenVPN\easy-rsa\pki | The folder location of SSL/TLS file exists after creation |
set_var EASYRSA_DN | cn_only | This is used to adjust what elements are included in the Subject field as the DN |
set_var EASYRSA_REQ_COUNTRY | “US” | Our Organisation Country |
set_var EASYRSA_REQ_PROVINCE | “California” | Our Organisation Province |
set_var EASYRSA_REQ_CITY | “San Francisco” | Our Organisation City |
set_var EASYRSA_REQ_ORG | “Copyleft Certificate Co” | Our Organisation Name |
set_var EASYRSA_REQ_EMAIL | “me@example.net” | Our Organisation contact email |
set_var EASYRSA_REQ_OU | “My Organizational Unit” | Our Organisation Unit name |
set_var EASYRSA_KEY_SIZE | 2048 | Define the key pair size in bits |
set_var EASYRSA_ALGO | rsa | The default crypt mode |
set_var EASYRSA_CA_EXPIRE | 3650 | The CA key expire days |
set_var EASYRSA_CERT_EXPIRE | 825 | The Server certificate key expire days |
set_var EASYRSA_NS_SUPPORT | “no” | Support deprecated Netscape extension |
set_var EASYRSA_NS_COMMENT | “HAKASE-LABS CERTIFICATE AUTHORITY” | Defines NS comment |
set_var EASYRSA_EXT_DIR | "$EASYRSA/x509-types" | Defines the x509 extension directory |
set_var EASYRSA_SSL_CONF | "$EASYRSA/openssl-easyrsa.cnf" | Defines the openssl config file location |
set_var EASYRSA_DIGEST | "sha256" | Defines the cryptographic digest to use |
如没有特殊要求,则vars文件保持默认即可。
3.2、启动easy-rsa shell会话
现在打开cmd(管理员权限),切换到“C:\Program Files\OpenVPN\easy-rsa”目录下
输入.\EasyRSA-Start.bat回车后,我们会进入到easy-rsa3的shell会话
3.3、执行init-pki来创建pki目录
./easyrsa init-pki
3.4、构建证书颁发机构(CA)密钥
现在,使用下面的命令构建证书颁发机构(CA)密钥。这个CA根证书文件稍后将用于签署其他证书和密钥。我们使用的“nopass”选项用于禁用密码。
./easyrsa build-ca nopass
命令将被要求输入通用名称。这里我输入的VPN服务器主机名是OPENVPNSERVER,这是一种常见的做法。在这里,我们可以自由使用任何名称或值。同时创建的CA证书将被保存到文件夹“C:\Program Files\OpenVPN\easy-rsa\pki”,文件名为“ca .crt”。请参考下面的截图。
3.5、构建服务器证书和密钥
现在使用下面的命令构建一个服务器证书和密钥。这里将< SERVER >替换为您自己的服务器名。我还使用Option nopass来禁用密码。
./easyrsa build-server-full <SERVER> nopass
颁发的服务器证书将在“C:\Program Files\OpenVPN\easy-rsa\pki\issued”文件夹中,文件名为SERVER .crt。
这里可以使用以下命令进行验证,返回ok就没问题
openssl verify -CAfile pki/ca.crt pki/issued/SERVER.crt
3.6、构建客户端证书和密钥
现在,使用下面的命令构建客户端证书和密钥。将< CLIENT >替换为您的客户端名称。也使用选项nopass来禁用密码。
./easyrsa build-client-full <CLIENT> nopass
颁发的客户端证书也会被保存到“C:\Program Files\OpenVPN\easy-rsa\pki\issued”文件夹中,文件名为“CLIENT.crt”。
同样这里可以使用以下命令进行验证,返回ok就没问题
openssl verify -CAfile pki/ca.crt pki/issued/CLIENT.crt
到这里就完成了CA证书,服务器和客户端证书的生成和密钥。这些密钥将用于OpenVPN服务器和客户端之间的身份验证。
3.7、启用TLS-auth
现在生成一个用于标准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密钥。
这需要和openVPN对应的版本,在本文开始已有说明,这里我们下载2.7.0,对应的openVPN版本为2.5.10
然后解压“easy-tls-2.7.0.zip文件夹,将“easytls”和“easytls-openssl.cnf”文件拷贝到“C:\Program files \OpenVPN\easy-rsa”目录下。查看下面的截图作为参考。
现在回到EasyRSA shell提示符并输入下面的命令。初始化easy-tls脚本程序。
./easytls init-tls
现在,使用下面的命令生成tls-auth密钥。
./easytls build-tls-auth
该命令将生成名为“tls-auth”的密钥文件。在“C:\Program Files\OpenVPN\easy-rsa\pki\easytls”文件夹下。
3.8、生成Diffie Hellman参数
现在我们需要生成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”。
这就完成了OpenVPN服务所需的SSL/TLS密钥文件的生成。我们将能够在下面的文件夹中找到创建的文件。
目录 | 内容 |
---|---|
C:\Program Files\OpenVPN\easy-rsa\pki | CA file, DH file and other OpenSSL related files like config file |
C:\Program Files\OpenVPN\easy-rsa\pki\private | Include the private key files of CA, Server and Client certificates |
C:\Program Files\OpenVPN\easy-rsa\pki\easytls | Contains the tls-auth key |
C:\Program Files\OpenVPN\easy-rsa\pki\issued | Contains issued Server and Client certificates |
下面是有关文件的简短说明
FileName | Needed By | Purpose | Secret |
---|---|---|---|
easy-rsa\pki\ca.crt | server + all clients | Root CA certificate | No |
easy-rsa\pki\private\ca.key | Server Only | Root CA key | Yes |
easy-rsa\pki\dh.pem | server only | Diffie Hellman parameters | No |
easy-rsa\pki\issued\SERVER.crt | server only | Server Certificate | No |
easy-rsa\pki\private\SERVER.key | server only | Server Key | Yes |
easy-rsa\pki\issued\CLIENT.crt | Client only | Client Certificate | No |
easy-rsa\pki\private\CLIENT.key | Client only | Client Key | Yes |
easy-rsa\pki\easytls\tls-auth.key | server + all clients | Used for tls-auth directive | No |
四、配置IP转发和网络共享
4.1、注册表配置
打开注册表 (win
+r
,输入regedit.exe
) 找到 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
将IPEnableRouter
改为1
4.2、网卡连接共享配置
打开网络连接,右键点击以太网,打开属性,在“共享”中钩上“允许其他网络用户通过此计算机的internet连接来连接”,并选择“OpenVPN TAP-Windows6”,点击确定。
4.3、防火墙配置
防火墙和阿里云配置服务器网络安全组策略
配置入站
协议UDP
1194
端口为允许
五、创建服务端配置文件
首先打开Windows资源管理器,进入C:\Program Files\OpenVPN\sample-config文件夹,将server.ovpn文件复制一份到C:\Program Files\OpenVPN\config目录下。
同时将以下文件一并复制到C:\Program Files\OpenVPN\config目录下
- easy-rsa\pki\ca.crt
- easy-rsa\pki\dh.pem
- easy-rsa\pki\issued\SERVER.crt
- easy-rsa\pki\private\SERVER.key
- easy-rsa\pki\easytls\tls-auth.key
编辑server.ovpn文件,检查并修改一下几个地方
local [服务器外网IP]
ca ca.crt
cert SERVER.crt
dh dh.pem
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 100.100.2.136"
push "dhcp-option DNS 100.100.2.138"
tls-auth tls-auth.key 0 # This file is secret
cipher AES-256-GCM
右键托盘中的openVPN图标。点击链接,图标变为绿色代表链接成功
六、客户端安装与配置
6.1、安装客户端
打开安装程序,直接点击 Install Now
6.2 、配置客户端
复制以下文件到你的客户端,并且在同一目录下
- ca.crt
- CLIENT.crt
- CLIENT.key
- tls-auth.key
- client.ovpn(“C:\Program Files\OpenVPN\sample-config”)
编辑client.ovpn,修改一下参数,其他保持默认
remote [服务器外网IP] 1194
ca ca.crt
cert client.crt
key client.key
tls-auth tls-auth.key 1
cipher AES-256-GCM
右键openVPN连接后,图标变绿代表链接成功
多个客户端分配IP相同的问题
日志显示,使用相同的客户端证书连接的每个客户端,当这种情况发生时,OpenVPN删除了另一个连接
通常情况下,不同的用户应该拥有不同的证书,但是如果您想让同一个用户在多个设备上使用相同的证书,您可以按照它的要求,
效果:
实现方案:
win server部署open VPN(亲测有用---成功)-CSDN博客
旧版 2.4.* openVPN部署:https://www.jianshu.com/p/0d7c0c2ac0b3
其他资料:
使用OpenVPN连通多个局域网的一种配置方案 - 梦云智开发团队 - SegmentFault 思否