如何在 Ubuntu 18.04 上设置 OpenVPN 服务器

2023-11-10

本教程的先前版本由以下人员编写贾斯汀·埃林伍德

介绍

当您的智能手机或笔记本电脑连接到不受信任的网络(例如酒店或咖啡店的 WiFi)时,想要安全可靠地访问互联网吗? A虚拟专用网络(VPN) 允许您安全地穿越不受信任的网络,就像在专用网络上一样。流量从 VPN 服务器发出并继续到达目的地。

当与HTTPS 连接,此设置可让您保护无线登录和交易的安全。您可以规避地理限制和审查制度,并保护您的位置和任何未加密的 HTTP 流量免受不受信任的网络的影响。

OpenVPN是一款功能齐全的开源安全套接字层 (SSL) VPN 解决方案,可适应多种配置。在本教程中,您将在 Ubuntu 18.04 服务器上设置 OpenVPN 服务器,然后配置从 Windows、macOS、iOS 和/或 Android 对其的访问。本教程将使每个设置的安装和配置步骤尽可能简单。

Note:如果您计划在 DigitalOcean Droplet 上设置 OpenVPN 服务器,请注意,我们与许多托管提供商一样,会对带宽超额收费。因此,请注意您的服务器正在处理的流量。

See 这一页了解更多信息。

先决条件

要完成本教程,您需要访问 Ubuntu 18.04 服务器来托管 OpenVPN 服务。您将需要配置一个非root用户与sudo在开始本指南之前先了解一下特权。您可以关注我们的Ubuntu 18.04 初始服务器设置指南设置具有适当权限的用户。链接的教程还将设置一个firewall,假定该内容贯穿本指南。

此外,您还需要一台单独的计算机作为您的证书颁发机构 (CA)。虽然从技术上讲可以使用 OpenVPN 服务器或本地计算机作为 CA,但不建议这样做,因为这会使您的 VPN 面临一些安全漏洞。根据 OpenVPN 的入门操作教程,您应该将 CA 放置在专用于导入和签署证书请求的独立计算机上。因此,本指南假设您的 CA 位于单独的 Ubuntu 18.04 服务器上,该服务器也具有非root用户与sudo特权和基本防火墙。

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

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

第 1 步 — 安装 OpenVPN 和 EasyRSA

首先,更新您的VPN 服务器的包索引并安装 OpenVPN。 OpenVPN 在 Ubuntu 的默认存储库中可用,因此您可以使用apt安装:

  1. sudo apt update
  2. sudo apt install开放VPN

OpenVPN 是一种 TLS/SSL VPN。这意味着它利用证书来加密服务器和客户端之间的流量。要颁发受信任的证书,您将设置自己的简单证书颁发机构 (CA)。为此,我们将从项目的官方 GitHub 存储库下载最新版本的 EasyRSA,我们将使用它来构建我们的 CA 公钥基础设施 (PKI)。

如先决条件中所述,我们将在独立服务器上构建 CA。采用这种方法的原因是,如果攻击者能够渗透到您的服务器,他们将能够访问您的 CA 私钥并使用它来签署新证书,从而使他们能够访问您的 VPN。因此,从独立计算机管理 CA 有助于防止未经授权的用户访问您的 VPN。另请注意,建议您在不用于签署密钥时关闭 CA 服务器,作为进一步的预防措施。

要开始构建 CA 和 PKI 基础设施,请使用wget下载最新版本的 EasyRSA您的 CA 机器和 OpenVPN 服务器。要获取最新版本,请访问ReleasesEasyRSA 官方 GitHub 项目上的页面,复制以结尾的文件的下载链接.tgz,然后将其粘贴到以下命令中:

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

然后提取 tarball:

  1. cd ~
  2. tar xvf EasyRSA-3.0.8.tgz

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

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

EasyRSA 附带安装了一个配置文件,您可以编辑该文件来为您的 CA 定义许多变量。

On your CA机,导航到 EasyRSA 目录:

  1. cd ~/EasyRSA-3.0.8/

该目录内有一个名为vars.example。复制该文件并命名该副本vars没有文件扩展名:

  1. cpvars.example vars 变量

使用您喜欢的文本编辑器打开这个新文件。在这里,我们将使用nano:

  1. nano vars

查找为新证书设置字段默认值的设置。它看起来像这样:

〜/ EasyRSA-3.0.8 / vars
. . .

#set_var EASYRSA_REQ_COUNTRY    "US"
#set_var EASYRSA_REQ_PROVINCE   "California"
#set_var EASYRSA_REQ_CITY       "San Francisco"
#set_var EASYRSA_REQ_ORG        "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL      "me@example.net"
#set_var EASYRSA_REQ_OU         "My Organizational Unit"

. . .

通过删除井号 (#)在每一个的开头。然后将突出显示的值更新为您想要的值,但不要将其留空:

〜/ EasyRSA-3.0.8 / vars
. . .

set_var EASYRSA_REQ_COUNTRY    "US"
set_var EASYRSA_REQ_PROVINCE   "New York"
set_var EASYRSA_REQ_CITY       "New York City"
set_var EASYRSA_REQ_ORG        "DigitalOcean"
set_var EASYRSA_REQ_EMAIL      "admin@example.com"
set_var EASYRSA_REQ_OU         "Community"

. . .

完成后,保存并关闭文件。如果您使用编辑该文件nano,按CTRL + X, Y, 进而ENTER.

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

  1. ./easyrsa 初始化 pki
Output
. . . init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /home/sammy/EasyRSA-3.0.8/pki

此后,请致电easyrsa再次编写脚本,然后使用build-ca选项。这将构建 CA 并创建两个重要文件 -ca.crt and ca.key— 构成 SSL 证书的公共部分和私有部分。

  • ca.crt是 CA 的公共证书文件,在 OpenVPN 的上下文中,服务器和客户端使用该文件来通知彼此,他们是同一信任网络的一部分,而不是执行中间人攻击的人。因此,您的服务器和所有客户端都需要一份ca.crt file.
  • ca.key是 CA 机器用来签署服务器和客户端密钥和证书的私钥。如果攻击者获得了对您的 CA 的访问权限,进而访问了您的 CAca.key文件后,他们将能够签署证书请求并访问您的 VPN,从而妨碍其安全。这就是为什么你的ca.key文件应该only位于您的 CA 计算机上,并且理想情况下,您的 CA 计算机在不签署证书请求时应保持离线状态,作为额外的安全措施。

如果您不希望每次与 CA 交互时都提示输入密码,您可以运行build-ca命令与nopass选项,像这样:

  1. ./easyrsa build-ca nopass

在输出中,系统会要求您确认通用名对于您的 CA:

Output
. . . Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

通用名称是在证书颁发机构的上下文中用于指代该计算机的名称。您可以输入任何字符串作为 CA 的通用名称,但为了简单起见,请按ENTER接受默认名称。

这样,您的 CA 就已就位,并准备好开始签署证书请求。

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

现在您已准备好 CA,您可以从服务器生成私钥和证书请求,然后将该请求传输到您的 CA 进行签名,从而创建所需的证书。您还可以自由创建一些在加密过程中使用的其他文件。

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

  1. cd EasyRSA-3.0.8/

从那里运行easyrsa脚本与init-pki选项。尽管您已经在 CA 计算机上运行了此命令,但仍有必要在这里运行它,因为您的服务器和 CA 将具有单独的 PKI 目录:

  1. ./easyrsa 初始化 pki

然后致电easyrsa再次编写脚本,这次是gen-req选项后跟机器的通用名称。同样,这可以是您喜欢的任何内容,但使其具有描述性会很有帮助。在本教程中,OpenVPN 服务器的通用名称只是“服务器”。请务必包括nopass选项也是如此。如果不这样做,将对请求文件进行密码保护,这可能会导致稍后出现权限问题:

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

  1. ./easyrsa gen-req 服务器 nopass

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

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

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

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

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

  1. cd EasyRSA-3.0.8/

使用easyrsa再次脚本,导入server.req文件,遵循文件路径及其通用名称:

  1. ./easyrsa import-req /tmp/server.req 服务器

然后通过运行以下命令来签署请求easyrsa脚本与sign-req选项,然后是请求类型和通用名称。请求类型可以是client or server,所以对于OpenVPN服务器的证书请求,一定要使用server请求类型:

  1. ./easyrsa 签名请求服务器 服务器

在输出中,系统会要求您验证请求是否来自可信来源。类型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 3650 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 计算机之前,请传输ca.crt文件也发送到您的服务器:

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

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

  1. sudo cp /tmp/{服务器.crt,ca.crt}/etc/openvpn/

然后导航到您的 EasyRSA 目录:

  1. cd EasyRSA-3.0.8/

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

  1. ./easyrsa gen-dh

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

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

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

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

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

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

尽管您可以在客户端计算机上生成私钥和证书请求,然后将其发送到 CA 进行签名,但本指南概述了在服务器上生成证书请求的过程。这样做的好处是我们可以创建一个脚本,该脚本将自动生成包含所有必需密钥和证书的客户端配置文件。这使您无需将密钥、证书和配置文件传输到客户端,并简化了加入 VPN 的过程。

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

首先在主目录中创建一个目录结构来存储客户端证书和密钥文件:

  1. mkdir -p〜/客户端配置/密钥

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

  1. chmod -R 700〜/客户端配置

接下来,导航回 EasyRSA 目录并运行easyrsa脚本与gen-req and nopass选项,以及客户端的通用名称:

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

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

  1. cppki/private/client1.key ~/client-configs/keys/

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

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

在您的 CA 机器上,导航到 EasyRSA 目录,然后导入证书请求:

  1. cd EasyRSA-3.0.8/
  2. ./easyrsa import-req /tmp/client1.req client1

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

  1. ./easyrsa 签名请求客户端 client1

根据提示输入yes确认您打算签署证书请求并且它来自受信任的来源:

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

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

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

接下来,复制ca.crt and ta.key文件到/client-configs/keys/目录以及:

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

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

第 5 步 — 配置 OpenVPN 服务

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

首先将示例 OpenVPN 配置文件复制到配置目录中,然后将其解压缩,以便将其用作设置的基础:

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

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

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

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

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

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

/etc/openvpn/server.conf
cipher AES-256-CBC

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

/etc/openvpn/server.conf
auth SHA256

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

/etc/openvpn/server.conf
dh dh.pem

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

/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

If you do将协议切换为 TCP,您需要更改explicit-exit-notify指令的值来自1 to 0,因为该指令仅由 UDP 使用。如果在使用 TCP 时不这样做,将会在启动 OpenVPN 服务时导致错误:

/etc/openvpn/server.conf
# Optional!
explicit-exit-notify 0

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

(可选)指向非默认凭证

如果您在期间选择了不同的名称./build-key-server之前的命令,修改cert and key您看到的线指向适当的.crt and .key文件。如果您使用默认名称“server”,则已正确设置:

/etc/openvpn/server.conf
cert server.crt
key server.key

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

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

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

服务器网络配置的某些方面需要进行调整,以便 OpenVPN 可以通过 VPN 正确路由流量。其中第一个是IP转发,一种确定 IP 流量应路由到何处的方法。这对于您的服务器将提供的 VPN 功能至关重要。

通过修改以下内容来调整服务器的默认 IP 转发设置/etc/sysctl.conf file:

  1. sudo nano/etc/sysctl.conf

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

/etc/sysctl.conf
net.ipv4.ip_forward=1

完成后保存并关闭文件。

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

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

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

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

  1. ip route | grep默认

您的公共接口是在此命令的输出中找到的字符串,位于单词“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 rules are typically added using the ufw command. Rules listed in the before.rules file, though, are read and put into place before the conventional UFW rules are loaded. Towards the top of the file, add the highlighted lines below. This will set the default policy for the POSTROUTING chain in the nat table and masquerade any traffic coming from the VPN. Remember to replace eth0 in the -A POSTROUTING line below with the interface you found in the above command:

/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 file:

  1. sudo nano/etc/默认/ufw

在里面找到DEFAULT_FORWARD_POLICY指令并更改值DROP to ACCEPT:

/etc/默认/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

完成后保存并关闭文件。

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

如果您在遵循先决条件教程时忘记添加 SSH 端口,也可以在此处添加:

  1. sudo ufw allow 1194/udp
  2. sudoufw 允许 OpenSSH

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

  1. sudoufw 禁用
  2. sudo ufw enable

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

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

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

Start the OpenVPN server by specifying your configuration file name as an instance variable after the systemd unit file name. The configuration file for your server is called /etc/openvpn/server.conf, so add @server to end of your unit file when calling it:

  1. sudo systemctl start openvpn@server

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

  1. sudosystemctl 状态 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 Tue 2016-05-03 15:30:05 EDT; 47s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta Main PID: 5856 (openvpn) Tasks: 1 (limit: 512) CGroup: /system.slice/system-openvpn.slice/openvpn@server.service └─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid

您还可以检查 OpenVPNtun0可以通过键入以下内容来访问该界面:

  1. ip地址显示tun0

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

Output
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue 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

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

  1. sudo系统控制enableopenvpn@服务器

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

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

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

首先创建一个新目录,您将在其中存储客户端配置文件client-configs您之前创建的目录:

  1. mkdir -p〜/客户端配置/文件

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

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

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

  1. nano〜/客户端配置/base.conf

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

〜/客户端配置/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
. . .

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

〜/客户端配置/base.conf
proto udp

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

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

找到设置的指令ca, cert, and 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

同样,注释掉tls-auth指令,正如您将添加的ta.key直接进入客户端配置文件:

〜/客户端配置/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 and auth您在中设置的设置/etc/openvpn/server.conf file:

〜/客户端配置/base.conf
cipher AES-256-CBC
auth SHA256

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

〜/客户端配置/base.conf
key-direction 1

最后补充几句注释掉了用于处理基于 Linux 的 VPN 客户端用于 DNS 解析的各种方法。您将添加两组相似但独立的注释行。第一组适用于以下客户do not use systemd-resolved管理 DNS。这些客户依赖于resolvconf用于更新 Linux 客户端的 DNS 信息的实用程序。

〜/客户端配置/base.conf
; script-security 2
; up /etc/openvpn/update-resolv-conf
; down /etc/openvpn/update-resolv-conf

现在为使用的客户端添加另一组行systemd-resolved对于 DNS 解析:

〜/客户端配置/base.conf
; script-security 2
; up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE .

完成后保存并关闭文件。

后来在第 10 步 - 安装客户端配置步骤在本教程中,您将了解如何确定 DNS 解析在 Linux 客户端上的工作方式以及要取消注释的部分。

接下来,创建一个简单的脚本,该脚本将使用相关的证书、密钥和加密文件来编译您的基本配置,然后将生成的配置放入~/client-configs/files目录。打开一个名为make_config.sh~/client-configs目录:

  1. nano〜/客户端配置/make_config.sh

在里面添加以下内容:

〜/客户端配置/make_config.sh
#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/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〜/客户端配置/make_config.sh

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

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

第 9 步 — 生成客户端配置

如果您按照本指南进行操作,您将创建一个名为的客户端证书和密钥client1.crt and client1.key分别在步骤 4 中。您可以通过移至您的~/client-configs目录并运行您在上一步结束时创建的脚本:

  1. cd〜/客户端配置
  2. sudo ./make_config.sh client1

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

  1. ls〜/客户端配置/文件
Output
client1.ovpn

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

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

Here is an example SFTP command using the client1.ovpn example which you can run from your local computer (macOS or Linux). It places the .ovpn file in your home directory:

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

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

  • WinSCP
  • 如何使用 SFTP 与远程服务器安全传输文件
  • 如何使用 Filezilla 在 VPS 上安全地传输和管理文件

第 10 步 — 安装客户端配置

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

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

Windows

安装中

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

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

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

C:\Program Files\OpenVPN\config

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

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

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

正在连接

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

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

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

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

macOS

安装中

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

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

正在连接

双击窗口中的 Tunnelblick 图标启动 Tunnelblick应用领域文件夹。 Tunnelblick 启动后,屏幕右上角的菜单栏中将出现一个 Tunnelblick 图标,用于控制连接。单击该图标,然后单击连接客户端1用于启动 VPN 连接的菜单项。

Linux

安装中

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

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

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

  1. sudo apt update
  2. sudo apt install开放VPN

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

  1. sudo yum installepel-释放
  2. sudo yum install开放VPN

配置使用的客户端systemd-resolved

首先确定您的系统是否正在使用systemd-resolved通过检查来处理 DNS 解析/etc/resolv.conf file:

  1. cat/etc/resolv.conf
Output
# This file is managed by man:systemd-resolved(8). Do not edit. . . . nameserver 127.0.0.53 options edns0

如果您的系统配置为使用systemd-resolved对于 DNS 解析,后面的 IP 地址nameserver选项将是127.0.0.53。文件中还应该有注释,例如显示的输出,解释如何systemd-resolved正在管理文件。如果您的 IP 地址与127.0.0.53那么很可能你的系统没有使用systemd-resolved您可以转到下一节,了解如何配置具有以下功能的 Linux 客户端:update-resolv-conf脚本代替。

要支持这些客户端,请首先安装openvpn-systemd-resolved包裹。它提供的脚本将强制systemd-resolved使用 VPN 服务器进行 DNS 解析。

  1. sudo apt installopenvpn-systemd-已解决

安装该软件包后,配置客户端以使用它,并通过 VPN 接口发送所有 DNS 查询。打开客户端的VPN文件:

  1. nano client1.ovpn

现在取消注释您之前添加的以下行:

client1.ovpn
script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .

取消注释这些行后保存并关闭文件

配置使用的客户端update-resolv-conf

如果您的系统没有使用systemd-resolved要管理 DNS,请检查您的发行版是否包含/etc/openvpn/update-resolv-conf改为脚本:

  1. ls/etc/openvpn
Output
update-resolv-conf

如果您的客户包括update-resolv-conf文件,然后编辑您之前传输的 OpenVPN 客户端配置文件:

  1. nano client1.ovpn

取消注释您添加的三行以调整 DNS 设置:

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

如果您使用的是 CentOS,请更改group指令来自nogroup to nobody匹配发行版的可用组:

client1.ovpn
group nobody

保存并关闭文件。

将您的客户端计算机连接到 VPN

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

  1. sudo openvpn --config client1.ovpn

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

iOS

安装中

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

此处概述了使用 iTunes 完成传输的过程。在电脑上打开 iTunes,然后单击iPhone > apps。向下滚动到底部文件共享部分并单击 OpenVPN 应用程序。右边的空白窗口,OpenVPN 文档,用于共享文件。拖动.ovpn文件到 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位置。通过滑动同一按钮来断开连接Off.

Note

VPN 开关位于Settings无法用于连接 VPN。如果您尝试,您将收到一条仅使用 OpenVPN 应用程序进行连接的通知。

The OpenVPN iOS app connected to the VPN

Android

安装中

打开 Google Play 商店。搜索并安装Android OpenVPN 连接,官方 Android OpenVPN 客户端应用程序。

您可以转移.ovpn通过 USB 将 Android 设备连接到计算机并复制文件来创建配置文件。或者,如果您有 SD 卡读卡器,则可以取出设备的 SD 卡,将配置文件复制到其中,然后将卡插回 Android 设备。

启动 OpenVPN 应用程序并点击菜单以导入配置文件。

The OpenVPN Android app profile import menu selection

然后导航到保存的配置文件的位置(屏幕截图使用/sdcard/Download/) 并选择文件。该应用程序将记录配置文件已导入。

The OpenVPN Android app selecting VPN profile to import

正在连接

要连接,只需点击Connect按钮。系统会询问您是否信任 OpenVPN 应用程序。选择OK启动连接。要断开与 VPN 的连接,请返回 OpenVPN 应用程序并选择断开.

The OpenVPN Android app ready to connect to the VPN

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

Note:仅当您在步骤 5 中选择通过 VPN 路由所有流量时,此测试 VPN 连接的方法才有效。

一切安装完毕后,进行简单的检查即可确认一切正常。在未启用 VPN 连接的情况下,打开浏览器并转至DNS泄漏测试.

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

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

第 12 步 — 撤销客户端证书

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

为此,请导航到 CA 计算机上的 EasyRSA 目录:

  1. cd EasyRSA-3.0.8/

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

  1. ./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 将完全吊销客户端的证书。但是,您的 OpenVPN 服务器目前无法检查是否有任何客户端的证书已被吊销,并且客户端仍然可以访问 VPN。要更正此问题,请在 CA 计算机上创建证书吊销列表 (CRL):

  1. ./easyrsa gen-crl

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

  1. scp ~/EasyRSA-3.0.8/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
crl-verify crl.pem

保存并关闭文件。

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

  1. sudosystemctl 重新启动 openvpn@server

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

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

  1. Revoke the certificate with the ./easyrsa revoke client_name command
  2. 生成新的 CRL
  3. 转移新的crl.pem文件到您的 OpenVPN 服务器并将其复制到/etc/openvpn目录覆盖旧列表。
  4. 重新启动 OpenVPN 服务。

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

结论

您现在可以安全地浏览互联网,保护您的身份、位置和流量免受窥探和审查。

如需配置更多客户端,只需按照步骤操作4 and 9-11对于每个附加设备。要撤销对客户端的访问权限,只需按照步骤操作12.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ubuntu 18.04 上设置 OpenVPN 服务器 的相关文章

  • 安全转义表名/列名

    我在 php 中使用 PDO 因此无法使用准备好的语句转义表名或列名 以下是我自己实现它的万无一失的方法 tn str replace REQUEST tn column str replace REQUEST column sql SEL
  • saber sd 如何在没有 SPL 的情况下直接从 uboot 启动

    sabre sd 基于 imx 6 最大内部 RAM 约为 150Kb 然而 uboot 足够大 可以容纳在这个空间中 在这个场景中事情是如何进行的 https community freescale com docs DOC 95015
  • 警告:您的 git 版本是 1.9.3。存在严重的安全漏洞

    我在部署到 Heroku 期间收到有关 git 1 9 3 严重安全漏洞的警告 我尝试通过 homebrew 更新 git 但发现 git 最初并不是通过 homebrew 安装的 然后我通过自制程序安装了它 brew update bre
  • libicui18n.so.52:无法打开共享对象文件

    我一直在使用 libicu 来检测在 docker ubuntu 内部运行的节点应用程序中的字符集 这是通过模块完成的节点 icu 字符集检测器 https github com mooz node icu charset detector
  • 支持 API 28(Android Pie) 上的 Android StrongBox 的 Android 智能手机列表

    我需要 Android 9 中支持安全元件和 StrongBox 的 Android 手机列表 在哪里或如何找到该列表 我在 Samsung Galaxy S9 和 AVD Google Pixel XL API 28 上尝试了下面的代码
  • 标准头文件中的 C 编译器错误 - 未定义的 C++ 定义

    我正在尝试编译 C 程序 但收到许多错误 这些错误是在标准 C 头文件 inttypes h stdio h stat h 等 中遇到的 错误的来源是以下未定义的常量 BEGIN DECLS END DECLS BEGIN NAMESPAC
  • 防止隐藏的输入被更改

    这一直让我压力很大 我有一个隐藏的输入
  • apt-get install tzdata 非交互式

    当我尝试 apt get install y tzdata 将显示用于选择时区的命令行选项 我试图在脚本中使用它来进行一些设置 如何在没有用户输入的情况下使 apt get 运行 我知道重新配置 tzdata 我可以做 echo Ameri
  • 未找到命令“ember”

    看来我搞砸了 ember cli 安装 我已经使用 sudo 安装了 npm 但是在阅读了 npm 上 ember cli 和 sudo 的一些问题后 我按照此处的说明卸载并重新安装https gist github com isaacs
  • 在数据库中存储密码的最佳方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Apache 反向代理的基本身份验证问题

    我想为在 Ubuntu 服务器 12 04 1 上运行的 Apache 反向代理站点添加基本身份验证 网络应用程序是Jenkins http jenkins ci org运行在 Java EE 容器上 我在中添加了以下配置httpd con
  • 使用 Javascript eval() 100% 安全吗?

    我正在编写一个生成 Javascript 代码的 PHP 库 Javascript 代码有许多名为component001 component002 etc 页面通过 AJAX 动态加载 我需要通过 URL 变量传递组件的名称 然后由脚本进
  • Ubuntu 12.04 上的 DeepDive 安装指南

    在拥有以后很多问题 https stackoverflow com questions 22469188 deepdive installation postgresql error安装深潜项目 http deepdive stanford
  • 从 iOS 应用程序内的 Junos Pulse 获取用户凭据

    我正在通过 Junos Pulse 在 iPad 中建立 VPN 连接 以进入我组织的 Intranet 谁能告诉我是否有任何 iOS api 或 SDK 可用于获取在 iOS 应用程序内的 Junos pulse 中输入的用户凭据 Jun
  • 让 Rails 生产在端口 80 上运行

    我正在尝试让我的 Rails 应用程序在生产模式下运行 但遇到了一些困难 我正在使用 Passenger 和 apache 并运行 Ubuntu 12 04 我已经配置和创建了生产数据库 并设置了乘客 状态如下 rvmsudo passen
  • 检查字符串是否是哈希值

    我正在使用 SHA 512 来散列我的密码 当然还有盐 我认为我想要的不可能 但无论如何我们还是要问一下 有没有办法检查字符串是否已经是 SHA 512 或其他算法 哈希值 当用户登录时 我想检查他的密码 如果它仍然是纯文本 则应将其转换为
  • 使用 PBKDF2 和 SHA256 生成 128 位 AES 密钥是否安全?

    我想使用 PBKDF2 和一些加密哈希函数来生成 128 位 AES 密钥 SHA1 也是 128 位 所以我想将其与 PBKDF2 一起使用 但它已损坏 所以我选择使用 SHA256 这是否安全 或者散列大小和生成的密钥大小之间的差异是否
  • 交叉编译armv5,但它创建v7二进制文件

    我设法为arm926ej s创建了一个目标文件我在 qemu 上使用 Debian Arm arm linux gnueabi gcc 4 4 static O c mcpu arm926ej s hello c o hello root
  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre
  • 卷曲选项 -:未知

    我运行此命令在 ubuntu 18 04 上安装更新版本的 nodejs curl sL https deb nodesource com setup 12 x sudo E bash 我收到错误 curl 选项 未知 我在多个系统上尝试过

随机推荐

  • 如何在 Debian 9 上设置 SSH 密钥

    Secure Shell SSH 是一种加密网络协议 用于客户端和服务器之间的安全连接 支持各种身份验证机制 两种最流行的机制是基于密码和基于公钥的身份验证 使用 SSH 密钥比传统的密码身份验证更安全 更方便 在本教程中 我们将描述如何在
  • 什么是 503 服务不可用错误

    浏览网页时最常见的错误之一是 503 服务不可用错误 此消息表明网络服务器遇到技术问题 无法处理请求 本文解释了 503 错误的含义 为什么会收到 HTTP 503 代码以及如何解决这些错误 什么是 HTTP 503 错误 当您打开网页时
  • 如何使用 SSHFS 通过 SSH 挂载远程目录

    SSHFS SSH 文件系统 是基于 FUSE 的文件系统客户端 用于通过 SSH 连接挂载远程目录 SSHFS 使用 SFTP 协议 它是 SSH 的一个子系统 并且在大多数 SSH 服务器上默认启用 与其他网络文件系统协议 例如 NFS
  • Linux 中的 pidof 命令

    pidof是一个命令行实用程序 可让您查找正在运行的程序的进程 ID 在这篇文章中 我们将解释如何使用Linuxpidof命令 如何使用pidof命令 有不同的实现pidof适用于基于 Red Hat 和 Debian 的发行版 在 Red
  • 在 Ubuntu 20.04 上安装 ONLYOFFICE 文档

    ONLYOFFICE Docs 是一个根据 AGPLv3 许可证分发的开源办公套件 它允许处理办公文档 电子表格和演示文稿 以及可填写的表格 您可以将其另存为 PDF 文件 该套件使用 DOCX XLSX 和 PPTX 作为核心格式 保证与
  • 如何在 CentOS 8 上安装 VirtualBox 来宾添加

    虚拟盒子是开源的跨平台虚拟化软件 允许您同时运行多个来宾操作系统 虚拟机 VirtualBox 提供了一组驱动程序和应用程序 VirtualBox Guest Additions 可以安装在来宾操作系统中以扩展来宾操作系统的功能 例如共享文
  • 如何在Linux中检查监听端口(正在使用的端口)

    在对网络连接或特定于应用程序的问题进行故障排除时 首先要检查的事情之一应该是系统上实际使用的端口以及哪个应用程序正在侦听特定端口 本文介绍了如何使用netstat ss and lsof命令来找出哪些服务正在侦听哪些端口 这些说明适用于所有
  • 如何在 CentOS 7 上安装 Nginx

    Nginx 发音engine x是一个免费 开源 高性能的 HTTP 和反向代理服务器 负责处理 Internet 上一些最大网站的负载 Nginx 可以用作独立的 Web 服务器 也可以用作反向代理 for Apache和其他网络服务器
  • 如何在 Debian 10 上安装 Anaconda

    Anaconda 是最流行的 Python R 数据科学和机器学习平台 它用于大规模数据处理 预测分析和科学计算 Anaconda 发行版附带 1 500 多个开源数据包 它还包括 conda 命令行工具和名为 Anaconda Navig
  • 如何在 Linux 中更改用户密码

    在本指南中 我们将解释如何在 Linux 中更改用户密码 我们还将向您展示如何强制用户在下次登录时更改密码 这些说明适用于任何 Linux 发行版 包括 Ubuntu Debian 和 CentOS 介绍 在 Linux 中 您可以使用以下
  • 如何在 Ubuntu 18.04 上安装 Elasticsearch

    Elasticsearch 是一个开源分布式全文搜索和分析引擎 它支持 RESTful 操作 允许您实时存储 搜索和分析大量数据 Elasticsearch 是最流行的搜索引擎之一 为具有复杂搜索要求的应用程序 例如大型电子商务商店和分析应
  • 如何在 CentOS 8 上更改主机名

    通常 主机名是在操作系统安装期间设置的 或者在创建虚拟机时动态分配给虚拟机的 您可能需要更改主机名的原因有很多 最常见的是在创建实例时自动设置主机名 本指南介绍了如何在 CentOS 8 上设置或更改主机名 而无需重新启动系统 先决条件 在
  • 如何在 Debian 9 上安装 VLC 媒体播放器

    VLC 是一个免费的开源多媒体播放器 它是跨平台的 可以播放几乎所有多媒体文件以及 DVD 音频 CD 和不同的流媒体协议 本教程介绍如何在 Debian 9 上安装 VLC 媒体播放器 先决条件 您需要以以下身份登录具有 sudo 访问权
  • 如何在 CentOS 8 上安装和配置 Fail2ban

    所有暴露在互联网上的服务器都面临着恶意软件攻击的风险 例如 如果您有一个连接到公共网络的软件 攻击者可以使用暴力尝试来获取对该应用程序的访问权限 Fail2ban 是一款开源工具 可通过监控服务日志中的恶意活动来帮助保护您的 Linux 计
  • 如何在 Debian 10 Linux 上安装 Apache Cassandra

    Apache Cassandra 是一个免费的开源 NoSQL 数据库 不存在单点故障 它提供线性可扩展性和高可用性 而不会影响性能 许多拥有大型活跃数据集的公司都在使用 Apache Cassandra 包括 Reddit NetFlix
  • 如何在 CentOS 8 上安装 Gitea

    Gitea 是一个用 Go 编写的自托管开源 git 服务器 它配备了存储库文件编辑器 项目问题跟踪 用户管理 通知 内置 wiki 等等 Gitea是一个轻量级应用程序 可以安装在功能较弱的系统上 如果您正在寻找内存占用小得多的 Gitl
  • 如何在Ubuntu 20.04服务器上安装Python 3并设置编程环境

    介绍 对于初学者和经验丰富的开发人员来说 Python 编程语言越来越受欢迎 Python 灵活且用途广泛 在脚本编写 自动化 数据分析 机器学习和后端开发方面具有优势 首次发布于 1991 年 其名称的灵感来自英国喜剧团体 Monty P
  • 如何在 Ubuntu 12.04 上添加交换

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • 使用 Kotlin 的 Android 进度条

    在本教程中 我们将使用 Kotlin 在 Android 应用程序中讨论和实现 ProgressBar 什么是进度条 ProgressBar UI 元素用于在应用程序屏幕上显示进度 我们可以使用 ProgressBar 在应用程序屏幕上显示
  • 如何在 Ubuntu 18.04 上设置 OpenVPN 服务器

    本教程的先前版本由以下人员编写贾斯汀 埃林伍德 介绍 当您的智能手机或笔记本电脑连接到不受信任的网络 例如酒店或咖啡店的 WiFi 时 想要安全可靠地访问互联网吗 A虚拟专用网络 VPN 允许您安全地穿越不受信任的网络 就像在专用网络上一样