如何在 Debian 10 上设置 OpenVPN 服务器

此教程的早期版本是由 Justin Ellingwood_

介绍

想要安全地从智能手机或笔记本电脑上连接到不受信任的网络,如酒店或咖啡店的WiFi? Virtual Private Network(VPN)允许您私下和安全地穿过不受信任的网络,就像您在私人网络上一样。

当与 HTTPS 连接相结合时,此设置允许您保护无线登录和交易,您可以绕过地理限制和审查,并保护您的位置和未加密的 HTTP 流量免受不受信任的网络的影响。

OpenVPN是一个全功能的,开源的Secure Socket Layer(SSL)VPN解决方案,可容纳各种配置. 在本教程中,您将在Debian 10服务器上设置一个OpenVPN服务器,然后从Windows,macOS,iOS和/或Android配置访问它。

<$>[注] 注: 如果您打算在DigitalOcean Droplet上设置一个OpenVPN服务器,请注意,像许多托管提供商一样,我们会收取带宽过期费用。

请参阅此页面(https://www.digitalocean.com/docs/accounts/billing/bandwidth/)以获取更多信息。

前提条件

要完成本教程,您需要访问 Debian 10 服务器来托管您的 OpenVPN 服务. 在启动本教程之前,您需要配置具有sudo权限的非root用户。

此外,您将需要一个单独的机器作为您的证书授权机构(CA)。虽然在技术上可以使用您的OpenVPN服务器或本地机器作为您的CA,但这并不建议,因为它将您的VPN打开给一些安全漏洞。每 官方OpenVPN文档,您应该将您的CA放置在专门用于导入和签署证书请求的单独机器上。

请注意,如果您在配置这些服务器时禁用密码身份验证,您可能会在本指南晚些时候之间传输文件时遇到困难。 为了解决此问题,您可以在每个服务器上重新启用密码身份验证。 或者,您可以为每个服务器生成一个SSH键对,然后将OpenVPN服务器的公共SSH键添加到CA机器的autorized_keys文件中,反之亦然。

当您有这些前提条件时,您可以转到本教程的第 1 步。

步骤 1 – 安装 OpenVPN 和 EasyRSA

要开始,请更新您的 VPN服务器的包索引并安装OpenVPN。OpenVPN在Debian的默认存储库中可用,因此您可以使用apt进行安装:

1sudo apt update
2sudo apt install openvpn

OpenVPN是一个TLS/SSLVPN,这意味着它使用证书来加密服务器和客户端之间的流量。为了发行可信证书,您将设置自己的简单证书授权(CA)。

正如前提中提到的,我们将在独立服务器上构建 CA. 这种方法的原因是,如果攻击者能够渗透到您的服务器,他们将能够访问您的 CA 私钥,并使用它来签署新的证书,从而让他们访问您的 VPN。

要開始建立 CA 和 PKI 基礎設施,請使用「wget」下載最新版本的 EasyRSA 在您的 CA 機器和您的 OpenVPN 伺服器上。 要取得最新版本,請前往官方 EasyRSA GitHub 項目上的 ** 發行** 頁面,複製以 '.tgz' 結束的檔案的下載連結,然後貼入下列命令:

1wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz

然后提取Tarball:

1cd ~
2tar xvf EasyRSA-unix-v3.0.6.tgz

您已成功在您的服务器和 CA 机器上安装了所有所需的软件,继续配置 EasyRSA 使用的变量,并设置一个 CA 目录,从中您将生成服务器和客户端访问 VPN 所需的密钥和证书。

步骤 2 – 配置 EasyRSA 变量并构建 CA

EasyRSA 配备了一个配置文件,您可以编辑它来为您的 CA 定义一些变量。

在您的 CA 机器上,导航到 EasyRSA 目录:

1[environment second]
2cd ~/EasyRSA-v3.0.6/

此目錄內有一個名為 vars.example 的檔案. 製作此檔案的副本,並且將副本命名為 vars,而沒有檔案擴張:

1[environment second]
2cp vars.example vars

使用您喜爱的文本编辑器打开此新文件:

1[environment second]
2nano vars

查找为新证书设置域默认值的设置. 它将看起来像这样:

 1[environment second]
 2[label ~/EasyRSA-v3.0.6/vars]
 3. . .
 4
 5#set_var EASYRSA_REQ_COUNTRY    "US"
 6#set_var EASYRSA_REQ_PROVINCE   "California"
 7#set_var EASYRSA_REQ_CITY       "San Francisco"
 8#set_var EASYRSA_REQ_ORG        "Copyleft Certificate Co"
 9#set_var EASYRSA_REQ_EMAIL      "[email protected]"
10#set_var EASYRSA_REQ_OU         "My Organizational Unit"
11
12. . .

删除这些行并将突出值更新为您喜欢的任何值,但不要让它们空白:

 1[environment second]
 2[label ~/EasyRSA-v3.0.6/vars]
 3. . .
 4
 5set_var EASYRSA_REQ_COUNTRY    "US"
 6set_var EASYRSA_REQ_PROVINCE   "NewYork"
 7set_var EASYRSA_REQ_CITY       "New York City"
 8set_var EASYRSA_REQ_ORG        "DigitalOcean"
 9set_var EASYRSA_REQ_EMAIL      "[email protected]"
10set_var EASYRSA_REQ_OU         "Community"
11
12. . .

完成后,保存并关闭文件。

在EasyRSA目录中有一个名为easyrsa的脚本,该脚本被称为执行与构建和管理CA相关的各种任务,使用init-pki选项运行此脚本来启动CA服务器上的公钥基础设施:

1[environment second]
2./easyrsa init-pki
1[secondary_label Output]
2[environment second]
3. . .
4init-pki complete; you may now create a CA or requests.
5Your newly created PKI dir is: /home/sammy/EasyRSA-v3.0.6/pki

在此之后,再次调用easyrsa脚本,然后使用build-ca选项。这将构建CA并创建两个重要的文件 - ca.crtca.key - 构成SSL证书的公共和私人方面面。

*「ca.crt」是CA的公共证书文件,在OpenVPN的背景下,服务器和客户端使用它来告知对方,他们是同一个信任的网页的一部分,而不是执行中间人攻击的人。因此,您的服务器和所有客户端都需要ca.crt文件的副本。 *「ca.key」是CA机器用于签署服务器和客户端的密钥和证书的私钥。如果攻击者获得了访问您的CA和反过来,您的ca.key文件,他们将能够签署证书请求并获得访问您的VPN,阻碍其安全性。这就是为什么您的ca.key文件只应该在您的CA机器上,理想情况下,您的CA机器不应该在签署证书请求时处于离线状态。

如果您不希望每次与 CA 交互时都被要求使用密码,则可以使用nopass选项运行build-ca命令,如下:

1[environment second]
2./easyrsa build-ca nopass

在输出中,您将被要求确认您的CA的 common name:

1[environment second]
2[secondary_label Output]
3. . .
4Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

通用名称是指该机器在证书权限的背景下使用的名称. 您可以输入 CA 的通用名称的任何字符串,但为了方便,请按ENTER来接受默认名称。

有了这一点,您的CA已经做好了准备,并准备开始签署证书请求。

步骤 3 – 创建服务器证书、密钥和加密文件

现在你已经准备好了CA,你可以从你的服务器生成一个私钥和证书请求,然后将请求转移到你的CA签署,创建所需的证书。

首先,导航到您的 **OpenVPN 服务器上的 EasyRSA 目录:

1cd EasyRSA-v3.0.6/

从那里,使用init-pki选项运行easyrsa脚本.虽然您已经在CA机上运行了这个命令,但必须在这里运行,因为您的服务器和CA将有不同的PKI目录:

1./easyrsa init-pki

然后再拨打easyrsa脚本,这一次是gen-req选项,然后是机器的常用名称。 再次,这可能是你喜欢的任何东西,但可以有助于使它具有描述性。 在本教程中,OpenVPN服务器的常用名称将仅是服务器。 请确保包括nopass选项。

<$>[注意] 注意:如果您在这里选择了服务器以外的名称,您将不得不调整下面的一些说明。例如,当您将生成的文件复制到/etc/openvpn目录时,您将不得不更换正确的名称。

1./easyrsa gen-req server nopass

这将为服务器创建一个私钥和一个名为server.req的证书请求文件。

1sudo cp ~/EasyRSA-v3.0.6/pki/private/server.key /etc/openvpn/

使用安全的方法(如下面的示例中所示的 SCP),将 server.req 文件传输到您的 CA 机器:

1scp ~/EasyRSA-v3.0.6/pki/reqs/server.req sammy@your_CA_ip:/tmp

接下来,在您的 CA 机器上,导航到 EasyRSA 目录:

1[environment second]
2cd EasyRSA-v3.0.6/

再次使用easyrsa脚本,导入server.req文件,按照其常用的名称的文件路径:

1[environment second]
2./easyrsa import-req /tmp/server.req server

然后,通过运行easyrsa脚本来签署请求,然后使用sign-req选项,然后是 request type 和常用名称。

1[environment second]
2./easyrsa sign-req server server

在输出中,您将被要求验证请求来自可信来源. 输入,然后按输入,以确认此点:

 1[environment second]
 2You are about to sign the following certificate.
 3Please check over the details shown below for accuracy. Note that this request
 4has not been cryptographically verified. Please be sure it came from a trusted
 5source or that you have verified the request checksum with the sender.
 6
 7Request subject, to be signed as a server certificate for 1080 days:
 8
 9subject=
10    commonName                = server
11
12Type the word 'yes' to continue, or any other input to abort.
13  Confirm request details: yes

如果您加密了CA密钥,您将在此时被要求提供您的密码。

接下来,使用安全方法将签署的证书转移回您的VPN服务器:

1[environment second]
2scp pki/issued/server.crt sammy@your_server_ip:/tmp

在退出您的 CA 机器之前,还可以将 ca.crt 文件传输到您的服务器:

1[environment second]
2scp pki/ca.crt sammy@your_server_ip:/tmp

接下来,重新登录您的OpenVPN服务器,并将server.crtca.crt文件复制到您的/etc/openvpn/目录:

1sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/

然后导航到您的 EasyRSA 目录:

1cd EasyRSA-v3.0.6/

从那里,通过键入创建一个强大的Diffie-Hellman密钥,以便在密钥交换过程中使用:

1./easyrsa gen-dh

一旦完成,可以生成 HMAC 签名,以增强服务器的 TLS 完整性验证功能:

1sudo openvpn --genkey --secret ta.key

当命令完成时,将两个新文件复制到您的 /etc/openvpn/ 目录:

1sudo cp ~/EasyRSA-v3.0.6/ta.key /etc/openvpn/
2sudo cp ~/EasyRSA-v3.0.6/pki/dh.pem /etc/openvpn/

有了它,您的服务器所需的所有证书和密钥文件都已经生成,您已经准备好创建相应的证书和密钥,您的客户端机器将使用它们来访问您的OpenVPN服务器。

步骤 4 – 生成客户证书和密钥对

虽然您可以在客户端机器上生成私钥和证书请求,然后将其发送到 CA 进行签名,但本指南概述了在服务器上生成证书请求的过程。 这是因为我们可以创建一个脚本,该脚本将自动生成客户端配置文件,其中包含所有所需的密钥和证书。

我们将为本指南生成单个客户端密钥和证书对. 如果您有多个客户端,您可以对每个客户端重复此过程. 请注意,但是,您需要为每个客户端传递一个独特的名称值。

通过在您的主目录中创建一个目录结构来开始存储客户端证书和关键文件:

1mkdir -p ~/client-configs/keys

由于您将将客户的证书 / 密钥对和配置文件存储在此目录中,您现在应该作为安全措施锁定其权限:

1chmod -R 700 ~/client-configs

接下来,返回 EasyRSA 目录并运行easyrsa脚本,使用gen-reqnopass选项,以及客户端的常用名称:

1cd ~/EasyRSA-v3.0.6/
2./easyrsa gen-req client1 nopass

然后,将「client1.key」文件复制到您之前创建的 /client-configs/keys/ 目录:

1cp pki/private/client1.key ~/client-configs/keys/

接下来,使用安全方法将client1.req文件传输到您的 CA 机器:

1scp pki/reqs/client1.req sammy@your_CA_ip:/tmp

登录您的 CA 机器,导航到 EasyRSA 目录,并导入证书请求:

1[environment second]
2ssh sammy@your_CA_ip
3cd EasyRSA-v3.0.6/
4./easyrsa import-req /tmp/client1.req client1

然后像您在上一步中对服务器一样签署请求,但这次,请确保指定客户端请求类型:

1[environment second]
2./easyrsa sign-req client client1

在提示中,输入来确认您打算签署证书请求,并且它来自可信来源:

1[environment second]
2[secondary_label Output]
3Type the word 'yes' to continue, or any other input to abort.
4  Confirm request details: yes

再次,如果您加密了CA密钥,您将被要求在这里提供您的密码。

这将创建一个名为client1.crt的客户端证书文件。

1[environment second]
2scp pki/issued/client1.crt sammy@your_server_ip:/tmp

SSH 回到您的 OpenVPN 服务器,并将客户端证书复制到 /client-configs/keys/ 目录:

1cp /tmp/client1.crt ~/client-configs/keys/

接下来,将 ca.crtta.key 文件复制到 /client-configs/keys/ 目录中:

1sudo cp ~/EasyRSA-v3.0.6/ta.key ~/client-configs/keys/
2sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

因此,您的服务器和客户端的证书和密钥都被生成并存储在您的服务器上的相应目录中。 仍有几项需要执行的操作,但这些操作将在稍后的步骤中完成。

步骤 5 – 配置 OpenVPN 服务

现在客户端和服务器的证书和密钥已经生成,您可以开始配置OpenVPN服务以使用这些凭证。

首先,将样本 OpenVPN 配置文件复制到配置目录,然后提取,以便将其作为您的安装的基础:

1sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
2sudo gzip -d /etc/openvpn/server.conf.gz

在您喜爱的文本编辑器中打开服务器配置文件:

1sudo nano /etc/openvpn/server.conf

查找tls-auth指令的HMAC部分,此行应该已经没有评论,但如果没有,则删除**;**以不评论它。

1[label /etc/openvpn/server.conf]
2tls-auth ta.key 0 # This file is secret

接下来,通过搜索评论的数字线来查找加密加密的部分。AES-256-CBC加密器提供了良好的加密水平,并且得到良好的支持。

1[label /etc/openvpn/server.conf]
2cipher AES-256-CBC

下面,添加一个auth指令来选择HMAC消息消化算法. 为此,SHA256是一个很好的选择:

1[label /etc/openvpn/server.conf]
2auth SHA256

接下来,找一个包含指令的行,定义了Diffie-Hellman参数. 由于最近对EasyRSA进行了一些更改,Diffie-Hellman密钥的文件名称可能与示例服务器配置文件中列出的不同。

1[label /etc/openvpn/server.conf]
2dh dh.pem

最后,找到用户设置,并在每个行开始时删除**;**,以免评论这些行:

1[label /etc/openvpn/server.conf]
2user nobody
3group nogroup

到目前为止,你对样本 server.conf 文件所做的更改是必要的,以便 OpenVPN 能够运作。

(可选)推动 DNS 更改,通过 VPN 重定向所有流量

上面的设置将创建两台机器之间的VPN连接,但不会强迫任何连接使用隧道. 如果您希望使用VPN来路由您的所有流量,您可能希望将DNS设置推到客户端计算机。

在「server.conf」文件中,您必须更改若干指令,以便启用此功能. 查找「重定向网关」部分,并从「重定向网关」行开头删除半字母「;」以免发表评论:

1[label /etc/openvpn/server.conf]
2push "redirect-gateway def1 bypass-dhcp"

就在此下方,找到dhcp-option部分. 再次,从两行前面删除**;**,以免评论它们:

1[label /etc/openvpn/server.conf]
2push "dhcp-option DNS 208.67.222.222"
3push "dhcp-option DNS 208.67.220.220"

这将帮助客户重新配置他们的DNS设置,以便使用VPN隧道作为默认网关。

(可选) 调整端口和协议

默认情况下,OpenVPN服务器使用端口1194和UDP协议来接受客户端连接. 如果您需要使用不同的端口,因为客户端可能存在的限制性网络环境,您可以更改端口选项。

1[label /etc/openvpn/server.conf]
2# Optional!
3port 443

通常,该协议也被限制在该端口上,如果是这样,则从 UDP 更改proto到 TCP:

1[label /etc/openvpn/server.conf]
2# Optional!
3proto tcp

如果您将协议转换为 TCP,则需要将明确退出通知指令的值从1更改为0,因为此指令仅被 UDP 使用。

1[label /etc/openvpn/server.conf]
2# Optional!
3explicit-exit-notify 0

如果您不需要使用不同的端口和协议,最好将这两个设置作为默认设置。

(可选)指向非默认凭证

如果您在步骤 3 中的 ./easyrsa gen-req 命令中选择了不同的名称,请修改您看到的 certkey 行,以指向相应的 .crt.key 文件。

1[label /etc/openvpn/server.conf]
2cert server.crt
3key server.key

完成后,保存并关闭文件。

经过审查并对您的服务器OpenVPN配置所需的任何更改后,您可以开始对服务器的网络进行一些更改。

步骤 6 – 调整服务器网络配置

有服务器网络配置的一些方面需要调整,以便OpenVPN能够正确地通过VPN路由流量. 其中第一个是 IP转发,用于确定IP流量应该路由的地方的方法. 这对于服务器提供的VPN功能至关重要。

通过修改 /etc/sysctl.conf 文件来调整服务器的默认 IP 转发设置:

1sudo nano /etc/sysctl.conf

在内部,寻找设置net.ipv4.ip_forward的评论行,从行开始删除**#**字符,以免评论此设置:

1[label /etc/sysctl.conf]
2net.ipv4.ip_forward=1

保存并关闭文件,当你完成。

要读取文件并调整当前会话的值,键入:

1sudo sysctl -p
1[secondary_label Output]
2net.ipv4.ip_forward = 1

如果你遵循前提中列出的 Debian 10 初始服务器设置指南,你应该有一个 UFW 防火墙,无论你是否使用防火墙来阻止不必要的流量(你几乎总是应该这样做),对于这个指南,你需要一个防火墙来操纵部分进入服务器的流量。

在打开防火墙配置文件以添加隐藏规则之前,您必须先找到您的机器的公共网络接口。

1ip route | grep default

您的公共界面是该命令输出中找到的字符串,该字符串跟随dev。 例如,此结果显示了名为eth0的界面,该界面在下面突出:

1[secondary_label Output]
2default via 203.0.113.1 dev eth0 proto static

当您有与默认路径相关联的界面时,请打开 /etc/ufw/before.rules 文件以添加相关配置:

1sudo nano /etc/ufw/before.rules

UFW 规则通常是使用ufw命令添加的。然而,在before.rules文件中列出的规则在通常的 UFW 规则被加载之前被读取并放置在位置上。 向文件的顶部添加下面的突出的行。 这将在nat表中设置POSTROUTING链条的默认策略,并掩盖来自 VPN 的任何流量。 请记住在下面的-A POSTROUTING行中用您在上面的命令中发现的界面替换eth0:

 1[label /etc/ufw/before.rules]
 2#
 3# rules.before
 4#
 5# Rules that should be run before the ufw command line added rules. Custom
 6# rules should be added to one of these chains:
 7#   ufw-before-input
 8#   ufw-before-output
 9#   ufw-before-forward
10#
11
12# START OPENVPN RULES
13# NAT table rules
14*nat
15:POSTROUTING ACCEPT [0:0] 
16# Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)
17-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
18COMMIT
19# END OPENVPN RULES
20
21# Don't delete these required lines, otherwise there will be errors
22*filter
23. . .

保存并关闭文件,当你完成。

接下来,您需要告诉 UFW 默认允许转发的数据包,然后打开 /etc/default/ufw 文件:

1sudo nano /etc/default/ufw

在内部,找到DEFAULT_FORWARD_POLICY指令,并将值从DROP更改为ACCEPT:

1[label /etc/default/ufw]
2DEFAULT_FORWARD_POLICY="ACCEPT"

保存并关闭文件,当你完成。

接下来,调整防火墙本身,以允许流量到OpenVPN. 如果你没有在 /etc/openvpn/server.conf文件中更改端口和协议,你需要打开UDP流量到端口 1194

此外,如果您在完成前提教程时没有添加 SSH 端口,请在这里添加它:

1sudo ufw allow 1194/udp
2sudo ufw allow OpenSSH

添加这些规则后,禁用并重新启用 UFW 来重新启动并从您所修改的所有文件中加载更改:

1sudo ufw disable
2sudo ufw enable

您的服务器现在已配置为正确处理OpenVPN流量。

步骤 7 – 启动并启用 OpenVPN 服务

您终于准备好在您的服务器上启动 OpenVPN 服务,这是使用 systemd 实用程序 systemctl 完成的。

启动 OpenVPN 服务器,将您的配置文件名指定为系统d 单元文件名之后的实例变量。 您的服务器的配置文件名为 /etc/openvpn/server.conf,所以在调用它时,将 @server` 添加到您的单元文件的末端:

1sudo systemctl start openvpn@server

通过键入双重检查服务是否成功启动:

1sudo systemctl status openvpn@server

如果一切顺利,你的输出将看起来像这样:

 1[secondary_label Output]
 2 openvpn@server.service - OpenVPN connection to server
 3   Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
 4   Active: active (running) since Wed 2019-07-17 03:39:24 UTC; 29s ago
 5     Docs: man:openvpn(8)
 6           https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
 7           https://community.openvpn.net/openvpn/wiki/HOWTO
 8 Main PID: 3371 (openvpn)
 9   Status: "Initialization Sequence Completed"
10    Tasks: 1 (limit: 3587)
11   Memory: 1.2M
12   CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
13           └─3371 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.conf --writepid /run/openvpn/

您也可以通过键入来检查OpenVPN的tun0接口是否可用:

1ip addr show tun0

这将输出一个配置的界面:

1[secondary_label Output]
23: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
3    link/none 
4    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
5       valid_lft forever preferred_lft forever
6    inet6 fe80::dd60:3a78:b0ca:1659/64 scope link stable-privacy 
7       valid_lft forever preferred_lft forever

启动服务后,让它在启动时自动启动:

1sudo systemctl enable openvpn@server

但是,在您开始使用它之前,您必须首先为客户端机器创建配置文件。本教程已经介绍了如何为客户端创建证书/钥匙对,在下一步我们将展示如何创建一个基础设施,可以轻松生成客户端配置文件。

步骤 8 – 创建客户端配置基础设施

创建 OpenVPN 客户端的配置文件可能有些涉及,因为每个客户端都必须有自己的配置,每个客户端都必须与服务器配置文件中描述的设置相匹配。而不是写一个只能在一个客户端上使用的单个配置文件,此步骤概述了构建一个客户端配置基础设施的过程,您可以使用它来生成配置文件。

开始创建一个新的目录,您将存储客户端配置文件在您之前创建的客户端配置目录中:

1mkdir -p ~/client-configs/files

接下来,将示例客户端配置文件复制到客户端配置目录中,用作您的基本配置:

1cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

在文本编辑器中打开此新文件:

1nano ~/client-configs/base.conf

在内部,找到远程指令,指向客户端您的OpenVPN服务器地址 - 您的OpenVPN服务器的公共IP地址. 如果您决定更改OpenVPN服务器正在收听的端口,您还需要更改1194到您选择的端口:

1[label ~/client-configs/base.conf]
2. . .
3# The hostname/IP and port of the server.
4# You can have multiple remote entries
5# to load balance between the servers.
6remote your_server_ip 1194
7. . .

请确保协议匹配您在服务器配置中使用的值:

1[label ~/client-configs/base.conf]
2proto udp

接下来,通过在每个行开始时删除**;**删除用户指令:

1[label ~/client-configs/base.conf]
2# Downgrade privileges after initialization (non-Windows only)
3user nobody
4group nogroup

查找设置ca,certkey的指令. 评论这些指令,因为您很快就会在文件本身中添加证件和密钥:

 1[label ~/client-configs/base.conf]
 2# SSL/TLS parms.
 3# See the server config file for more
 4# description. It's best to use
 5# a separate .crt/.key file pair
 6# for each client. A single ca
 7# file can be used for all clients.
 8#ca ca.crt
 9#cert client.crt
10#key client.key

同样,评论tls-auth指令,因为您将直接将ta.key添加到客户端配置文件中:

1[label ~/client-configs/base.conf]
2# If a tls-auth key is used on the server
3# then every client must also have the key.
4#tls-auth ta.key 1

镜像您在/etc/openvpn/server.conf文件中设置的cipherauth设置:

1[label ~/client-configs/base.conf]
2cipher AES-256-CBC
3auth SHA256

接下来,在文件中的某个地方添加钥匙方向指令. 您 必须将此设置为1以便VPN在客户端机器上正常运作:

1[label ~/client-configs/base.conf]
2key-direction 1

最后,添加几个 评论出来的行. 虽然你可以将这些指令包含在每个客户端配置文件中,但你只需要为 Linux 客户端启用这些指令,这些客户端配有 `/etc/openvpn/update-resolv-conf’ 文件。

1[label ~/client-configs/base.conf]
2# script-security 2
3# up /etc/openvpn/update-resolv-conf
4# down /etc/openvpn/update-resolv-conf

如果您的客户端运行的是 Linux,并且有一个 /etc/openvpn/update-resolv-conf 文件,在生成后,请从客户端配置文件中删除这些行。

保存并关闭文件,当你完成。

接下来,创建一个简单的脚本,将您的基础配置编译到相关的证书、密钥和加密文件,然后将生成的配置放置到 `~/client-configs/files’ 目录中。

1nano ~/client-configs/make_config.sh

在内部,添加以下内容,确保将sammy更改为您的服务器的非root用户帐户:

 1[label ~/client-configs/make_config.sh]
 2#!/bin/bash
 3
 4# First argument: Client identifier
 5
 6KEY_DIR=/home/sammy/client-configs/keys
 7OUTPUT_DIR=/home/sammy/client-configs/files
 8BASE_CONFIG=/home/sammy/client-configs/base.conf
 9
10cat ${BASE_CONFIG} \
11    <(echo -e '<ca>') \
12    ${KEY_DIR}/ca.crt \
13    <(echo -e '</ca>\n<cert>') \
14    ${KEY_DIR}/${1}.crt \
15    <(echo -e '</cert>\n<key>') \
16    ${KEY_DIR}/${1}.key \
17    <(echo -e '</key>\n<tls-auth>') \
18    ${KEY_DIR}/ta.key \
19    <(echo -e '</tls-auth>') \
20    > ${OUTPUT_DIR}/${1}.ovpn

保存并关闭文件,当你完成。

在继续之前,请确保通过键入标记此文件为可执行:

1chmod 700 ~/client-configs/make_config.sh

此脚本将创建您创建的 base.conf 文件的副本,收集您为客户端创建的所有证书和密钥文件,提取其内容,将其附加到基础配置文件的副本中,并将所有内容导出到新的客户端配置文件中。这意味着,而不是单独管理客户端的配置,证书和密钥文件,所有所需的信息都存储在一个地方。

请注意,每次你添加一个新客户端,你需要为它生成新的密钥和证书,然后你可以运行这个脚本并生成它的配置文件。

步骤 9 – 生成客户端配置

如果您跟随了指南,您在步骤 4 中分别创建了名为client1.crtclient1.key的客户端证书和密钥,您可以通过进入您的~/client-configs目录并运行您在前一步结束时创建的脚本来生成这些身份证件的配置文件:

1cd ~/client-configs
2sudo ./make_config.sh client1

这将创建一个名为client1.ovpn的文件在您的~/client-configs/files目录中:

1ls ~/client-configs/files
1[secondary_label Output]
2client1.ovpn

您需要将此文件传输到您打算作为客户端使用的设备,例如,这可能是您的本地计算机或移动设备。

虽然用于实现此转移的确切应用程序将取决于您的设备的操作系统和您的个人偏好,但一个可靠和安全的方法是使用SFTP(SSH文件传输协议)或SCP(安全副本)在后端。

以下是使用「client1.ovpn」示例的 SFTP 命令,您可以从本地计算机(macOS 或 Linux)运行。

1[environment local]
2sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/

以下是几个工具和教程,以安全地将文件从服务器传输到本地计算机:

步骤 10 – 安装客户端配置

本节涵盖了如何在 Windows、macOS、Linux、iOS 和 Android 上安装客户端 VPN 配置文件. 这些客户端指令并不相互依赖,因此请轻松跳过适用于您的设备的任何内容。

对于本教程,这意味着连接被命名为client1.ovpn,与您生成的第一个客户端文件一致。

窗口

  • 安装 *

請從 OpenVPN 的下載頁面下載 Windows 的 OpenVPN 客戶端應用程式。

<$>[注] 注: OpenVPN需要管理权限来安装。

安装 OpenVPN 后,将.ovpn 文件复制到:

1C:\Program Files\OpenVPN\config

当您启动OpenVPN时,它会自动看到您的个人资料并使其可用。

您必须每次使用 OpenVPN 作为管理员运行 OpenVPN,即使是由管理员帐户使用。 要做到这一点,不必右击并选择 ** 作为管理员运行** 每次使用 VPN,您必须从管理员帐户预设此功能。 这也意味着标准用户需要输入管理员的密码才能使用 OpenVPN。

要将 OpenVPN 应用程序设置为始终以管理员身份运行,请右键单击其快捷图标,然后转到 属性。在 兼容性选项卡的底部,点击按钮为 更改所有用户的设置

  • 连接 *

每次启动 OpenVPN GUI 时,Windows 都会询问您是否希望允许该程序对您的计算机进行更改. 点击 Yes. 启动 OpenVPN 客户端应用程序只会将 applet 放入系统盘,以便您可以根据需要连接和关闭 VPN;它实际上不会连接到 VPN。

一旦 OpenVPN 启动,请通过进入系统底盘的 applet 并右键单击 OpenVPN applet 图标来启动连接,这将打开背景菜单,在菜单顶部选择 client1(这是您的client1.ovpn配置文件),然后选择 Connect

在建立连接时,会打开状态窗口,显示日志输出,并在客户端连接后会显示消息。

以同样的方式脱离VPN:进入系统底盘应用程序,右键单击OpenVPN应用程序图标,选择客户端配置文件,然后单击 脱离

马克思

  • 安装 *

Tunnelblick是 macOS 的免费开源 OpenVPN 客户端,您可以从 Tunnelblick 下载页面下载最新的磁盘图像。

安装过程结束时,Tunnelblick 会问你是否有任何配置文件。 回答 我有配置文件,然后让Tunnelblick 完成。 打开 Finder 窗口并双击client1.ovpn

  • 连接 *

启动 Tunnelblick 通过在 Applications文件夹中双击 Tunnelblick 图标来启动 Tunnelblick。一旦启动 Tunnelblick,在屏幕右上方的菜单栏中会出现一个 Tunnelblick 图标来控制连接。

Linux 的

安装

如果您正在使用 Linux,您可以根据您的发行版使用各种工具,您的桌面环境或窗口管理器也可能包括连接实用程序。

然而,最通用的连接方式是仅仅使用OpenVPN软件。

在 Debian 上,您可以像在服务器上一样安装它,键入:

1[environment local]
2sudo apt update
3sudo apt install openvpn

在CentOS上,您可以启用EPEL存储库,然后通过键入来安装它:

1[environment local]
2sudo yum install epel-release
3sudo yum install openvpn

配置

查看您的分布是否包含 /etc/openvpn/update-resolv-conf 脚本:

1[environment local]
2ls /etc/openvpn
1[secondary_label Output]
2[environment local]
3update-resolv-conf

接下来,编辑您转移的 OpenVPN 客户端配置文件:

1[environment local]
2nano client1.ovpn

如果您能够找到一个update-resolv-conf文件,请删除您添加的三个行以调整 DNS 设置:

1[label client1.ovpn]
2[environment local]
3script-security 2
4up /etc/openvpn/update-resolv-conf
5down /etc/openvpn/update-resolv-conf

如果您正在使用 CentOS,请将指令从nogroup更改为nobody,以匹配分布的可用组:

1[label client1.ovpn]
2[environment local]
3group nobody

保存并关闭文件。

现在,您可以通过指向客户端配置文件的openvpn命令连接到VPN:

1[environment local]
2sudo openvpn --config client1.ovpn

这应该将您连接到您的VPN。

  • 安装 *

从 iTunes App Store 搜索并安装 OpenVPN Connect,官方的 iOS OpenVPN 客户端应用程序. 要将您的 iOS 客户端配置传输到设备上,请直接连接到计算机。

通过iTunes完成传输的过程在这里概述了。在计算机上打开iTunes,然后点击iPhone >apps。向下滚动到文件共享部分,然后点击OpenVPN应用程序。右侧的空白窗口OpenVPN文档用于共享文件。

iTunes showing the VPN profile ready to load on the iPhone

现在在 iPhone 上启动 OpenVPN 应用程序. 您将收到通知,新配置文件已准备好导入。

The OpenVPN iOS app showing new profile ready to import

  • 连接 *

OpenVPN现在已经准备好与新配置文件一起使用。通过将 Connect按钮滑动到 On位置来启动连接。

<$>[注] 注:设置中使用的VPN交换机无法连接到VPN. 如果您尝试,您将收到通知只使用OpenVPN应用程序进行连接。

The OpenVPN iOS app connected to the VPN

安卓

  • 安装 *

搜索并安装 Android OpenVPN Connect,是官方的Android OpenVPN客户端应用程序。

您可以通过 USB 将 Android 设备连接到您的计算机并复制文件来传输 .ovpn 配置文件. 或者,如果您有 SD 卡阅读器,您可以删除设备的 SD 卡,将该配置文件复制到其上,然后将该卡重新插入到 Android 设备中。

启动OpenVPN应用程序,然后点击菜单来导入配置文件。

The OpenVPN Android app profile import menu selection

然后导航到保存的配置文件的位置(屏幕截图使用 /sdcard/Download/)并选择文件。

The OpenVPN Android app selecting VPN profile to import

  • 连接 *

要连接,只需点击 连接 ** 按钮,您将被问及是否信任 OpenVPN 应用程序。 选择 OK 来启动连接。 要脱离 VPN,请返回 OpenVPN 应用程序并选择 ** 脱离

The OpenVPN Android app ready to connect to the VPN

步骤 11 — 测试您的VPN连接(可选)

<$>[注] **注:**此方法来测试您的VPN连接只会有效,如果您在步骤 5中选择通过VPN路由所有流量。

一旦一切都安装完毕,一个简单的检查就证实一切正常工作了. 没有启用VPN连接,请打开浏览器,然后转到 DNSLeakTest

该网站将返回由您的互联网服务提供商分配的IP地址,并显示给世界其他地方. 要通过相同的网站检查您的DNS设置,请单击 扩展测试,它将告诉您正在使用的DNS服务器。

现在将OpenVPN客户端连接到Droplet的VPN,并更新浏览器。 现在应该出现一个完全不同的IP地址(你的VPN服务器的IP地址),这就是你向世界展示的方式。 再次,DNSLeakTest(https://www.dnsleaktest.com) Extended Test将检查你的DNS设置,并确认你现在正在使用VPN推出的DNS解析器。

步骤 12 – 撤销客户证书

有时,您可能需要撤销客户端证书,以防止进一步访问 OpenVPN 服务器。

要做到这一点,请导航到您的 CA 机器上的 EasyRSA 目录:

1[environment second]
2cd EasyRSA-v3.0.6/

接下来,运行easyrsa脚本以撤销选项,然后是您想要撤销的客户端名称:

1[environment second]
2./easyrsa revoke client2

这将要求您通过输入来确认撤销:

1[environment second]
2[secondary_label Output]
3Please confirm you wish to revoke the certificate with the following subject:
4
5subject=
6    commonName                = client2
7
8Type the word 'yes' to continue, or any other input to abort.
9  Continue with revocation: yes

确认此操作后,CA 将完全撤销客户端的证书,但是您的 OpenVPN 服务器目前没有办法检查客户端的证书是否已被撤销,客户端仍然可以访问 VPN。

1[environment second]
2./easyrsa gen-crl

这将生成名为crl.pem的文件,安全地将此文件传输到您的OpenVPN服务器:

1[environment second]
2scp ~/EasyRSA-v3.0.6/pki/crl.pem sammy@your_server_ip:/tmp

在您的 OpenVPN 服务器上,将此文件复制到您的 /etc/openvpn/ 目录:

1sudo cp /tmp/crl.pem /etc/openvpn

接下来,打开 OpenVPN 服务器配置文件:

1sudo nano /etc/openvpn/server.conf

在文件底部,添加crl-verify选项,该选项将指示OpenVPN服务器检查我们每次尝试连接时创建的证书撤销列表:

1[label /etc/openvpn/server.conf]
2crl-verify crl.pem

保存并关闭文件。

最后,重新启动 OpenVPN 来执行证书撤销:

1sudo systemctl restart openvpn@server

客户端不再能够使用旧身份证成功连接到服务器。

若要取消额外的客户,请遵循此过程:

  1. ./easyrsa revoke client_name 命令 取消证书 2. 生成新的 CRL
  2. 将新的 crl.pem 文件传输到您的 OpenVPN 服务器,并将其复制到 /etc/openvpn 目录,以重写旧列表。
  3. 重新启动 OpenVPN 服务。

您可以使用此过程撤销您之前为您的服务器发行的任何证书。

结论

您现在正在安全地穿越互联网,保护您的身份,位置和流量免受黑客和审查者的影响。

要配置更多的客户端,您只需按照步骤 49-11对每个额外的设备进行配置。

Published At
Categories with 技术
comments powered by Disqus