Keuin's

在Windows Server上搭建OpenVPN服务器

OpenVPN是一个TCP协议的网络层VPN实现。性能一般,但是使用广泛。

什么是OpenVPN

引用维基百科对OpenVPN的解释:

OpenVPN is a virtual private network (VPN) system that implements

techniques to create secure point-to-point or site-to-site connections

in routed or bridged configurations and remote access facilities.

在Windows上搭建OpenVPN服务器

下载+安装

OpenVPN的软件部分分为客户端和服务端两部分,而在OpenVPN官网的首页给的下载地址中,并没有适用于Windows的服务端程序。

它被藏在了这个页面里。直接下载Windows 64-bit MSI installer就可以了。(如果是32位系统,你需要下载32-bit的,但我相信你是64位的Windows)

安装的时候一路next就可以了,不过有一点需要注意,选择安装组件的时候,easyrsa3并没有默认选中,需要手动选上。

安装后,为了使得虚拟网络适配器的驱动被Windows加载,需要重新启动。

生成CA根证书、服务端及客户端的公私钥对

这一部分主要参考了参考阅读部分的文章1(OpenVPN server on Windows)。假设你使用的是默认安装目录,打开一个Shell,依次执行如下步骤:

1. 切换工作目录


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

2. 启动EasyRSA


EasyRSA-Start.bat

3. 初始化PKI(公钥基础设施)


./easyrsa init-pki

4. 编辑配置文件


notepad vars.bat

5. 在记事本中写入如下内容(记得修改)


set KEY_COUNTRY=US

set KEY_PROVINCE=CA

set KEY_CITY=SanFrancisco

set KEY_ORG=OpenVPN

set [email protected]

set DH_KEY_SIZE=2048

6. 保存,生效


vars.bat

./easyrsa clean-all

7. 生成CA根证书(nopass参数表示不使用密码保护私钥,下同)


./easyrsa build-ca nopass

8. 生成服务器端的私钥


./easyrsa build-server-full server nopass

9. 生成客户端的私钥(如果有多个客户端,需要生成多个)


./easyrsa build-client-full YourClientName nopass

10. 生成DH参数(DH是一个用来协商密钥的协议,如欲了解详情,可以阅读本人的相关密码学分析博客)


./easyrsa gen-dh

11. 生成TLS握手用到的静态密钥

默认情况下,OpenVPN在TLS握手时使用静态密钥,需要用如下命令生成:


openvpn --genkey tls-auth ta.key

需要注意的是,这个密钥需要通过安全的方式分发给服务器和客户,并且需要妥善保存*(密码学不保护密钥!)*。官方文档是这样说的:

This key should be copied over a pre-existing secure channel to the

server and all client machines.

创建配置文件

在OpenVPN目录下的sample-config目录里,可以找到一些示例配置文件。注意,.ovpn其实就是linux下OpenVPN的.conf配置文件,其内容完全相同,只是扩展名不同而已。

将服务器的示例配置文件拷贝一份到config-auto目录下并编辑,找到如下几行:


ca ca.crt

cert server.crt

key server.key

dh dh1024.pem

tls-auth ta.key 0

分别将他们改为你的实际文件目录,如:


ca "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\ca.crt"

cert "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\issued\\server.crt"

key "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\private\\server.key"

dh "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\dh.pem"

tls-auth "C:\\Program Files\\OpenVPN\\easy-rsa\\ta.key" 0

这个配置文件还有些地方需要修改一下:

重启服务,应用配置文件

在运行中输入services.msc,打开服务管理页面,找到OpenVPN的服务,点击“重新启动”来重启OpenVPN服务。

服务重启后,查看OpenVPN目录下log文件夹内的server.log文件,此时应该可以看到OpenVPN服务已经正常启动了。如果有错误,按照错误提示进行修正。

登录到刚刚配置好的OpenVPN服务器

同样地,OpenVPN的客户端使用.ovpn配置文件进行配置,不过服务端和客户端的配置文件不通用。要创建客户端的配置文件,需要从sample-config目录里拷贝client.ovpn进行修改。首先要修改其中的地址、端口号和协议类型,还有加密模式。(准确地说是A.E.模式,认证加密)

将配置文件拷贝给客户端使用,同时也需要将CA的证书、TLS密钥、客户端证书及私钥拷贝给客户端,就是这些文件:

参考阅读