介绍
虚拟私人网络(https://en.wikipedia.org/wiki/Virtual_private_network)(VPN)允许您穿过不受信任的网络,就像您在私人网络上一样。
当与 HTTPS 连接相结合时,此设置允许您保护无线登录和交易,您可以绕过地理限制和审查,并保护您的位置和未加密的 HTTP 流量免受不受信任的网络的影响。
OpenVPN是一个完整的,开源的运输层安全(TLS)VPN解决方案,可容纳各种配置. 在本教程中,您将在CentOS 8服务器上设置OpenVPN,然后将其配置为从客户机访问。
<$>[注] 注: 如果您打算在DigitalOcean Droplet上设置一个OpenVPN服务器,请注意,像许多托管提供商一样,我们会收取带宽过期费用。
请参阅此页面(https://www.digitalocean.com/docs/accounts/billing/bandwidth/)以获取更多信息。
前提条件
要遵循本教程,您将需要:
- 一个 CentOS 8 服务器具有 sudo 非 root 用户和启用防火墙。 要设置此功能,您可以遵循我们的 初始服务器设置与 CentOS 8 教程。 在本指南中,我们将将此称为 OpenVPN 服务器。
- 一个独立的 CentOS 8 服务器设置为私人证书权威(CA),我们将在本指南中称为 CA 服务器。 在本服务器上执行 初始服务器设置指南的步骤后,您可以遵循我们关于 如何在 CentOS 8 上设置和配置证书权威(CA) 的指南中的步骤 1 到 3 来实现这一目标。 _MK
<$>[注] **注:**虽然在技术上可以使用你的OpenVPN服务器或本地机器作为你的CA,但这并不建议,因为它会打开你的VPN到一些安全漏洞。每 官方OpenVPN文档,你应该把你的CA放在一个专门用于进口和签署证书请求的独立机器上。
此外,您还需要一个客户端机器,您将使用它连接到您的OpenVPN服务器。 在本指南中,我们将称之为OpenVPN客户端。
有了这些前提条件,您可以开始在CentOS 8上设置和配置OpenVPN服务器。
请注意,如果您在配置这些服务器时禁用密码身份验证,您可能会在本指南晚些时候在这些服务器之间传输文件时遇到困难。 为了解决此问题,您可以在每个服务器上重新启用密码身份验证。 或者,您可以为每个服务器生成一个SSH密钥对,然后将OpenVPN服务器的公共SSH密钥添加到CA机器的authorized_keys
文件中,反之亦然。
步骤 1 — 安装 OpenVPN 和 Easy-RSA
本教程的第一步是安装OpenVPN和Easy-RSA。Easy-RSA是一个公共密钥基础设施(PKI)管理工具,您将在OpenVPN服务器上使用它来生成证书请求,然后在CA服务器上验证并登录。
然而,OpenVPN和Easy-RSA在CentOS 8默认情况下不可用,因此您需要启用Extra Packages for Enterprise Linux(EPEL)存储库。EPEL由Fedora项目管理,包含非标准但受欢迎的Fedora、CentOS和其他使用RPM包格式的Linux发行版包。登录您的OpenVPN服务器作为您在初始设置步骤中创建的非 root sudo用户,并运行以下操作:
1[environment second]
2sudo dnf install epel-release
3sudo dnf install openvpn easy-rsa
接下来,你需要在OpenVPN服务器上创建一个新的目录,作为你的非根用户称为~/easy-rsa
:
1[environment second]
2mkdir ~/easy-rsa
现在,您需要从包装安装到您刚刚创建的 ~/easy-rsa
目录的 easyrsa
脚本中创建一个 symlink:
1[environment second]
2ln -s /usr/share/easy-rsa/3/* ~/easy-rsa/
<$>[注]
注: 虽然其他指南可能会指示您将easy-rsa
包文件复制到您的PKI目录,但本教程采用了simlink方法,因此对easy-rsa
包的任何更新都会自动反映在您的PKI的脚本中。
最后,确保目录的所有者是您的非 root sudo 用户,并使用chmod
限制对该用户的访问:
1[environment second]
2sudo chown sammy ~/easy-rsa
3chmod 700 ~/easy-rsa
一旦这些程序被安装并移动到您的系统的正确位置,下一步是在OpenVPN服务器上创建公共密钥基础设施(PKI),以便您可以请求和管理连接到您的VPN的客户端和其他服务器的TLS证书。
步骤 2 — 创建 OpenVPN 的 PKI
在您创建 OpenVPN 服务器的私钥和证书之前,您需要在您的 OpenVPN 服务器上创建一个本地的公共钥匙基础设施目录,您将使用此目录来管理服务器和客户端的证书请求,而不是直接在 CA 服务器上进行。
要在您的 OpenVPN 服务器上构建一个 PKI 目录,您需要填写一个名为vars
的文件,其中包含一些默认值。 首先,您将cd
放入easy-rsa
目录中,然后使用您喜爱的文本编辑器创建和编辑vars
文件。
与CentOS 8一起提供的默认文本编辑器是vi
。vi
是一个极其强大的文本编辑器,但对于缺乏经验的用户来说,它可能有点杂,您可能想安装一个更用户友好的编辑器,例如nano
,以便在CentOS 8服务器上编辑配置文件:
1[environment second]
2sudo dnf install nano
当您被要求安装nano
,请输入y
以继续安装步骤. 现在您已经准备好编辑vars
文件:
1[environment second]
2cd ~/easy-rsa
3nano vars
一旦文件被打开,粘贴在以下两行:
1[environment second]
2[label ~/easy-rsa/vars]
3set_var EASYRSA_ALGO "ec"
4set_var EASYRSA_DIGEST "sha512"
这些行将确保您的私钥和证书请求配置以使用现代的形曲线加密(ECC)来生成密钥和安全的签名为您的客户端和OpenVPN服务器。
将您的 OpenVPN 和 CA 服务器配置为使用 ECC 意味着当客户端和服务器尝试建立一个共享的对称密钥时,他们可以使用 Elliptic Curve 算法进行交换。
<$>[注] **背景:**当客户端连接到OpenVPN时,他们使用不对称的加密(也称为公共/私钥)来执行TLS握手(https://www.cloudflare.com/learning/ssl/what-happens-in-a-tls-handshake/).然而,当发送加密VPN流量时,服务器和客户端使用对称的加密,也称为共享密钥加密。
与非对称加密相比,具有对称加密的计算覆盖率要少得多:使用的数字要小得多,而现代CPU 集成执行优化对称加密操作的指示 为了从非对称加密切换到对称加密,OpenVPN服务器和客户端将使用Elliptic Curve Diffie-Hellman(ECDH)算法(https://en.wikipedia.org/wiki/Elliptic_curve_Diffie-Hellman)尽快同意共享的秘密密密钥。
一旦你填充了vars
文件,你可以继续创建PKI目录。 要做到这一点,用init-pki
选项运行easyrsa
脚本. 虽然你已经在CA服务器上运行了这个命令作为前提的一部分,但你必须在这里运行它,因为你的OpenVPN服务器和CA服务器有不同的PKI目录:
1[environment second]
2./easyrsa init-pki
请注意,在您的 OpenVPN 服务器上,无需创建证书授权机构,您的 CA 服务器是唯一负责验证和签署证书的。
在 OpenVPN 服务器上初始化 PKI 后,您已经准备好进入下一步,即创建 OpenVPN 服务器证书请求和私钥。
步骤 3 – 创建 OpenVPN 服务器证书请求和私钥
现在你的OpenVPN服务器已经安装了所有先决条件,下一步就是在OpenVPN服务器上生成一个私钥和证书签名请求(CSR)。
要开始,请导航到您的OpenVPN服务器上的~/easy-rsa
目录,作为您的非根用户:
1[environment second]
2cd ~/easy-rsa
现在你会用gen-req
选项打电话给easyrsa
,然后为机器提供一个常用名称(CN)。 CN 可以是你喜欢的任何东西,但可以有助于使它具有描述性。 在本教程中,OpenVPN 服务器的 CN 将是服务器
。 请确保包括nopass
选项。
<$>[注]
注: 如果您在这里选择了服务器
以外的名称,您将不得不调整下面的一些说明。例如,当您将生成的文件复制到/etc/openvpn
目录时,您将不得不更换正确的名称。
1[environment second]
2./easyrsa gen-req server nopass
1[environment second]
2[secondary_label Output]
3Common Name (eg: your user, host, or server name) [server]:
4
5Keypair and certificate request completed. Your files are:
6req: /home/sammy/easy-rsa/pki/reqs/server.req
7key: /home/sammy/easy-rsa/pki/private/server.key
这将为服务器创建一个私钥和一个名为server.req
的证书请求文件,将服务器密钥复制到/etc/openvpn/server
目录:
1[environment second]
2sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/
完成这些步骤后,您已成功为您的 OpenVPN 服务器创建了一个私钥,您还为 OpenVPN 服务器生成了一份证书签名请求, CSR 现在已经准备好由您的 CA 签名。
步骤 4 – 签署 OpenVPN 服务器的证书请求
在之前的步骤中,您为OpenVPN服务器创建了证书签名请求(CSR)和私钥,现在CA服务器需要了解服务器
证书并验证它。
在 OpenVPN 服务器上,作为您的非根用户,使用 SCP 或其他传输方法将server.req
证书请求复制到 CA 服务器进行签名:
1[environment second]
2scp /home/sammy/easy-rsa/pki/reqs/server.req sammy@your_ca_server_ip:/tmp
现在登录 CA 服务器,作为拥有您创建 PKI 的easy-rsa
目录的非根用户。
1[environment third]
2cd ~/easy-rsa
3./easyrsa import-req /tmp/server.req server
1[environment third]
2[secondary_label Output]
3. . .
4The request has been successfully imported with a short name of: server
5You may now use this name to perform signing operations on this request.
接下来,通过运行easyrsa
脚本来签名请求,然后是sign-req
选项,然后是请求类型和常用名称。请求类型可以是客户端
或服务器
。
1[environment third]
2./easyrsa sign-req server server
在输出中,您将被要求验证请求来自可信来源. 输入是
然后按输入
来确认:
1[environment third]
2[secondary_label Output]
3You are about to sign the following certificate.
4Please check over the details shown below for accuracy. Note that this request
5has not been cryptographically verified. Please be sure it came from a trusted
6source or that you have verified the request checksum with the sender.
7
8Request subject, to be signed as a server certificate for 3650 days:
9
10subject=
11commonName = server
12
13Type the word 'yes' to continue, or any other input to abort.
14Confirm request details: yes
15. . .
16Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt
请注意,如果您加密了CA私钥,您将在此时被要求提供密码。
完成这些步骤后,您使用 CA 服务器的私钥签署了 OpenVPN 服务器的证书请求,结果的 server.crt
文件包含 OpenVPN 服务器的公共加密密钥,以及 CA 服务器的签名。
要完成配置证书,请将server.crt
和ca.crt
文件从CA服务器复制到OpenVPN服务器:
1[environment third]
2scp pki/issued/server.crt sammy@your_vpn_server_ip:/tmp
3scp pki/ca.crt sammy@your_vpn_server_ip:/tmp
现在回到您的OpenVPN服务器上,将文件从/tmp
复制到/etc/openvpn/server
:
1[environment second]
2sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server
现在,您的 OpenVPN 服务器几乎已经准备好接受连接,在下一步,您将执行一些额外的步骤来提高服务器的安全性。
步骤 5 – 配置 OpenVPN 加密材料
对于一个额外的安全层,我们将添加一个额外的共享秘密密密钥,服务器和所有客户端将使用(OpenVPN的tls-crypt
指令)(https://build.openvpn.net/doxygen/group__tls__crypt.html#details)。这个选项被用来掩盖 TLS 证书,当服务器和客户端最初相互连接时使用。
此选项将有助于确保您的 OpenVPN 服务器能够应对未经身份验证的流量、端口扫描和拒绝服务攻击,这可能会连接服务器资源。
要生成预共享的tls-crypt
密钥,请在~/easy-rsa
目录中在OpenVPN服务器上运行以下操作:
1[environment second]
2cd ~/easy-rsa
3openvpn --genkey --secret ta.key
结果将是一个名为 ta.key
的文件. 将其复制到 /etc/openvpn/server/
目录:
1[environment second]
2sudo cp ta.key /etc/openvpn/server
有了这些文件在OpenVPN服务器上,您可以为用户创建客户端证书和关键文件,您将使用它们连接到VPN。
步骤 6 – 生成客户证书和密钥对
虽然您可以在客户端机器上生成私钥和证书请求,然后将其发送到CA进行签名,但本指南概述了在OpenVPN服务器上生成证书请求的过程。这种方法的好处是,我们可以创建一个脚本,将自动生成客户端配置文件,其中包含所有所需的密钥和证书。
我们将为本指南生成单个客户端密钥和证书对. 如果您有多个客户端,您可以对每个客户端重复此过程. 请注意,但是,您需要为每个客户端传递一个独特的名称值。
通过在您的主目录中创建一个目录结构来开始存储客户端证书和关键文件:
1[environment second]
2mkdir -p ~/client-configs/keys
由于您将将客户的证书 / 密钥对和配置文件存储在此目录中,您现在应该作为安全措施锁定其权限:
1[environment second]
2chmod -R 700 ~/client-configs
接下来,返回 EasyRSA 目录并运行easyrsa
脚本,使用gen-req
和nopass
选项,以及客户端的常用名称:
1[environment second]
2cd ~/easy-rsa
3./easyrsa gen-req client1 nopass
然后,将「client1.key」文件复制到您之前创建的 ~/client-configs/keys/
目录:
1[environment second]
2cp pki/private/client1.key ~/client-configs/keys/
接下来,使用安全方法将client1.req
文件传输到您的 CA 服务器:
1[environment second]
2scp pki/reqs/client1.req sammy@your_ca_server_ip:/tmp
现在登录您的 CA 服务器,然后导航到 EasyRSA 目录,并导入证书请求:
1[environment third]
2cd ~/easy-rsa
3./easyrsa import-req /tmp/client1.req client1
接下来,与上一步中的服务器相同的方式签署请求,但这一次,请确保指定客户端
请求类型:
1[environment third]
2./easyrsa sign-req client client1
当被提示时,输入是
来确认您打算签署证书请求,并且它来自可信来源:
1[environment third]
2[secondary_label Output]
3Type the word 'yes' to continue, or any other input to abort.
4Confirm request details: yes
再次,如果您加密了CA密钥,您将被要求在这里提供您的密码。
这将创建一个名为client1.crt
的客户端证书文件。
1[environment third]
2scp pki/issued/client1.crt sammy@your_server_ip:/tmp
在您的 OpenVPN 服务器上,将客户端证书复制到 ~/client-configs/keys/
目录:
1[environment second]
2cp /tmp/client1.crt ~/client-configs/keys/
接下来,将ca.crt
和ta.key
文件复制到~/client-configs/keys/
目录,并为您的 sudo 用户设置相应的权限:
1[environment second]
2cp ~/easy-rsa/ta.key ~/client-configs/keys/
3sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
4sudo chown sammy.sammy ~/client-configs/keys/*
因此,您的服务器和客户端的证书和密钥都被生成并存储在您的OpenVPN服务器上的适当目录中。
步骤 7 – 配置 OpenVPN
像许多其他广泛使用的开源工具一样,OpenVPN有许多可用的配置选项来定制您的服务器以满足您的特定需求. 在本节中,我们将提供有关如何根据本软件文档中包含的样本配置文件之一设置OpenVPN服务器配置的说明。
首先,复制样本 server.conf
文件作为您自己的配置文件的起点:
1[environment second]
2sudo cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/
打开新文件以使用您选择的文本编辑器进行编辑. 我们将在我们的示例中使用nano:
1[environment second]
2sudo nano /etc/openvpn/server/server.conf
我们需要在这个文件中更改几行。 首先,通过搜索tls-auth
指令来找到配置的HMAC
部分。 这个行应该没有评论。 通过在行开始时添加一个;
来评论它。 然后在它之后添加一个新的行,仅包含值的tls-crypt ta.key
:
1[environment second]
2[label /etc/openvpn/server.conf]
3;tls-auth ta.key 0 # This file is secret
4tls-crypt ta.key
接下来,通过寻找加密
线来查找加密的部分。默认值为AES-256-CBC
,但是AES-256-GCM
加密提供了更好的加密水平,性能,并且在最新的OpenVPN客户端中得到良好的支持。
1[environment second]
2[label /etc/openvpn/server.conf]
3;cipher AES-256-CBC
4cipher AES-256-GCM
就在这行之后,添加一个auth
指令来选择HMAC消息消化算法,因此,SHA256
是一个很好的选择:
1[environment second]
2[label /etc/openvpn/server.conf]
3auth SHA256
接下来,找到包含dh
指令的行,该行定义了Diffie-Hellman参数。由于我们已经配置了所有证书以使用Elliptic Curve Cryptography,所以不需要一个Diffie-Hellman种子文件。评论现有的行,它看起来像dh dh2048.pem
或dh.pem
。Diffie-Hellman密钥的文件名称可能与示例服务器配置文件中列出的不同。然后添加一个后一个行,内容为dh none
:
1[environment second]
2[label /etc/openvpn/server.conf]
3;dh dh2048.pem
4dh none
接下来,我们希望OpenVPN在启动后运行没有特权,所以我们需要告诉它与用户和组 nobody一起运行。
1[environment second]
2[label /etc/openvpn/server.conf]
3user nobody
4group nobody
(可选)推动 DNS 更改,通过 VPN 重定向所有流量
上面的设置将创建客户端和服务器之间的VPN连接,但不会强迫任何连接使用隧道. 如果您希望使用VPN通过VPN路由所有客户端流量,您可能希望将一些额外的设置推到客户端计算机。
要开始,请查找并删除含有推送
的行,这样做会告诉您的客户端通过您的OpenVPN服务器重定向所有流量。请注意,启用此功能可能会导致与其他网络服务(如SSH)的连接问题:
1[environment second]
2[label /etc/openvpn/server.conf]
3push "redirect-gateway def1 bypass-dhcp"
就在这行下面,找到dhcp-option
部分. 再次,从两行开始删除;
以不评论它们:
1[environment second]
2[label /etc/openvpn/server.conf]
3push "dhcp-option DNS 208.67.222.222"
4push "dhcp-option DNS 208.67.220.220"
这些行会告诉您的客户端在列出的 IP 地址上使用免费的 OpenDNS resolvers。
这将帮助客户重新配置他们的DNS设置,以便使用VPN隧道作为默认网关。
(可选) 调整端口和协议
默认情况下,OpenVPN服务器使用端口1194
和UDP协议来接受客户端连接. 如果您需要使用不同的端口,因为客户端可能存在的限制性网络环境,您可以更改端口
选项。
要更改 OpenVPN 以倾听 443 端口,打开 server.conf
文件,然后找到看起来像这样的行:
1[environment second]
2[label /etc/openvpn/server.conf]
3port 1194
编辑它以便端口为 443:
1[environment second]
2[label /etc/openvpn/server.conf]
3# Optional!
4port 443
如果是这样,请在端口
线下找到proto
线,并将协议从udp
更改为tcp
:
1[environment second]
2[label /etc/openvpn/server.conf]
3# Optional!
4proto tcp
如果您将协议转换为 TCP,则需要将明确退出通知
指令的值从1
更改为0
,因为该指令仅被 UDP 使用。
查找文件末尾的明确退出通知
行,并将值更改为0
:
1[environment second]
2[label /etc/openvpn/server.conf]
3# Optional!
4explicit-exit-notify 0
如果您不需要使用不同的端口和协议,最好保持这些设置不变。
(可选)指向非默认凭证
如果您早些时候在./easyrsa gen-req server
命令中选择了不同的名称,则在server.conf
配置文件中修改cert
和key
行,以便它们指向相应的.crt
和.key
文件。
1[label /etc/openvpn/server.conf]
2cert server.crt
3key server.key
完成后,保存并关闭文件。
您已经完成了配置您的 OpenVPN 一般设置,在下一步,我们将定制服务器的网络选项。
第8步:调整OpenVPN服务器网络配置
有服务器网络配置的一些方面需要调整,以便OpenVPN能够正确地通过VPN路由流量. 其中第一个是 IP forwarding,用于确定IP流量应该路由的地方的方法. 这对于服务器提供的VPN功能至关重要。
要调整 OpenVPN 服务器的默认 IP 转发设置,请使用nano
或您偏好的编辑器打开 `/etc/sysctl.conf’ 文件:
1[environment second]
2sudo nano /etc/sysctl.conf
然后在文件的顶部添加以下行:
1[environment second]
2[label /etc/sysctl.conf]
3net.ipv4.ip_forward = 1
保存并关闭文件,当你完成。
要读取文件并加载当前会话的新值,键入:
1[environment second]
2sudo sysctl -p
1[environment second]
2[secondary_label Output]
3net.ipv4.ip_forward = 1
现在,您的OpenVPN服务器将能够将从一个以太网设备传输的流量传输到另一个以太网设备。此设置确保服务器可以通过其其他物理以太网设备直接从虚拟VPN接口连接的客户端传输流量。
在下一步中,您需要配置一些防火墙规则,以确保流量流向和流向您的OpenVPN服务器。
第9步:设置防火墙
到目前为止,您已经在您的服务器上安装了 OpenVPN,配置了它,并生成了客户端访问VPN所需的密钥和证书,但您尚未向OpenVPN提供有关从客户端发送入口网络流量的任何说明。
假设你在本教程开始时遵循了前提条件,你应该已经安装了‘firewalld’并在你的服务器上运行。为了允许OpenVPN通过防火墙,你需要知道你活跃的‘firewalld’区域是什么。
1[environment second]
2sudo firewall-cmd --get-active-zones
1[environment second]
2[secondary_label Output]
3public
4Interfaces: eth0
如果您看不到列出tun0
接口的可信
区域,请执行以下命令将VPN设备添加到该区域:
1[environment second]
2sudo firewall-cmd --zone=trusted --add-interface=tun0
3sudo firewall-cmd --permanent --zone=trusted --add-interface=tun0
接下来,将openvpn
服务添加到firewalld
允许的服务列表中,然后通过再次运行命令而使该设置永久化,但添加了--永久
选项:
1[environment second]
2sudo firewall-cmd --permanent --add-service openvpn
3sudo firewall-cmd --permanent --zone=trusted --add-service openvpn
要在防火墙上应用更改,运行:
1[environment second]
2sudo firewall-cmd --reload
您现在可以通过以下命令检查是否正确添加了服务:
1[environment second]
2sudo firewall-cmd --list-services --zone=trusted
1[environment second]
2[secondary_label Output]
3openvpn
接下来,我们将为防火墙添加一个伪装规则. 伪装允许您的OpenVPN服务器将您的OpenVPN客户端的地址翻译成服务器的公共地址,然后对返回客户端的流量进行反转。
使用以下命令添加伪装规则:
1[environment second]
2sudo firewall-cmd --add-masquerade
3sudo firewall-cmd --add-masquerade --permanent
您可以通过此命令检查是否正确添加了面具:
1[environment second]
2sudo firewall-cmd --query-masquerade
1[environment second]
2[secondary_label Output]
3yes
您可以这样做,首先创建一个壳变量(在我们的示例中‘DEVICE’),它将代表您的服务器使用的主要网络接口,然后使用该变量永久添加路由规则:
1[environment second]
2DEVICE=$(ip route | awk '/^default via/ {print $5}')
3sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $DEVICE -j MASQUERADE
请确保重新加载firewalld
,以便所有更改生效:
1[environment second]
2sudo firewall-cmd --reload
带有永久性
旗帜的命令将确保规则在重启时仍然存在。防火墙-cmd – 重加
命令确保对防火墙的所有未完成的更改都得到应用。
第10步:启动OpenVPN
OpenVPN 作为一个 systemd 服务运行,所以我们可以使用systemctl
来管理它. 我们将配置 OpenVPN 以便在启动时启动,这样您可以随时连接到您的 VPN,只要您的服务器在运行。
1[environment second]
2sudo systemctl -f enable [email protected]
然后启动OpenVPN服务:
1[environment second]
2sudo systemctl start [email protected]
您应该在输出中看到活跃(运行)
:
1[environment second]
2sudo systemctl status [email protected]
1[environment second]
2[secondary_label Output]
3● openvpn-server@server.service - OpenVPN service for server
4Loaded: loaded (/usr/lib/systemd/system/openvpn-server@.service; enabled; vendor preset: disabled)
5Active: active (running) since Tue 2020-04-07 02:32:07 UTC; 1min 52s ago
6Docs: man:openvpn(8)
7https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
8https://community.openvpn.net/openvpn/wiki/HOWTO
9Main PID: 15868 (openvpn)
10Status: "Initialization Sequence Completed"
11Tasks: 1 (limit: 5059)
12Memory: 1.2M
13CGroup: /system.slice/system-openvpn\x2dserver.slice/openvpn-server@server.service
14└─15868 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --cipher AES-256-GCM --ncp-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC:AES-128-CBC:BF-CBC --config server.conf
15. . .
我们已经完成了OpenVPN的服务器侧配置,接下来,您将配置客户端机器并连接到OpenVPN服务器。
步骤 11 – 创建客户端配置基础设施
创建 OpenVPN 客户端的配置文件可能有些涉及,因为每个客户端都必须有自己的配置,每个客户端都必须与服务器配置文件中描述的设置相匹配。而不是写一个只能在一个客户端上使用的单个配置文件,此步骤概述了构建一个客户端配置基础设施的过程,您可以使用它来生成配置文件。
开始创建一个新的目录,您将存储客户端配置文件在您之前创建的客户端配置
目录中:
1[environment second]
2mkdir -p ~/client-configs/files
接下来,将示例客户端配置文件复制到客户端配置
目录中,用作您的基本配置:
1[environment second]
2cp /usr/share/doc/openvpn/sample/sample-config-files/client.conf ~/client-configs/base.conf
使用nano
或您喜爱的文本编辑器打开此新文件:
1[environment second]
2nano ~/client-configs/base.conf
在内部,找到远程
指令,指向客户端您的OpenVPN服务器地址 - 您的OpenVPN服务器的公共IP地址. 如果您决定更改OpenVPN服务器正在收听的端口,您还需要更改1194
到您选择的端口:
1[environment second]
2[label ~/client-configs/base.conf]
3. . .
4# The hostname/IP and port of the server.
5# You can have multiple remote entries
6# to load balance between the servers.
7remote your_server_ip 1194
8. . .
请确保协议匹配您在服务器配置中使用的值:
1[environment second]
2[label ~/client-configs/base.conf]
3proto udp
接下来,通过在每个行开始时删除 ;
符号来解析用户
和组
指令:
1[environment second]
2[label ~/client-configs/base.conf]
3# Downgrade privileges after initialization (non-Windows only)
4user nobody
5group nobody
查找设置ca
,cert
和key
的指令. 评论这些指令,因为您很快就会在文件本身中添加证件和密钥:
1[environment second]
2[label ~/client-configs/base.conf]
3# SSL/TLS parms.
4# See the server config file for more
5# description. It's best to use
6# a separate .crt/.key file pair
7# for each client. A single ca
8# file can be used for all clients.
9;ca ca.crt
10;cert client.crt
11;key client.key
同样,评论tls-auth
指令,因为您将直接将ta.key
添加到客户端配置文件中(服务器设置为使用tls-crypt
):
1[environment second]
2[label ~/client-configs/base.conf]
3# If a tls-auth key is used on the server
4# then every client must also have the key.
5;tls-auth ta.key 1
镜像您在 /etc/openvpn/server/server.conf’ 文件中设置的
cipher和
auth`设置:
1[environment second]
2[label ~/client-configs/base.conf]
3cipher AES-256-GCM
4auth SHA256
接下来,在文件中的某个地方添加钥匙方向
指令. 您 必须将此设置为1
以便VPN在客户端机器上正常运作:
1[environment second]
2[label ~/client-configs/base.conf]
3key-direction 1
最后,添加几个 评论出来的行. 虽然你可以将这些指令包含在每个客户端配置文件中,但你只需要为 Linux 客户端启用这些指令,这些客户端配有 `/etc/openvpn/update-resolv-conf’ 文件。
1[environment second]
2[label ~/client-configs/base.conf]
3; script-security 2
4; up /etc/openvpn/update-resolv-conf
5; down /etc/openvpn/update-resolv-conf
如果您的客户端运行的是 Linux,并且有一个 /etc/openvpn/update-resolv-conf
文件,在生成后,请从客户端配置文件中删除这些行。
保存并关闭文件,当你完成。
接下来,我们将创建一个脚本,将您的基础配置与相关证书,密钥和加密文件编译,然后将生成的配置放置在~/client-configs/files
目录中。
1[environment second]
2nano ~/client-configs/make_config.sh
内部,添加以下内容:
1[environment second]
2[label ~/client-configs/make_config.sh]
3#!/bin/bash
4
5# First argument: Client identifier
6
7KEY_DIR=~/client-configs/keys
8OUTPUT_DIR=~/client-configs/files
9BASE_CONFIG=~/client-configs/base.conf
10
11cat ${BASE_CONFIG} \
12<(echo -e '<ca>') \
13${KEY_DIR}/ca.crt \
14<(echo -e '</ca>\n<cert>') \
15${KEY_DIR}/${1}.crt \
16<(echo -e '</cert>\n<key>') \
17${KEY_DIR}/${1}.key \
18<(echo -e '</key>\n<tls-crypt>') \
19${KEY_DIR}/ta.key \
20<(echo -e '</tls-crypt>') \
21> ${OUTPUT_DIR}/${1}.ovpn
保存并关闭文件,当你完成。
在继续之前,请确保通过键入标记此文件为可执行:
1[environment second]
2chmod 700 ~/client-configs/make_config.sh
此脚本将创建您创建的 base.conf
文件的副本,收集您为客户端创建的所有证书和关键文件,提取其内容,将其附加到基础配置文件的副本中,并将所有内容导出到新的客户端配置文件中。这意味着,而不是单独管理客户端的配置,证书和关键文件,所有所需的信息都存储在一个地方。使用这种方法的好处是,如果您需要在未来添加客户端,您可以运行此脚本,快速创建一个新的配置文件,并确保所有重要的信息都存储在一个单一的易于访问的位置。
请注意,每次你添加一个新客户端,你需要为它生成新的密钥和证书,然后你可以运行这个脚本并生成它的配置文件。
步骤 12 – 生成客户端配置
如果您跟随了指南,您在步骤 6 中分别创建了名为client1.crt
和client1.key
的客户端证书和密钥,您可以通过进入您的~/client-configs
目录并运行您在上一步结束时创建的脚本来生成这些身份证件的配置文件:
1[environment second]
2cd ~/client-configs
3./make_config.sh client1
这将创建一个名为client1.ovpn
的文件在您的~/client-configs/files
目录中:
1[environment second]
2ls ~/client-configs/files
1[environment second]
2[secondary_label Output]
3client1.ovpn
您需要将此文件传输到您打算作为客户端使用的设备,例如,这可能是您的本地计算机或移动设备。
虽然用于实现此转移的确切应用程序将取决于您的设备的操作系统和您的个人偏好,但一个可靠和安全的方法是使用SFTP(SSH文件传输协议)或SCP(安全副本)在后端。
以下是一個例子 SFTP 命令,您可以從本地電腦(macOS 或 Linux)執行。這將將我們在最後一步中創建的「client1.ovpn」檔案複製到您的主目錄:
1[environment local]
2sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/
以下是几个工具和教程来安全地将文件从OpenVPN服务器传输到本地计算机:
步骤 13 – 安装客户端配置
本节涵盖了如何在 Windows、macOS、Linux、iOS 和 Android 上安装客户端 VPN 配置文件. 这些客户端指令并不相互依赖,因此请轻松跳过适用于您的设备的任何内容。
对于本教程,这意味着连接被命名为client1.ovpn
,与您生成的第一个客户端文件一致。
窗口
- 安装 *
請從 OpenVPN 的下載頁面下載 Windows 的 OpenVPN 客戶端應用程式。
<$>[注意] 注意:OpenVPN需要管理权限来安装。
安装 OpenVPN 后,将.ovpn 文件复制到:
1[environment local]
2C:\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软件。
在Ubuntu或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 客户端配置传输到设备上,请直接连接到计算机。
The process of completing the transfer with iTunes is outlined here. Open iTunes on the computer and click on iPhone > apps. Scroll down to the bottom to the File Sharing section and click the OpenVPN app. The blank window to the right, OpenVPN Documents, is for sharing files. Drag the .ovpn
file to the OpenVPN Documents window.
现在在 iPhone 上启动 OpenVPN 应用程序. 您将收到通知,新配置文件已准备好导入。
Connecting
OpenVPN现在已经准备好与新配置文件一起使用。通过将 Connect按钮滑动到 On位置来启动连接。
<$>[注意] 注意:在 设置下的VPN交换机不能用来连接到VPN. 如果你尝试,你将收到通知只使用OpenVPN应用程序连接。
安卓
- 安装 *
搜索并安装 Android OpenVPN Connect,是官方的Android OpenVPN客户端应用程序。
您可以通过 USB 将 Android 设备连接到您的计算机并复制文件来传输 .ovpn
配置文件. 或者,如果您有 SD 卡阅读器,您可以删除设备的 SD 卡,将该配置文件复制到其上,然后将该卡重新插入到 Android 设备中。
启动OpenVPN应用程序,然后点击文件
菜单来导入配置文件。
然后导航到保存的配置文件的位置(屏幕截图使用 /storage/emulated/0/openvpn
)并选择您的 .ovpn
文件。
连接 一旦添加了个人资料,你会看到这样的屏幕:
To connect, tap the toggle button close to the profile you want to use. You'll see real time stats of your connection and traffic being routed through your OpenVPN server:
要切断连接,只需再次点击左上角的切换按钮,您将被要求确认您想要切断连接到您的VPN。
步骤 14 — 测试您的VPN连接(可选)
<$>[注]
**注:**此方法来测试您的VPN连接只会有效,如果您在编辑OpenVPN的server.conf
文件时选择在第7步中通过VPN路由所有流量。
一旦一切都安装完毕,一个简单的检查就证实一切正常工作了. 没有启用VPN连接,请打开浏览器,然后转到 DNSLeakTest。
该网站将返回由您的互联网服务提供商分配的IP地址,并显示给世界其他地方. 要通过相同的网站检查您的DNS设置,请单击 扩展测试,它将告诉您正在使用的DNS服务器。
现在将OpenVPN客户端连接到Droplet的VPN,并更新浏览器。 现在应该出现一个完全不同的IP地址(你的VPN服务器的IP地址),这就是你向世界展示的方式。 再次,DNSLeakTest(https://www.dnsleaktest.com) Extended Test将检查你的DNS设置,并确认你现在正在使用VPN推出的DNS解析器。
步骤 15 – 撤销客户证书
有时,您可能需要撤销客户端证书,以防止进一步访问 OpenVPN 服务器。
要做到这一点,请遵循 如何在 CentOS 8 上设置和配置证书授权权的前提教程中的示例,请参阅 Revoking a Certificate 部分。
一旦您使用这些指示撤销了客户端的证书,您将需要将生成的crl.pem文件复制到您的OpenVPN服务器中在/etc/openvpn/server
目录:
1[environment second]
2sudo cp /tmp/crl.pem /etc/openvpn/server/
接下来,打开 OpenVPN 服务器配置文件:
1[environment second]
2sudo nano /etc/openvpn/server/server.conf
在文件底部,添加crl-verify
选项,该选项将指示OpenVPN服务器检查我们每次尝试连接时创建的证书撤销列表:
1[environment second]
2[label /etc/openvpn/server/server.conf]
3crl-verify crl.pem
保存并关闭文件。
最后,重新启动 OpenVPN 来执行证书撤销:
1[environment second]
2sudo systemctl restart [email protected]
客户端不再能够使用旧身份证成功连接到服务器。
若要取消额外的客户,请遵循此过程:
- 用
./easyrsa revoke client_name
命令 取消证书 2. 生成新的 CRL - 将新的
crl.pem
文件传输到您的 OpenVPN 服务器,并将其复制到/etc/openvpn/server/
目录,以重写旧列表。 - 重新启动 OpenVPN 服务。
您可以使用此过程撤销您之前为您的服务器发行的任何证书。
结论
您现在应该有一个完全运行的虚拟私人网络在您的OpenVPN服务器上运行,您可以浏览网络和下载内容,而不必担心恶意行为者跟踪您的活动。
您可以采取若干步骤来进一步定制 OpenVPN 安装,例如配置客户端自动连接到 VPN 或配置客户端特定的规则和访问策略。
要配置更多的客户端,您只需按照步骤 6和 11-13对每个额外的设备进行配置。