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

引言

你的团队是否需要在远程位置通过不可信网络私密地访问内部资源,就像他们连接到私有网络一样?虚拟私人网络(VPN)可以满足这个需求。VPN服务器作为远程用户访问你的私有网络的单一入口,并且这比SSH跳板服务器更加灵活和适宜。它会验证用户身份,并在用户设备和私有网络之间创建一个加密隧道,作为他们安全的门户,不仅连接到该网络,还可以通过配置的方式连接到更广阔的互联网。

您可以考虑使用商业VPN,但您也可以像本教程中的那样管理自己的免费VPN。OpenVPN是一个功能齐全、开源的安全套接字层(SSL) VPN解决方案,可适应各种配置。在本教程中,您将在Debian 11服务器上设置一个OpenVPN服务器,然后配置从Windows、macOS、Linux、iOS和/或Android访问它。

Note

注意:如果您计划在 Silicon Cloud vServer 上设置一个 OpenVPN 服务器,请注意,我们和许多托管服务提供商一样,会收取额外带宽费用。请注意,您的 VPN 用户在连接到 VPN 时在互联网上所做的一切都将消耗 Silicon Cloud 的带宽(假设您选择通过 VPN 路由其所有流量)。更多信息请参考此页面。

先决条件

完成这个教程,你需要准备以下物品:

  • Two Debian 11 servers: one to host your OpenVPN service, and one to serve as your certificate authority (CA).
  • A non-root user with sudo privileges on both servers. You can follow our Debian 11 Initial Server Setup guide to set up a user with appropriate permissions. That tutorial will also set up a firewall, which is assumed to be in place on both servers throughout this guide.
  • Easy-RSA installed on both servers. This is the utility you will use to manage the certificates for your VPN. Follow Steps 1–2 of this guide on your VPN server, and follow Steps 1–3 on your CA server.

虽然在技术上可以从您的OpenVPN服务器或本地机器上运行您的CA,但将CA(即其私钥)保留在与互联网不断连接的独立服务器上更为安全。因为您可能计划将VPN服务器始终保持与互联网的连接,所以它可能更容易受到攻击者的威胁。您不希望将CA的私钥保存在这样一个公共服务器上,因为如果攻击者获得私钥,他们可以使用它来签署新证书,从而让他们能够访问您的VPN。根据官方OpenVPN文档,您应将您的CA放置在专用于导入和签署证书请求的独立服务器上。

最后,请注意,如果在配置这些服务器时禁用密码身份验证,则在本指南后期在它们之间传输文件时可能会遇到困难。要解决此问题,您可以在每个服务器上重新启用密码身份验证。或者,您可以为每个服务器生成一个SSH密钥对,然后将OpenVPN服务器的公共SSH密钥添加到CA机器的authorized_keys文件中,反之亦然。有关执行这些解决方案的说明,请参阅《如何在Debian 11上设置SSH密钥》。

当你具备了这些前提条件,你可以继续进行本教程的第一步骤。

第一步-安装OpenVPN

首先,更新您的VPN服务器的软件包索引并安装OpenVPN。OpenVPN可以在Debian的默认软件库中找到,所以您可以使用apt进行安装。

  1. sudo apt update
  2. sudo apt install openvpn

 

就这样吧。由于您已经预先在两台服务器上安装了Easy-RSA并初始化了CA,现在您可以生成VPN服务器的证书了。

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

在OpenVPN服务器上,切换到非根用户的主目录中的/easy-rsa目录,并使用gen-req选项运行easyrsa脚本,后跟一台机器的常用名称。这可以是任何你喜欢的名称,但使用描述性的名称会有帮助。在本教程中,OpenVPN服务器的常用名称将简单地被称为“server”。确保还包括nopass选项。如果没有这样做,请求文件将受到密码保护,这可能会导致后来的权限问题。

Note

注意:如果您在此处选择了除“server”之外的名称,则需要调整以下某些指令。例如,在将生成的文件复制到/etc/openvpn目录时,您将需要替换正确的名称。您还需要稍后修改/etc/openvpn/server.conf文件以指向正确的.crt和.key文件。
  1. cd ~/easyrsa
  2. ./easyrsa gen-req server nopass

 

脚本会提示您输入要在证书签名请求(CSR)中显示的常用名称。默认情况下,它会显示您传递给./easyrsa gen-req的名称(例如,服务器)。按回车键接受默认名称,或输入其他名称。

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

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

 

使用一个安全的方法(比如SCP,在下面的例子中)将server.req文件传输到你的CA机器上。

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

 

接下来,在您的CA机器上,导航至~/easy-rsa目录。

  1. cd ~/easy-rsa

 

使用easyrsa脚本,导入server.req文件,按照创建CSR时输入的通用名称输入文件路径。

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

 

然后使用easyrsa运行sign-req选项,并加上请求类型和通用名称来签署请求。请求类型可以是客户端或服务器,所以对于OpenVPN服务器的证书请求,请确保使用服务器请求类型签署。

  1. ./easyrsa sign-req server server

 

在输出中,您将被要求确认该请求来自一个可信的来源。输入”是”并按下回车键以确认。

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服务器。

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

 

将ca.crt文件也传输到您的VPN服务器上。

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

 

你的OpenVPN服务器需要ca.crt文件,以便它知道它可以信任签署了server.crt的实体。

接下来,在您的OpenVPN服务器上,将server.crt和ca.crt文件复制到您的/etc/openvpn/目录下。

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

 

然后转到你的~ /easy-rsa目录。

  1. cd ~/easy-rsa

 

从那里开始,通过输入来创建一个强大的Diffie-Hellman密钥,用于密钥交换。

  1. ./easyrsa gen-dh

 

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

  1. sudo openvpn –genkey secret ta.key

 

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

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

 

有了这些,你的服务器所需的所有证书和密钥文件都已经生成。你可以开始创建相应的证书和密钥,用于你的客户端设备连接到你的OpenVPN服务器。

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

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

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

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

  1. mkdir -p ~/client-configs/keys

 

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

  1. chmod -R 700 ~/client-configs

 

接下来,返回到~/easy-rsa目录并使用gen-req和nopass选项以及客户端的通用名称运行easyrsa脚本。

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

 

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

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

 

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

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

 

在您的CA机器上,导航到~/easy-rsa目录并导入证书请求。

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

 

然后像在上一个步骤中为服务器签署请求一样,为客户端请求签署该请求。不过这次,请确保指定客户端请求类型。

  1. ./easyrsa sign-req client client1

 

在提示框中,输入“是”以确认您打算签署证书请求,并且它来自可信的来源。

Output

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

如果你对CA密钥进行了加密,这里将提示你输入密码。

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

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

 

在您的OpenVPN服务器上,将客户端证书复制到/client-configs/keys/目录中。

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

 

接下来,将ca.crt和ta.key文件复制到/client-configs/keys/目录中。

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

 

现在,您的服务器和客户端的证书和密钥已经生成,并存储在服务器上的适当目录中。还需要执行一些操作来使用这些文件,但这些操作将在第8步中介绍。现在,您可以继续在服务器上配置OpenVPN。

第四步 — 配置OpenVPN服务

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

开始时将一个样本OpenVPN配置文件复制到配置目录中,作为您设置的基础。

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

 

请在您偏爱的文本编辑器中打开服务器配置文件。

  1. sudo nano /etc/openvpn/server.conf

 

通过查找tls-auth指令找到HMAC部分。这行应该已经取消注释了,但如果没有取消注释的话,就将“;”删除以取消注释。

/etc/openvpn/server.conf -> /etc/openvpn/服务器.conf
tls-auth ta.key 0 # This file is secret

接下来,通过查找注释掉的密码行,找到密码密码学算法部分。AES-256-CBC密码算法提供了良好的加密级别,并得到了很好的支持。同样,这一行应该已被取消注释,但若没有取消,则只需删除前面的“;”即可。

/etc/openvpn/server.conf 这个文件指的是 OpenVPN 服务器的配置文件。
cipher AES-256-CBC

在这之下,添加一个auth指令来选择HMAC消息摘要算法。在这种情况下,SHA256是一个不错的选择。

/etc/openvpn/server.conf 可以被理解为OpenVPN服务器的配置文件。
auth SHA256

然后,找到包含一个dh指令的行,该指令定义了Diffie-Hellman参数。由于Easy-RSA最近的一些更改,Diffie-Hellman密钥的文件名可能与示例服务器配置文件中列出的不同。如果需要,通过删除2048,将此处列出的文件名更改为与您在前一步生成的密钥对齐。

以下是/etc/openvpn/server.conf的说法:

开头处的/etc/openvpn/server.conf

在/etc/openvpn/server.conf文件中

/etc/openvpn/server.conf文件中的内容

dh dh.pem

最后,找到用户和组设置,并移除每行开头的“;”以取消对这些行的注释。

/etc/openvpn/server.conf 请把以下内容改写成中文,只需要一个选项:

/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可以进行以下方式的改写:

– 服务器配置文件:/etc/openvpn/server.conf
– OpenVPN服务器配置文件:/etc/openvpn/server.conf
– 服务器设置文件路径:/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

在下面找到dhcp-option部分。同样,将两行前面的“;”删除以取消注释:

/etc/openvpn/server.conf 可能被重命名为 /etc/openvpn/服务器配置.conf
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

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

调整端口和协议(可选)

默认情况下,OpenVPN服务器使用端口1194和UDP协议来接受客户端连接。如果你因为客户端可能所处的限制性网络环境而需要使用不同的端口,你可以更改端口选项。如果你的OpenVPN服务器不托管Web内容,那么端口443是一个受欢迎的选择,因为通常可以通过防火墙规则允许该端口。

/etc/openvpn/server.conf 可以被翻译为”服务器配置文件.conf”。
# Optional!
port 443

通常情况下,该协议也被限制在该端口上。如果是这样,请将协议从UDP更改为TCP。

/etc/openvpn/server.conf 的汉语本地化版本
# Optional!
proto tcp

如果你将协议切换为TCP,需要将explicit-exit-notify指令的值从1改为0,因为这个指令只用于UDP。如果在使用TCP时没有这样做,启动OpenVPN服务时会导致错误。

/etc/openvpn/server.conf可以用以下方式在中文中被转述为:“服务器配置文件”
# Optional!
explicit-exit-notify 0

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

指向非默认凭据(可选)

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

/etc/openvpn/server.conf 可以使用的选项如下:
cert server.crt
key server.key

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

在根据您特定的使用情况对服务器的OpenVPN配置进行必要更改之后,您可以开始对服务器的网络进行一些变更。

第五步-调整服务器网络配置

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

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

  1. sudo nano /etc/sysctl.conf

 

在内部,查找设置 net.ipv4.ip_forward 的已注释行。从行首移除“#”字符以取消注释此设置。

/etc/sysctl.conf

/etc/sysctl.conf是一个系统配置文件。

net.ipv4.ip_forward=1

完成后保存并关闭文件。

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

  1. sudo sysctl -p

 

Output

net.ipv4.ip_forward = 1

如果你按照所需先决条件中列出的Debian 11初始服务器设置指南进行了操作,那么你应该已经设置了UFW防火墙。无论你是否使用防火墙来阻止不需要的流量(你几乎总是应该这样做),但在本指南中,你需要使用防火墙来操作一些进入服务器的流量。一些防火墙规则必须被修改以启用伪装,这是一个iptables概念,提供即时动态网络地址转换(NAT)来正确路由客户端连接。

在打开防火墙配置文件之前,您必须先找到您计算机的公共网络接口。为了做到这一点,请键入:

  1. ip route | grep default

 

您的公共界面是命令输出中跟在“dev”后的字符串。例如,下面输出中显示了一个名为eth0的界面,被突出显示:

Output

default via 203.0.113.1 dev eth0 proto static

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

  1. sudo nano /etc/ufw/before.rules

 

通常使用ufw命令添加UFW规则。但是在加载常规UFW规则之前,会阅读并应用before.rules文件中列出的规则。在文件的顶部添加以下突出显示的行。这将在nat表中设置POSTROUTING链的默认策略,并对来自VPN的任何流量进行伪装。请记住在以下-A POSTROUTING行中用上述命令中找到的接口替换eth0。

/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文件。

  1. sudo nano /etc/default/ufw

 

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

/etc/default/ufw 的含义是什么?
DEFAULT_FORWARD_POLICY="ACCEPT"

完成后保存并关闭文件。

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

另外,如果在完成前提教程时没有添加SSH端口,请在这里添加。

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

 

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

  1. sudo ufw disable
  2. sudo ufw enable

 

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

第六步 – 启动和启用OpenVPN服务

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

  1. sudo systemctl start openvpn@server

 

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

确认服务已成功启动,请输入以下内容进行双重检查:

  1. 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/

您还可以通过输入以下命令来检查OpenVPN tun0接口是否可用:

  1. 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

在启动服务后,启用自动启动选项,以便在开机时自动运行。

  1. sudo systemctl enable openvpn@server

 

您的OpenVPN服务现在已经启动。但在您开始使用之前,必须先为客户端机器创建一个配置文件。本教程已经介绍了如何为客户端创建证书/密钥对,接下来的步骤将演示如何创建一个基础架构来生成客户端配置文件。

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

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

在您之前创建的client-configs目录中,在您的OpenVPN服务器上创建一个新目录,您将在其中存储客户端配置文件,开始操作:

  1. mkdir -p ~/client-configs/files

 

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

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

 

在你的文本编辑器中打开这个新文件。

  1. nano ~/client-configs/base.conf

 

在内部,找到远程指令。这将把客户端指向您的OpenVPN服务器地址,即您的OpenVPN服务器的公共IP地址。如果您决定更改OpenVPN服务器监听的端口,您还需要将1194更改为您选择的端口。

~/客户端配置/基本配置.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
. . .

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

基本配置文件.conf
proto udp

接下来,通过移除每行开头的“;”来取消注释用户和组指令。

~/客户端配置/基本.conf
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

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

请为客户配置文件”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

类似地,在客户端配置文件中直接添加ta.key时,请注释掉tls-auth指令。

把以下内容用中文进行释义,只需要一种选项:
~/client-configs/base.conf~/客户端配置/基本配置.conf

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

将/etc/openvpn/server.conf文件中设置的密码和认证设置镜像。

~/client-configs/base.conf的中文本地译文
cipher AES-256-CBC
auth SHA256

接下来,在文件的某处添加关键方向指令。您必须将其设置为“1”,以便在客户机上正确运行VPN。

请为以下内容提供中文的本地化版本,只需一种选项:
~/client-configs/base.conf
key-direction 1

最后,添加几行被注释掉的代码。虽然可以在每个客户端配置文件中包含这些指令,但是只需要为携带/etc/openvpn/update-resolv-conf文件的Linux客户端启用它们。此脚本使用resolvconf实用程序来更新Linux客户端的DNS信息。

请将以下内容用中文进行本地化改写,只需要提供一种选项:
~/client-configs/base.conf客户端配置文件路径:~/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/files 目录中创建一个新的配置文件,其中包含您的证书、密钥、加密文件和基本配置信息。在~/client-configs 目录中打开一个名为 make_config.sh 的新文件。

  1. nano ~/client-configs/make_config.sh

 

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

生成配置文件的脚本是~/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

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

在继续之前,请确保将此文件标记为可执行,输入以下命令:

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

 

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

请注意,每当您新增一个客户端时,在运行此脚本并生成配置文件之前,您都需要为其生成新的密钥和证书。在下一步中,您将有机会使用此脚本进行练习。

步骤8 — 生成客户端配置

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

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

 

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

  1. ls ~/client-configs/files

 

Output

client1.ovpn

你需要将此文件传输到打算作为客户端使用的设备上,比如说你的本地电脑或者移动设备。

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

这是一个使用client1.ovpn示例的SFTP命令的例子,您可以在本地计算机(macOS或Linux)上运行。它将.ovpn文件放在您的主目录中。

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

 

以下是一些安全传输文件从服务器到本地计算机的工具和教程:

  • How To Use SFTP to Securely Transfer Files with a Remote Server
  • WinSCP
  • FileZilla
  • Cyberduck

第九步 – 安装客户端配置

本部分介绍了如何在Windows、macOS、Linux、iOS和Android上安装客户端VPN配置文件。这些客户端指南之间没有相互依赖,因此请随时跳到适用于您设备的部分。

OpenVPN连接的名称将与您命名的.ovpn文件相同。就本教程而言,这意味着该连接被命名为client1.ovpn,与您生成的第一个客户端文件相匹配。

Windows – 窗户 hù)

安装

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

Note

注意:安装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小程序图标来建立连接。这将打开上下文菜单。在菜单顶部选择client1(这是您的client1.ovpn配置文件),然后选择连接。

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

以相同的方式断开VPN连接:进入系统托盘应用程序,右键点击OpenVPN应用程序图标,选择客户端配置文件,然后点击断开连接。

苹果操作系统的电脑

安装

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

在安装过程的最后,Tunnelblick会询问您是否有任何配置文件。回答”我有配置文件”,然后让Tunnelblick完成安装。在Finder窗口中打开,双击client1.ovpn文件。Tunnelblick将安装客户端配置文件。需要管理员权限。

连接

在应用程序文件夹中通过双击Tunnelblick图标来启动Tunnelblick。一旦Tunnelblick被启动,屏幕右上角的菜单栏中会出现一个Tunnelblick图标,用于控制连接。点击该图标,然后选择“连接client1”菜单项以建立VPN连接。

Linux -> Linux操作系统

安装

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

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

在Debian上,您可以通过键入与服务器上相同的方式来安装它。

  1. sudo apt update
  2. sudo apt install openvpn

 

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

  1. sudo yum install epel-release
  2. sudo yum install openvpn

 

配置

检查您的发行版是否包含一个/etc/openvpn/update-resolv-conf脚本。

  1. ls /etc/openvpn

 

Output

update-resolv-conf

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

  1. nano client1.ovpn

 

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

客户端1.o vpn
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

如果您使用的是CentOS,请将组指令从nogroup更改为nobody以匹配该发行版可用的组。

客户端1.ovpn
group nobody

保存并关闭文件。

现在,您只需将openvpn命令指向客户端配置文件即可连接到VPN。

  1. sudo openvpn –config client1.ovpn

 

这应该会连接你到你的VPN。

iOS(苹果操作系统)

安装

请在您的iPhone或iPad的App Store中搜索并安装OpenVPN Connect,这是官方的iOS OpenVPN客户端。然后按照苹果的支持文章将client1.ovpn文件从您的本地设备传输到iOS设备,将其复制到OpenVPN应用程序中。

现在在iOS设备上启动OpenVPN应用。它会发现有一个新的配置文件可以导入。点击”添加”来添加它。

The OpenVPN iOS app showing new profile ready to import

连接

OpenVPN现在可以使用新的配置文件。点击连接以开始连接。这时,iOS将通知您OpenVPN希望通过系统设置添加VPN配置。点击允许并使用FaceID或TouchID验证更改授权。

Note

注意:在“设置”>“通用”>“VPN和设备管理”>“VPN”下的VPN开关可能成功切换您的连接,但最好使用OpenVPN Connect应用中的开关。
The OpenVPN iOS app connected to the VPN

安卓(Android)

安装

打开谷歌Play商店。搜索并安装Android OpenVPN Connect,官方的Android OpenVPN客户端应用程序。

您可以通过将Android设备连接到电脑并通过USB将.ovpn文件复制过去来传输配置文件。或者,如果您有一个SD卡读卡器,您可以取出设备的SD卡,将配置文件复制到SD卡上,然后将SD卡重新插入Android设备中。

连接

当你启动OpenVPN应用时,它会进入导入配置文件的界面。点击“文件”选项卡,然后点击“浏览”来查找并选择client1.ovpn文件。

The OpenVPN Android Import Profile screen

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

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

The OpenVPN Android app Imported Profile screenselecting VPN profile to import

当你使用OpenVPN应用程序时,会被要求确认信任该应用程序。选择“确定”以建立连接。要断开VPN连接,请在个人资料页面上切换开关。

The OpenVPN Android app connected to the VPN

第十步-测试您的VPN连接(可选)

Note

注意:只有在第四步中选择将所有流量通过 VPN 路由的情况下,此方法才能测试您的 VPN 连接。这是通过可选的 “推送 DNS 更改以重定向所有流量到 VPN” 部分实现的。

一旦安装完成,进行简单检查以确认一切正常运行。在未启用VPN连接的情况下,打开浏览器并访问DNSLeakTest。

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

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

请记住:如果您选择将所有VPN客户端流量通过您的OpenVPN服务器路由,并且您的OpenVPN服务器正在运行在Silicon Cloud vServer上,那么您的VPN客户端在连接到VPN时在互联网上所做的一切都会消耗Silicon Cloud带宽。如果您有许多活跃的客户端,您可能会产生带宽超支的情况。

第11步 – 撤销客户端证书

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

要做到这一点,首先在您的证书颁发机构机器上导航到~/easy-rsa目录。

  1. cd ~/easy-rsa

 

接下来,使用revoke选项运行easyrsa脚本,并输入您想要撤销的客户端名称。

  1. ./easyrsa revoke client2

 

这将要求您通过输入“是”确认撤消操作。

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私钥有密码保护,请在提示时输入密码。

在确认完成操作后,证书颁发机构将完全撤销客户端的证书。然而,您的OpenVPN服务器目前无法检查是否撤销了任何客户端的证书,客户端仍然可以访问VPN。为了解决这个问题,在您的证书颁发机构设备上创建证书撤销列表(CRL)(如果需要,再次输入您的证书颁发机构密码)。

  1. ./easyrsa gen-crl

 

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

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

 

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

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

 

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

  1. sudo nano /etc/openvpn/server.conf

 

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

/etc/openvpn/server.conf 的汉语翻译可能是「/etc/openvpn/服务器配置文件」。
. . .
crl-verify crl.pem

保存并关闭文件。

最后,重新启动OpenVPN以实施证书吊销。

  1. sudo systemctl restart openvpn@server

 

客户端不能再使用旧凭证成功连接服务器。

要撤销额外的客户,请按照以下流程执行:

    1. 使用”./easyrsa revoke client_name”命令撤销证书

 

    1. 生成一个新的CRL(证书撤销列表)

 

    1. 将新的crl.pem文件传输到您的OpenVPN服务器,并复制到”/etc/openvpn”目录中以覆盖旧列表。

 

    重新启动OpenVPN服务。

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

结论

您的远程团队成员现在可以安全地连接到您的内部资源,就像他们直接连接到私有网络一样。通过引入新的虚拟私人网络(VPN),您可以考虑将当前可以通过公共网络访问的某些资源(可能是通过比刚刚设置的公钥基础设施不够稳固的方式,如HTTP基本身份验证)迁移到私有网络和VPN后面。借助一个服务器和一些开源软件,您已经迈出了保护关键数据和基础设施的重要一步。

与VPN类似的另一种安全和隐私工具是网络代理。像VPN一样,网络代理充当终端用户和他们想要访问的互联网资源之间的中间人,为终端用户提供匿名性。尽管网络代理仅用于网络流量并且不提供加密,但在VPN不必要的情况下,它仍然是一个值得团队使用的工具。如果你感兴趣,可以查看我们的教程《如何在Ubuntu 22.04上配置Squid代理以进行私密连接》。

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds