要完成本教程,你需要:

  • 两台 Debian 11 服务器:一台用于托管 OpenVPN 服务,一台用作你的证书颁发机构 (CA)。
  • 在两台服务器上都具有权限的非 root 用户sudo
  • Easy-RSA 安装在两台服务器上。这是你用来管理 VPN 证书的实用程序。

虽然技术上可以从 OpenVPN 服务器或本地计算机运行 CA,但将 CA单独服务器上会更安全。不要把 CA 的私钥保留在面向公众的服务器上,因为如果攻击者获得私钥的访问权限,他们可以使用它来签署新证书,从而进一步访问你的 VPN,产生额外的费用。根据OpenVPN 官方文档,您应该将 CA 放置在专用于导入和签署证书请求的独立服务器上。

最后,请注意,如果你在配置这些服务器时禁用密码身份验证,则在本指南后半部分,两台服务器之间传输文件时可能会遇到困难。要解决此问题,你可以在每台服务器上重新启用密码身份验证。或者,你可以为每个服务器生成一个 SSH 密钥对,然后将 OpenVPN 服务器的公共 SSH 密钥添加到 CA 计算机的authorized_keys文件中,反之亦然。

满足这些先决条件后,您可以继续执行本教程的步骤 1。

第 1 步 — 安装 OpenVPN

首先,注册DigitalOcean账号,创建Debian服务器。

更新 V​​PN 服务器的软件包索引并安装 OpenVPN。OpenVPN 在 Debian 的默认存储库中可用,因此您可以使用以下命令apt进行安装:

sudo apt update 
sudo apt install openvpn

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

OpenVPN 服务器上,把/easy-rsa更改为非 root 用户主目录中的目录,并使用服务器的默认名称选项运行easyrsa脚本gen-req。在本教程中,OpenVPN 服务器的通用名称只是“sever器”。请务必选中nopass选项。如果没有选,请求文件会受到密码保护,导致以后出现权限问题:

注意:如果您在此处选择“sever”以外的名称,则必须调整下面的一些说明。例如,将生成的文件复制到/etc/openvpn目录时,你必须替换正确的名称。您还必须/etc/openvpn/server.conf稍后修改该文件以指向正确的.crt文件.key

cd ~/easyrsa 
./easyrsa gen-req server nopass

该脚本将提示你输入要在证书签名请求 (CSR) 中显示的公用名。默认情况下,它将显示你传入的任何名称./easyrsa gen-req(例如,server)。键入ENTER以接受默认名称,或输入其他名称。

这将为服务器创建一个私钥和一个名为 的证书请求文件server.req。将服务器密钥复制到/etc/openvpn/目录:

sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/

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

scp ~/easy-rsa/pki/reqs/server.req sammy@your_CA_ip:/tmp

接下来,在您的CA 服务器上,导航到该~/easy-rsa目录:

cd ~/easy-rsa

使用easyrsa脚本导入server.req文件,遵循带有您在创建 CSR 时输入的通用名称的文件路径:

./easyrsa import-req /tmp/server.req server

easyrsa然后通过使用选项运行来签署请求sign-req,后跟请求类型和公用名称。请求类型可以是clientserver,因此对于OpenVPN服务器的证书请求,请务必使用server请求类型:

./easyrsa sign-req server server

在输出结果中,系统会要求您验证请求是否来自可信来源。键入yes并按ENTER以确认:

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 825 days:

subject=
    commonName                = server


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

如果你在遵循先决条件中列出的教程时加密了 CA 密钥,此时系统会提示您输入密码。

接下来,使用安全方法将签名证书传输回您的 VPN 服务器:

scp pki/issued/server.crt sammy@your_server_ip:/tmp

将文件传输ca.crt到你的 VPN 服务器:

scp pki/ca.crt sammy@your_server_ip:/tmp

你的 OpenVPN 服务器需要ca.crt知道它可以信任签名的实体server.crt

接下来,在你的OpenVPN 服务器上,将server.crtca.crt文件复制到您的/etc/openvpn/目录中:

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

然后导航到你的~/easy-rsa目录:

cd ~/easy-rsa

通过键入以下内容创建一个 Diffie-Hellman 密钥,以便在密钥交换期间使用:

./easyrsa gen-dh

这可能需要几分钟才能完成。一旦完成,生成 HMAC 签名以增强服务器的 TLS 完整性验证能力:

sudo openvpn --genkey secret ta.key

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

sudo cp ~/easy-rsa/ta.key /etc/openvpn/ 
sudo cp ~/easy-rsa/pki/dh.pem /etc/openvpn/

这样,你的服务器所需的所有证书和密钥文件都已生成。你已准备好创建客户端服务器将用来访问 OpenVPN 服务器的相应证书和密钥。

第 3 步 — 生成客户端证书和密钥对

虽然你可以在客户端上生成私钥和证书请求,然后将其发送到 CA 进行签名,但本指南概述了在 VPN 服务器上生成证书请求的过程。这样做的好处是,我们可以创建一个服务器脚本,该脚本将自动生成客户端配置文件,其中在单个文件中包含所有必需的密钥、证书和配置选项。通常,主客户端配置文件会指定单独的密钥和证书文件的文件名,然后你必须将多个文件分发到每个客户端。但最好将密钥和证书的完整内容包含在主配置文件本身中,这样你就可以简化加入 VPN 的过程。您将在步骤 8 中生成该单个客户端配置文件。

在此步骤中,你首先会生成客户端密钥和证书对。如果你有多个客户端,你可以为每个客户端重复此过程。但请注意,你需要将唯一的名称值传递给每个客户端的脚本。在本教程中,第一个证书/密钥对称为client1

在你的VPN 服务器上,首先在主目录中创建一个目录结构来存储客户端证书和密钥文件:

mkdir -p ~/client-configs/keys

由于你将在此目录中存储客户端的证书/密钥对和配置文件,因此安全起见,你现在应该锁定其权限:

chmod -R 700 ~/client-configs

接下来,导航回该目录并使用和选项以及客户端的通用名称~/easy-rsa运行脚本:easyrsagen-reqnopass

cd ~/easy-rsa 
./easyrsa gen-req client1 nopass

ENTER确认常用名称。然后,将client1.key文件复制到/client-configs/keys/您之前创建的目录中:

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

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

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

在你的CA 计算机上,导航到该~/easy-rsa目录并导入证书请求:

cd ~/easy-rsa 
./easyrsa import-req /tmp/client1.req client1

然后像上一步中对服务器所做的那样签署请求。不过,这一次请务必指定client请求类型:

./easyrsa sign-req client client1

在提示符下,输入yes以确认您打算签署证书请求并且它来自受信任的来源:

Output
Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

同样,如果您加密了 CA 密钥,系统将提示您在此处输入密码。

这将创建一个名为 的客户端证书文件client1.crt。将此文件传输回服务器:

scp pki/issued/client1.crt sammy@your_server_ip:/tmp

在你的OpenVPN 服务器上,将客户端证书复制到以下/client-configs/keys/目录:

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

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

sudo cp ~/easy-rsa/ta.key ~/client-configs/keys/ 
sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

这样,你的服务器和客户端的证书和密钥就已全部生成,并存储在服务器上的相应目录中。接下来仍然需要对这些文件执行一些操作,但这些操作将在步骤 8 中进行。现在,您可以继续在服务器上配置 OpenVPN。

第 4 步 — 配置 OpenVPN 服务

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

首先将示例 OpenVPN 配置文件复制到配置目录中以用作设置的基础:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/

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

sudo nano /etc/openvpn/server.conf


通过查找tls-auth指令找到 HMAC 部分。该行应该已经取消注释,但如果没有,则删除“ ; ” ”来取消注释。

/etc/openvpn/server.conf

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

接下来,通过查找注释掉的cipher行来找到有关加密密码的部分。该AES-256-CBC密码提供了良好的加密级别并且得到了很好的支持。同样,这一行应该已经取消注释,但如果不是,则只需删除“ ; ”。” 前面:

/etc/openvpn/server.conf

cipher AES-256-CBC

在此下方,添加一条auth指令来选择 HMAC 消息摘要算法。为此,SHA256是一个不错的选择:

/etc/openvpn/server.conf

auth SHA256

接下来,找到包含dh定义 Diffie-Hellman 参数的指令的行。由于最近对 Easy-RSA 进行了一些更改,Diffie-Hellman 密钥的文件名可能与示例服务器配置文件中列出的文件名不同。如有必要,请删除此处列出的文件名,2048使其与您在上一步中生成的密钥保持一致:

/etc/openvpn/server.conf

dh dh.pem

最后,找到usergroup设置并删除“ ; ” ” 在每行的开头取消注释这些行:

/etc/openvpn/server.conf

user nobody
group nogroup

server.conf到目前为止,你对示例文件所做的更改是 OpenVPN 正常运行所必需的。下面概述的更改是可选的,尽管许多常见用例也需要它们。

推送 DNS 更改以重定向通过 VPN 的所有流量(可选)

上述设置将在两台计算机之间创建 VPN 连接,但不会强制任何连接使用通道。如果你希望使用 VPN 路由所有流量,您可能需要将 DNS 设置推送到客户端计算机。

您必须更改文件中的一些指令server.conf才能启用此功能。找到该redirect-gateway部分并删除分号“ ; ” 从该行的开头redirect-gateway取消注释:

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

在此下方,找到该dhcp-option部分。再次删除“ ; ” ” 从两行前面取消注释:

/etc/openvpn/server.conf

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

这将帮助客户端重新配置其 DNS 设置以使用 VPN 通道作为默认网关。

调整端口和协议(可选)

默认情况下,OpenVPN 服务器使用端口1194和 UDP 协议接受客户端连接。如果由于客户端所处的网络环境受到限制而需要使用不同的端口,则可以更改该port选项。如果您不在 OpenVPN 服务器上托管 Web 内容,端口443是一个流行的选择,因为它通常可以通过防火墙规则。

/etc/openvpn/server.conf

# Optional!
port 443

通常,协议也仅限于该端口。如果是这样,请proto从 UDP 更改为 TCP:

/etc/openvpn/server.conf

# Optional!
proto tcp

如果您确实将协议切换到 TCP,则需要将该explicit-exit-notify指令的值从更改10,因为该指令仅由 UDP 使用。如果在使用 TCP 时不这样做,将会在启动 OpenVPN 服务时导致错误:

/etc/openvpn/server.conf

# Optional!
explicit-exit-notify 0

如果你不需要使用不同的端口和协议,最好将这三个设置保留为默认值。

指向非默认凭证(可选)

./easyrsa gen-req如果你在步骤 2 中的服务器证书命令中选择了不同的名称,请修改您看到的certkey行以指向相应的.crt.key文件。如果您使用默认名称“server”,则已正确设置:

/etc/openvpn/server.conf

cert server.crt
key server.key

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

在完成并根据您的特定用例对服务器的 OpenVPN 配置进行任何更改后,您可以开始对服务器的网络进行一些更改。

步骤 5 — 调整服务器网络配置

服务器网络配置的某些方面需要进行调整,以便 OpenVPN 可以通过 VPN 正确路由流量。第一个是 IP 转发,这是一种确定 IP 流量应路由到何处的方法。

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

sudo nano /etc/sysctl.conf

在里面,查找设置 的注释行net.ipv4.ip_forward。删除行开头的“ # ”字符以取消注释此设置:

/etc/sysctl.conf

net.ipv4.ip_forward=1

完成后保存并关闭文件。

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

sudo sysctl -p
Output
net.ipv4.ip_forward = 1

如果你遵循先决条件中列出的Debian 11 初始服务器设置指南,则您应该已安装 UFW 防火墙。无论您是否使用防火墙来阻止不需要的流量,对于本指南,您都需要防火墙来控制一些进入服务器的流量。必须修改某些防火墙规则才能启用伪装,这是一种 iptables 概念,可提供动态网络地址转换 (NAT) 以正确路由客户端连接。

在打开防火墙配置文件添加伪装规则之前,您必须首先找到您机器的公网接口。为此,请键入:

ip route | grep default

你的公共接口是命令输出中“dev”后面的字符串。例如,下面的输出显示了一个名为 的接口eth0,该接口已突出显示:

Output
default via 203.0.113.1 dev eth0 proto static

当你拥有与默认路由关联的接口时,打开文件/etc/ufw/before.rules以添加相关配置:

sudo nano /etc/ufw/before.rules

UFW 规则通常使用该ufw命令添加。不过,在加载常规 UFW 规则之前,会读取文件中列出的规则before.rules并将其落实到位。在文件顶部,添加下面突出显示的行。POSTROUTING这将为表中的链设置默认策略nat并伪装来自 VPN 的任何流量。请记住将下面的行替换eth0-A POSTROUTING您在上面命令中找到的接口:

/etc/ufw/before.rules

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0] 
# Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter
. . .

完成后保存并关闭文件。

接下来,您需要告诉 UFW 默认也允许转发数据包。为此,请打开/etc/default/ufw文件:

sudo nano /etc/default/ufw

在里面,找到DEFAULT_FORWARD_POLICY指令并将值从 更改DROPACCEPT

/etc/default/ufw

DEFAULT_FORWARD_POLICY="ACCEPT"

完成后保存并关闭文件。

接下来,调整防火墙本身以允许流量到达 OpenVPN。如果你没有更改文件中的端口和协议/etc/openvpn/server.conf,则需要打开到端口 的 UDP 流量1194。如果你修改了端口和/或协议,请替换你在此处选择的值。

另外,如果你在完成先决条件教程时没有添加 SSH 端口,也请在此处添加:

sudo ufw allow 1194/udp 
sudo ufw allow OpenSSH

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

sudo ufw disable 
sudo ufw enable

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

第 6 步 — 启动并启用 OpenVPN 服务

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

sudo systemctl start openvpn@server

/etc/openvpn/server.conf这将使用配置文件启动 openvpn 服务。openvpn@server2例如,如果您已指定,systemd 将/etc/openvpn/server2.conf在启动服务时使用该文件名。

通过键入以下内容来仔细检查服务是否已成功启动:

sudo systemctl status openvpn@server

如果一切顺利,你的输出将如下所示:

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

你还可以通过键入以下内容来检查 OpenVPNtun0接口是否可用:

ip addr show tun0

这将输出一个配置的接口:

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

启动该服务后,启用它以便它在启动时自动启动:

sudo systemctl enable openvpn@server

你的 OpenVPN 服务现已启动并运行。不过,在开始使用它之前,你必须首先为客户端计算机创建一个配置文件。本教程已经介绍了如何为客户端创建证书/密钥对,下一步将演示如何创建将生成客户端配置文件的基础设施。

第 7 步 — 创建客户端配置基础设施

为 OpenVPN 客户端创建配置文件可能会有些复杂,因为每个客户端都必须有自己的配置,并且每个客户端都必须与服务器配置文件中概述的设置保持一致。此步骤概述了构建可用于动态生成配置文件的客户端配置基础结构的过程,而不是编写只能在一个客户端上使用的单个配置文件。你将首先创建一个“基本”配置文件,然后运行一个脚本,该脚本将使用基本配置文件以及客户端的唯一证书和密钥生成唯一的客户端配置文件。

首先在OpenVPN 服务器上创建一个新目录,你将在client-configs之前创建的目录中存储客户端配置文件:

mkdir -p ~/client-configs/files

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

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

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

nano ~/client-configs/base.conf

在里面找到remote指令。这会将客户端指向您的 OpenVPN 服务器地址 – OpenVPN 服务器的公共 IP 地址。如果你决定更改 OpenVPN 服务器监听的端口,你还需要把1194更改为你选择的端口:

~/client-configs/base.conf

. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote your_server_ip 1194
. . .

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

~/client-configs/base.conf

proto udp

接下来,通过删除“ ;”来取消注释user和指令” 在每行的开头:group

~/client-configs/base.conf

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

ca查找设置、cert和文件的指令key。注释掉这些指令,因为您很快就会将证书和密钥文件的完整内容附加到基本文件中:

~/client-configs/base.conf

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key

同样,注释掉该tls-auth指令,因为你需要把ta.key直接添加到客户端配置文件中:

~/client-configs/base.conf

# If a tls-auth key is used on the server
# then every client must also have the key.
#tls-auth ta.key 1

镜像你在文件中设置的cipher和设置:auth/etc/openvpn/server.conf

~/client-configs/base.conf

cipher AES-256-CBC
auth SHA256

接下来,将该key-direction指令添加到文件中的某处。你必须将其设置为“1”,VPN 才能在客户端计算机上正常运行:

~/client-configs/base.conf

key-direction 1

最后,添加一些注释掉的行。尽管你可以在每个客户端配置文件中包含这些指令,但你只需为随文件附带的 Linux 客户端启用它们/etc/openvpn/update-resolv-conf。此脚本使用该resolvconf实用程序更新 Linux 客户端的 DNS 信息。

~/client-configs/base.conf

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

如果你的客户端运行 Linux 并且有一个/etc/openvpn/update-resolv-conf文件,请在生成客户端配置文件后取消注释这些行。

完成后保存并关闭文件。

接下来,创建一个简单的脚本,该脚本将在目录中创建一个包含证书、密钥、加密文件和基本配置的新配置文件~/client-configs/filesmake_config.sh打开目录中名为的新文件~/client-configs

nano ~/client-configs/make_config.sh

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

〜/client-configs/make_config.sh

#!/bin/bash 
# First argument: Client identifier 
KEY_DIR=/home/sammy/client-configs/keys 
OUTPUT_DIR=/home/sammy/client-configs/files 
BASE_CONFIG=/home/sammy/client-configs/base.conf  
cat ${BASE_CONFIG} \ 
    <(echo -e '<ca>') \ 
    ${KEY_DIR}/ca.crt \ 
    <(echo -e '</ca>\n<cert>') \ 
    ${KEY_DIR}/${1}.crt \ 
    <(echo -e '</cert>\n<key>') \ 
    ${KEY_DIR}/${1}.key \ 
    <(echo -e '</key>\n<tls-auth>') \ 
    ${KEY_DIR}/ta.key \ 
    <(echo -e '</tls-auth>') \ 
    > ${OUTPUT_DIR}/${1}.ovpn

完成后保存并关闭文件。

在继续之前,请务必通过键入以下内容将此文件标记为可执行文件:

chmod 700 ~/client-configs/make_config.sh

该脚本将复制base.conf,收集你为客户端创建的所有证书和密钥文件,提取它们的内容,病将它们附加到基本配置文件的副本中,并将所有这些内容导出到新的客户端配置文件。这意味着,无需单独管理客户端的配置、证书和密钥文件,所有必需的信息都存储在一个位置。这样做的好处是,如果你将来需要添加客户端,您只需从运行此脚本即可快速创建配置文件,该文件在一个易于分发的文件中包含所有必要的信息。

请注意,每当你添加新客户端时,你都需要为其生成新的密钥和证书,然后才能运行此脚本并生成其配置文件。你将在下一步中使用此脚本进行一些练习。

第 8 步 — 生成客户端配置

如果你按照指南进行操作,则在步骤 3 中创建了一个分别名为client1.crt和 的客户端证书和密钥client1.key。你可以通过进入~/client-configs目录并运行您在上一步骤末尾创建的脚本来为这些凭据生成一个配置文件。

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

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

ls ~/client-configs/files
Output
client1.ovpn

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

虽然用于完成此传输的确切应用程序取决于您设备的操作系统和您的个人喜好,但可靠且安全的方法是在后端使用 SFTP(SSH 文件传输协议)或 SCP(安全复制)。这将通过加密连接传输你客户端的 VPN 身份验证文件。

以下是一个示例 SFTP 命令,client1.ovpn您可以从本地计算机(macOS 或 Linux)运行该示例。它将.ovpn文件放置在您的主目录中:

sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/

第 9 步 — 安装客户端配置

本部分介绍如何在 Windows、macOS、Linux、iOS 和 Android 上安装客户端 VPN 配置文件。这些客户端指令均不相互依赖,因此请随意跳至适用于您的设备的指令。

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

Windows

安装

从OpenVPN 的下载页面下载适用于 Windows 的 OpenVPN 客户端应用程序。选择适合你的 Windows 版本的安装程序版本。

注意: OpenVPN 需要管理权限才能安装。

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

C:\Program Files\OpenVPN\config

如果您不是以管理员身份运行文件传输程序(例如 WinSCP),则可能无法将文件直接传输到此位置。您可以以管理员身份运行它,也可以将文件传输到非管理用户的主目录,然后将其复制到C:\Program Files\OpenVPN\config本地,并在出现提示时批准将副本复制到管理位置。

当你启动 OpenVPN 时,它将自动查看配置文件并使其可用。

每次使用 OpenVPN 时,你都必须以管理员身份运行它,即使是管理帐户也是如此。要执行此操作,而无需在每次使用 VPN 时右键单击并选择以管理员身份运行,您必须从管理帐户进行预设。这也意味着标准用户需要输入管理员密码才能使用 OpenVPN。另一方面,除非客户端上的 OpenVPN 应用程序具有管理员权限,否则标准用户无法正确连接到服务器,因此需要提升权限。

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

连接

每次启动 OpenVPN GUI 时,Windows 都会询问你是否允许该程序对你的计算机进行更改。单击“是”。启动 OpenVPN 客户端应用程序只会将小程序放入系统托盘中,以便你可以根据需要连接和断开 VPN;它实际上并不建立 VPN 连接。

OpenVPN 启动后,进入系统托盘小程序并右键单击 OpenVPN 小程序图标来启动连接。这将打开上下文菜单。选择菜单顶部的client1client1.ovpn (这是您的个人资料),然后选择Connect

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

以同样的方式断开 VPN 连接:进入系统托盘小程序,右键单击 OpenVPN 小程序图标,选择客户端配置文件,然后单击“断开连接”

macOS

安装

Tunnelblick是一款适用于 macOS 的免费开源 OpenVPN 客户端。您可以从Tunnelblick 下载页面下载最新的磁盘映像。双击下载的.dmg文件并按照提示进行安装。

在安装过程即将结束时,Tunnelblick 会询问您是否有任何配置文件。回答我有配置文件并让 Tunnelblick 完成。打开 Finder 窗口并双击client1.ovpn。Tunnelblick 将安装客户端配置文件。需要管理权限。

连接

双击应用程序文件夹中的 Tunnelblick 图标启动 Tunnelblick。Tunnelblick 启动后,屏幕右上角的菜单栏中将出现一个 Tunnelblick 图标,用于控制连接。单击 图标,然后单击Connect client1菜单项以启动 VPN 连接。

Linux

安装

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

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

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

sudo apt update 
sudo apt install openvpn

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

sudo yum install epel-release 
sudo yum install openvpn

配置

检查你的发行版是否包含/etc/openvpn/update-resolv-conf脚本:

ls /etc/openvpn
Output
update-resolv-conf

接下来,编辑你传输的 OpenVPN 客户端配置文件:

nano client1.ovpn

如果你能够找到update-resolv-conf文件,请取消注释你添加的三行以调整 DNS 设置:

client1.ovpn

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

如果你使用的是 CentOS,把groupnogroup改为nobody来匹配可用组:

client1.ovpn

group nobody

保存并关闭文件。

现在,你只需输入以下命令指向客户端配置文件即可连接到 VPN :

sudo openvpn --config client1.ovpn


安装

从您的 iPhone 或 iPad 的 App Store 中,搜索并安装OpenVPN Connect,这是官方的 iOS OpenVPN 客户端。然后按照Apple 的这篇支持文章client1.ovpn将文件从本地计算机传输到 iOS 设备,并将其专门复制到 OpenVPN 应用程序。在国内你可能需要有几个海外的App Store账号才能安装。

现在在 iOS 设备上启动 OpenVPN 应用程序。它应该看到有一个新的配置文件可供导入。点击添加进行添加。

连接

OpenVPN 现在可以与新配置文件一起使用。点击CONNECT开始连接。当连接时,iOS 会通知你 OpenVPN 希望通过系统设置添加 VPN 配置。点击允许并使用 FaceID 或 TouchID 来授权更改。

注意:设置 > 常规 > VPN 和设备管理 > VPN下的 VPN 开关可能会成功打开和关闭连接,但最好在 OpenVPN Connect 应用程序中使用该开关

Android

安装

在应用商店安装Android OpenVPN Connect,这是官方的 Android OpenVPN 客户端应用程序。

连接

当你启动 OpenVPN 应用程序时,它会出现在“导入配置文件”屏幕上。点击“文件”选项卡,然后点击“浏览”以查找并选择client1.ovpn文件。

选择文件后,应用程序将提示您导入配置文件。点击确定

导入的配置文件屏幕上,选中导入后连接复选框,然后点击右上角的添加。

系统会询问你是否信任 OpenVPN 应用程序。选择“确定”以启动连接。要断开与 VPN 的连接,请切换“配置文件”页面上的开关。

第 10 步 — 测试你的 VPN 连接(可选)

注意:仅当您在步骤 4 中通过可选部分“推送 DNS 更改以通过 VPN 重定向所有流量”选择通过 VPN 路由所有流量时,此测试 VPN 连接的方法才有效。

一切安装完毕后,进行简单的检查即可确认一切正常。在不启用 VPN 连接的情况下,打开浏览器并转到DNSLeakTest

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

现在将 OpenVPN 客户端连接到您的 OpenVPN 服务器并刷新浏览器。现在应该会出现一个完全不同的 IP 地址(您的 VPN 服务器的 IP 地址),这就是您向世界展示的样子。同样,DNSLeakTest 的 扩展测试将检查您的 DNS 设置并确认您现在正在使用 VPN 推送的 DNS 解析器。

请记住:如果您选择通过 OpenVPN 服务器路由所有 VPN 客户端流量,并且您的 OpenVPN 服务器在 DigitalOcean Droplet 上运行,那么您的 VPN 客户端在连接到 VPN 时在互联网上执行的所有操作都将消耗 DigitalOcean 带宽。如果您有许多活动客户端,则可能会导致带宽过剩。

第 11 步 — 撤销客户端证书

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

为此,请导航至CA 计算机~/easy-rsa上的目录:

cd ~/easy-rsa

接下来,使用easyrsa以下选项运行脚本revoke,后跟你要撤销的客户端名称:

./easyrsa revoke client2

这将要求您输入以下内容来确认撤销yes

Output
Please confirm you wish to revoke the certificate with the following subject:

subject=
    commonName                = client2


Type the word 'yes' to continue, or any other input to abort.
  Continue with revocation: yes

如果你的 CA 私钥受密码短语保护,请在出现提示时输入密码。

确认该操作后,CA 将完全吊销客户端的证书。但是,你的 OpenVPN 服务器目前无法检查是否有任何客户端的证书已被吊销,并且客户端仍然可以访问 VPN。要更正此问题,请在你的CA 计算机上创建证书吊销列表 (CRL) (如有必要,再次输入您的 CA 密码):

./easyrsa gen-crl

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

  1. scp ~/easy-rsa/pki/crl.pem sammy@your_server_ip:/tmp

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

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

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

sudo nano /etc/openvpn/server.conf

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

/etc/openvpn/server.conf

. . .
crl-verify crl.pem

保存并关闭文件。

最后重启OpenVPN即可实现证书吊销:

sudo systemctl restart openvpn@server

客户端应该不再能够使用旧凭据成功连接到服务器。

要撤销其他客户端,请按照以下流程操作:

  1. 使用命令撤销证书./easyrsa revokeclient_name
  2. 生成新的 CRL
  3. 将新crl.pem文件传输到您的 OpenVPN 服务器并将其复制到/etc/openvpn目录以覆盖旧列表。
  4. 重新启动 OpenVPN 服务。

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

结论

如果你需要科学上网,有免费的VPN可用,但是不可持续,经常被封。如果买VPN授权,我自己买过的是15元/月/20G流量。如果用DigitalOcean海外云服务器,两台最基本的服务器一共是8刀/月,含1000G流量。划算非常多。