无论您是想在连接不可信的公共 Wi-Fi 网络时安全可靠地访问互联网、绕过地理限制内容还是允许您的同事在远程工作时安全地连接到您的公司网络,使用 VPN 都是最佳解决方案。
VPN 允许您连接到远程 VPN 服务器,使您的连接加密且安全,并通过保持流量数据的私密性来匿名上网。
您可以选择许多商业 VPN 提供商,但您永远无法真正确定提供商没有记录您的活动。最安全的选择是设置您自己的 VPN 服务器。
本教程将引导您通过在 Ubuntu 18.04 上安装和配置 OpenVPN 来完成设置自己的 VPN 服务器的过程。我们还将向您展示如何生成客户端证书和创建配置文件
OpenVPN 是一个功能齐全的开源安全套接字层 (SSL) VPN 解决方案。它使用 SSL/TLS 协议实现 OSI 第 2 层或第 3 层安全网络扩展。
先决条件#
要完成本教程,您将需要:
-
须藤访问到 Ubuntu 18.04 服务器来托管您的 OpenVPN 实例。
- 服务器应该有一个基本的UFW防火墙配置。
- 单独的专用机器作为您的 CA(证书颁发机构)。如果您不想为 CA 使用专用计算机,您可以在 OpenVPN 服务器或本地计算机上构建 CA。完成 CA 构建后,建议将 CA 目录移动到安全或离线的位置。
本教程假设 CA 位于单独的 Ubuntu 18.04 计算机上。如果您将服务器用作 CA,则将适用相同的步骤(稍作修改)。
我们之所以使用单独的CA机器是为了防止攻击者渗透服务器。如果攻击者设法访问 CA 私钥,他们可以使用它来签署新证书,这将使他们能够访问 VPN 服务器。
使用 EasyRSA 构建 CA#
设置新的 OpenVPN 服务器时,第一步是构建公钥基础设施 (PKI)。为此,我们需要创建以下内容:
- 证书颁发机构 (CA) 证书和私钥。
- 由我们的 CA 颁发的服务器的单独证书和私钥对。
- 我们的 CA 为每个客户端颁发单独的证书和私钥对。
正如出于安全原因的先决条件中提到的,我们将在独立计算机上构建 CA。
为了创建 CA、证书请求和签署证书,我们将使用名为 EasyRSA 的 CLI 实用程序。
在您的计算机上执行以下步骤CA机.
-
首先,从项目中下载最新版本的EasyRSAGithub 存储库与以下wget命令:
cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
-
下载完成后提取存档
with:
tar xzf EasyRSA-nix-3.0.5.tgz
-
Switch到 EasyRSA 目录并创建一个名为的配置文件vars
通过复制vars.example
file:
cd ~/EasyRSA-3.0.5/
cp vars.example vars
-
打开文件并取消注释并更新以下条目以匹配您的信息。
nano ~/EasyRSA-3.0.5/vars
〜/ EasyRSA-3.0.5 / vars
set_var EASYRSA_REQ_COUNTRY "US"
set_var EASYRSA_REQ_PROVINCE "Pennsylvania"
set_var EASYRSA_REQ_CITY "Pittsburgh"
set_var EASYRSA_REQ_ORG "Linuxize"
set_var EASYRSA_REQ_EMAIL "admin@linuxize.com"
set_var EASYRSA_REQ_OU "Community"
-
在生成 CA 密钥对之前,我们需要使用以下命令初始化一个新的 PKI:
./easyrsa init-pki
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/causer/EasyRSA-3.0.5/pki
-
下一步是构建 CA:
./easyrsa build-ca
如果您不希望每次签署证书时都提示输入密码,请运行build-ca
命令使用nopass
选项:./easyrsa build-ca nopass
.
...
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
...
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/causer/EasyRSA-3.0.5/pki/ca.crt
系统会要求您为 CA 密钥设置密码并输入 CA 的通用名称。
完成后,脚本将创建两个文件——CA公共证书ca.crt
和CA私钥ca.key
.
现在证书颁发机构 (CA) 已创建,您可以使用它来签署一个或多个 OpenVPN 服务器和客户端的证书请求。
安装 OpenVPN 和 EasyRSA#
我们的下一步是安装 Ubuntu 存储库中提供的 OpenVPN 软件包并下载最新版本的 EasyRSA。
以下步骤是在OpenVPN服务器.
-
OpenVPN的安装非常简单,只需在OpenVPN服务器:
sudo apt update
sudo apt install openvpn
-
下载最新版本的 EasyRSA:
cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
下载完成后,输入以下命令来提取存档:
tar xzf EasyRSA-nix-3.0.5.tgz
虽然我们已经在CA机器上初始化了一个PKI,但我们还需要在OpenVPN服务器上创建一个新的PKI。为此,请使用与之前相同的命令:
cd ~/EasyRSA-3.0.5/
./easyrsa init-pki
如果您仍然想知道为什么我们需要两个 EasyRSA 安装,那是因为我们将使用此 EasyRSA 实例来生成证书请求,该请求将使用上的 EasyRSA 实例进行签名CA机.
这听起来可能很复杂,而且有点令人困惑,但一旦你阅读了整个教程,你就会发现它实际上并不复杂。
创建 Diffie-Hellman 和 HMAC 密钥#
在本节中,我们将生成一个强大的 Diffie-Hellman 密钥(将在密钥交换期间使用)和一个 HMAC 签名文件,以便为连接添加额外的安全层。
-
首先导航到您的 EasyRSA 目录OpenVPN服务器.
cd ~/EasyRSA-3.0.5/
-
生成 Diffie-Hellman 密钥:
./easyrsa gen-dh
该脚本将生成 2048 位长的 DH 参数。这可能需要一些时间,尤其是在资源很少的服务器上。完成后,屏幕上将打印以下消息:
DH parameters of size 2048 created at /home/serveruser/EasyRSA-3.0.5/pki/dh.pem
复制dh.pem
文件到/etc/openvpn
目录:
sudo cp ~/EasyRSA-3.0.5/pki/dh.pem /etc/openvpn/
-
生成 HMAC 签名:
openvpn --genkey --secret ta.key
完成后复制ta.key
文件到/etc/openvpn
目录:
sudo cp ~/EasyRSA-3.0.5/ta.key /etc/openvpn/
创建服务器证书和私钥#
本节介绍如何为 OpenVPN 服务器生成私钥和证书请求。
-
导航到您的 EasyRSA 目录OpenVPN服务器并为服务器生成新的私钥和证书请求文件:
cd ~/EasyRSA-3.0.5/
./easyrsa gen-req server1 nopass
我们正在使用nopass
参数是因为我们想在不输入密码的情况下启动 OpenVPN 服务器。同样在这个例子中,我们使用server1
作为服务器名称(实体)标识符。如果您为服务器选择不同的名称,请不要忘记调整下面使用服务器名称的说明。
该命令将创建两个文件,一个私钥(server1.key
)和证书请求文件(server1.req
).
-----
Common Name (eg: your user, host, or server name) [server1]:
Keypair and certificate request completed. Your files are:
req: /home/serveruser/EasyRSA-3.0.5/pki/reqs/server1.req
key: /home/serveruser/EasyRSA-3.0.5/pki/private/server1.key
-
将私钥复制到/etc/openvpn
目录:
sudo cp ~/EasyRSA-3.0.5/pki/private/server1.key /etc/openvpn/
-
将证书请求文件传输到您的 CA 计算机:
scp ~/EasyRSA-3.0.5/pki/reqs/server1.req causer@your_ca_ip:/tmp
在这个例子中我们使用scp要传输文件,您还可以使用rsync通过 ssh 或任何其他安全方法。
-
登录到您的CA机,切换到EasyRSA目录,导入证书请求文件:
cd ~/EasyRSA-3.0.5
./easyrsa import-req /tmp/server1.req server1
第一个参数是证书请求文件的路径,第二个参数是服务器短(实体)名称。在我们的例子中,服务器名称是server1
.
The request has been successfully imported with a short name of: server1
You may now use this name to perform signing operations on this request.
该命令只是将请求文件复制到pki/reqs
目录。
-
虽然仍在 EasyRSA 目录中CA机运行以下命令来签署请求:
cd ~/EasyRSA-3.0.5
./easyrsa sign-req server server1
第一个参数可以是server
or client
第二个是服务器短(实体)名称。
系统将提示您验证该请求是否来自可信来源。类型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 1080 days:
subject=
commonName = server1
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
...
如果您的 CA 密钥受密码保护,系统将提示您输入密码。验证后,脚本将生成 SSL 证书并打印其完整路径。
...
Certificate is to be certified until Sep 17 10:54:48 2021 GMT (1080 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/server1.crt
-
下一步是传输签名的证书server1.crt
and ca.crt
文件返回到您的 OpenVPN 服务器。再次你可以使用scp
, rsync
或任何其他安全方法:
scp ~/EasyRSA-3.0.5/pki/issued/server1.crt serveruser@your_server_ip:/tmp
scp ~/EasyRSA-3.0.5/pki/ca.crt serveruser@your_server_ip:/tmp
-
登录到您的OpenVPN服务器,并移动server1.crt
and ca.crt
文件到/etc/openvpn/
目录:
sudo mv /tmp/{server1,ca}.crt /etc/openvpn/
完成本节中概述的步骤后,您的计算机上应该有以下新文件OpenVPN服务器:
/etc/openvpn/ca.crt
/etc/openvpn/dh.pem
/etc/openvpn/ta.key
/etc/openvpn/server1.crt
/etc/openvpn/server1.key
配置 OpenVPN 服务#
现在您已拥有由 CA 签名的服务器证书并已传输到您的OpenVPN服务器,是时候配置 OpenVPN 服务了。
我们将使用 OpenVPN 安装包提供的示例配置文件作为起点,然后向其中添加我们自己的自定义配置选项。
首先将配置文件解压到/etc/openvpn/
目录:
sudo sh -c "gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server1.conf"
打开您最喜欢的文件文本编辑器
:
sudo nano /etc/openvpn/server1.conf
-
找到证书、密钥和 DH 参数指令并更改文件名:
/etc/openvpn/server1.conf
cert server1.crt
key server1.key
dh dh.pem
-
要通过 VPN 重定向客户端流量,请找到并取消注释redirect-gateway
and dhcp-option
选项:
/etc/openvpn/server1.conf
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
默认情况下使用 OpenDNS 解析器。您可以更改它并使用 CloudFlare、Google 或您想要的任何其他 DNS 解析器。
-
找出user
and group
指令并通过删除“来取消注释这些设置;
” 在每行的开头:
/etc/openvpn/server1.conf
user nobody
group nogroup
-
将以下行添加到文件末尾。该指令会将消息身份验证算法 (HMAC) 从 SHA1 更改为 SHA256
/etc/openvpn/server1.conf
完成后,服务器配置文件(不包括注释)应如下所示:
/etc/openvpn/server1.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server1.crt
key server1.key # This file should be kept secret
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
explicit-exit-notify 1
auth SHA256
启动 OpenVPN 服务#
在本教程中,我们使用了server1.conf
作为配置文件。要使用此配置启动 OpenVPN 服务,我们需要在 systemd 单元文件名后指定配置文件名:
On your OpenVPN服务器运行以下命令启动OpenVPN服务:
sudo systemctl start openvpn@server1
通过键入以下内容验证服务是否已成功启动:
sudo systemctl status openvpn@server1
如果服务处于活动状态并正在运行,输出将如下所示:
● openvpn@server1.service - OpenVPN connection to server1
Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2018-10-08 20:11:57 UTC; 6min ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 26739 (openvpn)
Status: "Initialization Sequence Completed"
启用服务在启动时自动启动:
sudo systemctl enable openvpn@server1
Created symlink /etc/systemd/system/multi-user.target.wants/openvpn@server1.service → /lib/systemd/system/openvpn@.service.
如果 OpenVPN 服务无法启动,请检查日志sudo journalctl -u openvpn@server1
OpenVPN 服务器将创建一个新的 tun 设备tun0
。要检查设备是否可用,请使用以下命令ip命令
:
ip a show tun0
输出应如下所示:
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq 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::1627:9a20:bca8:e6a5/64 scope link stable-privacy
valid_lft forever preferred_lft forever
至此,您的 OpenVPN 服务器已配置并正常运行。
防火墙和服务器网络配置#
为了正确转发网络数据包,我们需要启用IP转发。
以下步骤是在OpenVPN服务器.
打开/etc/sysctl.conf
文件并添加或取消注释读取的行net.ipv4.ip_forward = 1
:
sudo nano /etc/sysctl.conf
/etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
完成后,保存并关闭文件。
通过运行以下命令应用新设置:
sudo sysctl -p
net.ipv4.ip_forward = 1
如果您遵循先决条件,您应该已经拥有UFW防火墙在您的服务器上运行。
现在我们需要添加防火墙规则以启用伪装。这将允许流量离开 VPN,从而使您的 VPN 客户端能够访问互联网。
在添加规则之前,您需要了解 Ubuntu OpenVPN 服务器的公共网络接口。您可以通过运行以下命令轻松找到该接口:
ip -o -4 route show to default | awk '{print $5}'
在我们的例子中,该接口被命名为ens3
如下面的输出所示。您的界面可能会有不同的名称。
ens3
默认情况下,使用 UFW 时转发的数据包将被丢弃。我们需要改变这一点并指示我们的防火墙允许转发数据包。
打开UFW配置文件,找到DEFAULT_FORWARD_POLICY
键并更改值DROP
to ACCEPT
:
sudo nano /etc/default/ufw
/etc/默认/ufw
...
# Set the default forward policy to ACCEPT, DROP or REJECT. Please note that
# if you change this you will most likely want to adjust your rules
DEFAULT_FORWARD_POLICY="ACCEPT"
...
接下来,我们需要设置默认策略POSTROUTING
链入 nat 表并设置伪装规则。
为此,请打开/etc/ufw/before.rules
文件并附加以黄色突出显示的行,如下所示。
sudo nano /etc/ufw/before.rules
别忘了更换ens3
in the -A POSTROUTING
行以匹配您在上一个命令中找到的公共网络接口的名称。粘贴以以下内容开头的最后一行之后的行COMMIT
.
/etc/ufw/before.rules
...
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic through ens3 - Change to public network interface
-A POSTROUTING -s 10.8.0.0/16 -o ens3 -j MASQUERADE
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
完成后,保存并关闭文件。
我们还需要打开端口上的 UDP 流量1194
这是默认的 OpenVPN 端口。为此,请运行以下命令:
sudo ufw allow 1194/udp
如果您忘记打开 SSH 端口,为避免被锁定,请运行以下命令打开端口:
sudo ufw allow OpenSSH
最后通过禁用并重新启用 UFW 来重新加载 UFW 规则:
sudo ufw disable
sudo ufw enable
要验证更改,请运行以下命令来列出 POSTROUTING 规则:
sudo iptables -nvL POSTROUTING -t nat
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * ens3 10.8.0.0/16 0.0.0.0/0
创建客户端配置基础设施#
在本教程中,我们将创建一个单独的 SSL 证书并为每个 VPN 客户端生成不同的配置文件。
客户端私钥和证书请求可以在客户端计算机或服务器上生成。为了简单起见,我们将在服务器上生成证书请求,然后将其发送到 CA 进行签名。
生成客户端证书和配置文件的整个过程如下:
- 在 OpenVPN 服务器上生成私钥和证书请求。
- 将请求发送到要签名的 CA 机器。
- 将签名的 SSL 证书复制到 OpenVPN 服务器并生成配置文件。
- 将配置文件发送到 VPN 客户端的计算机。
首先创建一组目录来存储客户端文件:
mkdir -p ~/openvpn-clients/{configs,base,files}
-
base
目录将存储将在所有客户端文件之间共享的基本文件和配置。
-
configs
目录将存储生成的客户端配置。
-
files
目录将存储特定于客户端的证书/密钥对。
复制ca.crt
and ta.key
文件到~/openvpn-clients/base
目录:
cp ~/EasyRSA-3.0.5/ta.key ~/openvpn-clients/base/
cp /etc/openvpn/ca.crt ~/openvpn-clients/base/
接下来将示例 VPN 客户端配置文件复制到客户端 -~/openvpn-clients/base
目录。我们将使用此文件作为基本配置:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/openvpn-clients/base/
现在我们需要编辑该文件以匹配我们的服务器设置和配置。使用文本编辑器打开配置文件:
nano ~/openvpn-clients/base/client.conf
-
找到远程指令并使用 OpenVPN 服务器的公共 IP 地址更改默认占位符:
〜/openvpn-clients/base/client.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
-
找到并评论ca
, cert
, and key
指令。证书和密钥将添加到配置文件中:
〜/openvpn-clients/base/client.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
-
在文件末尾附加以下行以匹配服务器设置:
〜/openvpn-clients/base/client.conf
完成后,服务器配置文件应如下所示:
〜/openvpn-clients/base/client.conf
client
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
auth SHA256
key-direction 1
接下来,创建一个简单的 bash 脚本,将基本配置和文件与客户端证书和密钥合并,并将生成的配置存储在~/openvpn-clients/configs
目录。
打开文本编辑器并创建以下脚本:
nano ~/openvpn-clients/gen_config.sh
〜/openvpn-clients/gen_config.sh
#!/bin/bash
FILES_DIR=$HOME/openvpn-clients/files
BASE_DIR=$HOME/openvpn-clients/base
CONFIGS_DIR=$HOME/openvpn-clients/configs
BASE_CONF=${BASE_DIR}/client.conf
CA_FILE=${BASE_DIR}/ca.crt
TA_FILE=${BASE_DIR}/ta.key
CLIENT_CERT=${FILES_DIR}/${1}.crt
CLIENT_KEY=${FILES_DIR}/${1}.key
# Test for files
for i in "$BASE_CONF" "$CA_FILE" "$TA_FILE" "$CLIENT_CERT" "$CLIENT_KEY"; do
if [[ ! -f $i ]]; then
echo " The file $i does not exist"
exit 1
fi
if [[ ! -r $i ]]; then
echo " The file $i is not readable."
exit 1
fi
done
# Generate client config
cat > ${CONFIGS_DIR}/${1}.ovpn <<EOF
$(cat ${BASE_CONF})
<key>
$(cat ${CLIENT_KEY})
</key>
<cert>
$(cat ${CLIENT_CERT})
</cert>
<ca>
$(cat ${CA_FILE})
</ca>
<tls-auth>
$(cat ${TA_FILE})
</tls-auth>
EOF
保存文件并通过运行以下命令使其可执行chmod命令:
chmod u+x ~/openvpn-clients/gen_config.sh
创建客户端证书私钥和配置#
生成客户端私钥和证书请求的过程与生成服务器密钥和证书请求时的过程相同。
正如我们在上一节中已经提到的,我们将在 OpenVPN 服务器上生成客户端私钥和证书请求。在此示例中,第一个 VPN 客户端的名称为client1
.
-
导航到您的 EasyRSA 目录OpenVPN服务器并为客户端生成新的私钥和证书请求文件:
cd ~/EasyRSA-3.0.5/
./easyrsa gen-req client1 nopass
该命令将创建两个文件,一个私钥(client1.key
)和证书请求文件(client1.req
).
Common Name (eg: your user, host, or server name) [client1]:
Keypair and certificate request completed. Your files are:
req: /home/serveruser/EasyRSA-3.0.5/pki/reqs/client1.req
key: /home/serveruser/EasyRSA-3.0.5/pki/private/client1.key
-
复制私钥client1.key
to the ~/openvpn-clients/files
您在上一节中创建的目录:
cp ~/EasyRSA-3.0.5/pki/private/client1.key ~/openvpn-clients/files/
-
将证书请求文件传输到您的 CA 计算机:
scp ~/EasyRSA-3.0.5/pki/reqs/client1.req causer@your_ca_ip:/tmp
在这个例子中我们使用scp要传输文件,您还可以使用rsync通过 ssh 或任何其他安全方法。
-
登录到您的CA机,切换到EasyRSA目录,导入证书请求文件:
cd ~/EasyRSA-3.0.5
./easyrsa import-req /tmp/client1.req client1
第一个参数是证书请求文件的路径,第二个参数是客户端名称。
The request has been successfully imported with a short name of: client1
You may now use this name to perform signing operations on this request.
-
从 EasyRSA 目录中CA机运行以下命令来签署请求:
cd ~/EasyRSA-3.0.5
./easyrsa sign-req client client1
系统将提示您验证该请求是否来自可信来源。类型yes
并按enter
确认:
如果您的 CA 密钥受密码保护,系统将提示您输入密码。验证后,脚本将生成 SSL 证书并打印其完整路径。
...
Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/client1.crt
-
接下来,传输签名的证书client1.crt
文件传回您的 OpenVPN 服务器。您可以使用scp
, rsync或任何其他安全方法:
scp ~/EasyRSA-3.0.5/pki/issued/client1.crt serveruser@your_server_ip:/tmp
-
登录到您的OpenVPN服务器,并移动client1.crt
文件到~/openvpn-clients/files
目录:
mv /tmp/client1.crt ~/openvpn-clients/files
-
最后一步是使用以下命令生成客户端配置gen_config.sh
脚本。切换到~/openvpn-clients
目录并使用客户端名称作为参数运行脚本:
cd ~/openvpn-clients
./gen_config.sh client1
该脚本将创建一个名为client1.ovpn
in the ~/client-configs/configs
目录。您可以通过列出目录来检查:
ls ~/openvpn-clients/configs
client1.ovpn
至此,客户端配置已创建。您现在可以将配置文件传输到要用作客户端的设备。
例如,将配置文件传输到本地计算机scp
您应该运行以下命令:
scp ~/openvpn-clients/configs/client1.ovpn your_local_ip:/
要添加其他客户端,只需重复相同的步骤即可。
连接客户端#
Linux #
您的发行版或桌面环境可能提供连接到 OpenVPN 服务器的工具或图形用户界面。在本教程中,我们将向您展示如何使用openvpn
tool.
-
在 Ubuntu 和 Debian 上安装 OpenVPN
sudo apt update
sudo apt install openvpn
-
在 CentOS 和 Fedora 上安装 OpenVPN
sudo yum install epel-release
sudo yum install openvpn
安装软件包后,要连接到 VPN 服务器,请使用openvpn
命令并指定客户端配置文件:
sudo openvpn --config client1.ovpn
macOS #
隧道布里克是 OS X 和 macOS 上 OpenVPN 的免费开源图形用户界面。
Windows #
下载并安装最新版本的 OpenVPN 应用程序OpenVPN 的下载页面
.
复制.ovpn
文件到 OpenVPN 配置文件夹(\Users\<Name>\OpenVPN\Config
or \Program Files\OpenVPN\config
).
启动 OpenVPN 应用程序。
右键单击 OpenVPN 系统托盘图标,您复制的 OpenVPN 配置文件的名称将在菜单中列出。单击“连接”。
安卓和iOS#
OpenVPN 开发的 VPN 应用程序适用于 Android 和 iOS。安装应用程序并导入客户端.ovp
file.
- Android OpenVPN 连接
- iOS OpenVPN 连接
吊销客户端证书#
吊销证书意味着使已签名的证书失效,使其不能再用于访问 OpenVPN 服务器。
要吊销客户端证书,请按照以下步骤操作:
-
登录到您的CA机并切换到 EasyRSA 目录:
cd EasyRSA-3.0.5
-
使用以下命令运行 easyrsa 脚本revoke
参数,后跟您要撤销的客户端名称:
./easyrsa revoke client1
系统将提示您验证是否要吊销证书。类型yes
并按enter
确认:
Please confirm you wish to revoke the certificate with the following subject:
subject=
commonName = client1
Type the word 'yes' to continue, or any other input to abort.
Continue with revocation: yes
...
如果您的 CA 密钥受密码保护,系统将提示您输入密码。一旦验证,脚本将撤销证书。
...
Revocation was successful. You must run gen-crl and upload a CRL to your
infrastructure in order to prevent the revoked cert from being accepted.
-
Use the gen-crl
生成证书吊销列表 (CRL) 的选项:
./easyrsa gen-crl
An updated CRL has been created.
CRL file: /home/causer/EasyRSA-3.0.5/pki/crl.pem
-
将 CRL 文件上传到 OpenVPN 服务器:
scp ~/EasyRSA-3.0.5/pki/crl.pem serveruser@your_server_ip:/tmp
-
登录到您的OpenVPN服务器服务器并将文件移动到/etc/openvpn
目录:
sudo mv /tmp/crl.pem /etc/openvpn
-
打开OpenVPN服务器配置文件:
sudo nano /etc/openvpn/server1.conf
将以下行粘贴到文件末尾
/etc/openvpn/server1.conf
保存并关闭文件。
-
重启OpenVPN服务以使撤销指令生效:
sudo systemctl restart openvpn@server1
此时,客户端应该无法再使用已吊销的证书访问 OpenVPN 服务器。
如果您需要撤销其他客户端证书,只需重复相同的步骤。
结论#
在本教程中,您学习了如何在 Ubuntu 18.04 计算机上安装和配置 OpenVPN 服务器。
如果您有任何问题或反馈,请随时发表评论。