如何在 Ubuntu 20.04 上設置 OpenVPN

開放式VPN 是一個功能豐富的開源安全套接字層 (SSL) VPN。 VPN 允許安全地連接不受信任的網絡,例如酒店、機場或商場中的 WIFI 網絡。 VPN 還允許安全連接到公司網絡以訪問資源。 隧道通過使用 SSL/TLS 身份驗證、證書、憑據來保護。

在本教程中,我將向您展示如何設置 虛擬專用網 使用 開放式VPNUbuntu 20.04.

先決條件

我們將使用兩個運行在 20.04 版本上的 Ubuntu 服務器:

  • 一個 證書頒發機構 (CA) 服務器 這將驗證請求並簽署客戶端的證書。
  • 開放式VPN 我們將在其上安裝 VPN 的服務器。

配置CA服務器

它建議保留一個獨立服務器作為您的 CA(證書頒發機構)。 這是出於安全原因。 讓我們繼續配置 CA 服務器。

首先確保系統已更新。 運行以下命令:

$ sudo apt update

您需要為證書頒發機構服務器的配置創建一個非 root 用戶。

$ sudo adduser malain

現在給用戶 sudo 特權:

$ sudo usermod -aG sudo malain

現在註銷,然後使用非 root 用戶重新登錄。

在 CA 服務器上安裝 EasyRSA

Easy-rsa 是用於構建和管理 PKI CA 的 CLI 實用程序。 CA 服務器將使用 Easy-RSA 生成私鑰和公共根證書,這些證書將用於對來自依賴於我們 CA 的客戶端和服務器的請求進行簽名。

要安裝easy-rsa,請使用wget從github下載PKI管理工具:

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

然後解壓 tgz 文件:

$ tar xvf EasyRSA-3.0.8.tgz

要僅限制對用戶的訪問,請使用:

$ chmod 700 EasyRSA-3.0.8

現在將 EasyRSA 移動到 opt 目錄

$ sudo mv EasyRSA-3.0.8 /opt/

我們正在使用 EasyRSA 3.0.8 此配置的版本。

使用 EasyRSA 創建 CA

首先,您需要創建一個名為 vars 存儲組織信息。 為此,我們可以使用 example EasyRSA-3.0.8 目錄中的文件。

要列出 EasyRSA 目錄下的文件,請使用:

$ cd EasyRSA-3.0.8/ && ls -l

輸出:

-rw-rw-r-- 1 malain malain 1305 Sep 9 2020 COPYING.md
-rw-rw-r-- 1 malain malain 5056 Sep 9 2020 ChangeLog
-rw-rw-r-- 1 malain malain 2049 Sep 9 2020 README.md
-rw-rw-r-- 1 malain malain 3335 Sep 9 2020 README.quickstart.md
drwxrwxr-x 2 malain malain 4096 Sep 9 2020 doc
-rwxrwxr-x 1 malain malain 76946 Sep 9 2020 easyrsa
-rw-rw-r-- 1 malain malain 18093 Sep 9 2020 gpl-2.0.txt
-rw-rw-r-- 1 malain malain 1036 Sep 9 2020 mktemp.txt
-rw-rw-r-- 1 malain malain 4616 Sep 9 2020 openssl-easyrsa.cnf
-rw-rw-r-- 1 malain malain 8925 Sep 9 2020 vars.example
drwxrwxr-x 2 malain malain 4096 Mar 28 14:14 x509-types

製作文件 vars 的副本。example 作為變量:

$ cp vars.example vars

現在打開 vars 文件並在文件末尾添加組織信息:

$ vim vars
set_var EASYRSA_REQ_COUNTRY "CM"
set_var EASYRSA_REQ_PROVINCE "Littoral"
set_var EASYRSA_REQ_CITY "Douala"
set_var EASYRSA_REQ_ORG "OPEN-SHARE"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "Com"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

現在在我們的 CA 服務器上初始化我們的 PKI,這將創建 pki 文件夾。

$ ./easyrsa init-pki

我們現在可以生成 根公共私鑰對 對於我們的 CA。 在此過程中,通常會要求您在需要簽署或撤銷證書的任何時候輸入密鑰對的密碼。 在我們的例子中,我們將使用該命令,這樣我們就不會被提示輸入密碼。 系統還會提示您指明一個 通用名稱 (CN) 但我們將保留默認值,按 Enter 鑰匙。

$ ./easyrsa build-ca nopass

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
read EC key
writing EC key
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
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:
/opt/EasyRSA-3.0.8/pki/ca.crt

這將創建 根證書 pki 目錄中名為 ca.crt 的文件和 p鉚釘 pki/private 目錄中的 ca.key。

$ ls -l pki/
total 52
-rw------- 1 malain malain 749 Mar 28 14:30 ca.crt
drwx------ 2 malain malain 4096 Mar 28 14:29 certs_by_serial
drwx------ 2 malain malain 4096 Mar 28 14:29 ecparams
-rw------- 1 malain malain 0 Mar 28 14:29 index.txt
-rw------- 1 malain malain 0 Mar 28 14:29 index.txt.attr
drwx------ 2 malain malain 4096 Mar 28 14:29 issued
-rw------- 1 malain malain 4616 Mar 28 14:24 openssl-easyrsa.cnf
drwx------ 2 malain malain 4096 Mar 28 14:30 private
drwx------ 5 malain malain 4096 Mar 28 14:29 renewed
drwx------ 2 malain malain 4096 Mar 28 14:24 reqs
drwx------ 5 malain malain 4096 Mar 28 14:29 revoked
-rw------- 1 malain malain 4575 Mar 28 14:24 safessl-easyrsa.cnf
-rw------- 1 malain malain 3 Mar 28 14:29 serial

$ ls -l pki/private/
total 4
-rw------- 1 malain malain 288 Mar 28 14:29 ca.key

這樣,我們的 CA 服務器就準備好了。

安裝和配置 Openvpn 服務器

讓我們跳到第二台服務器來安裝和配置 openvpn。 您還需要在此服務器中創建一個非 root 用戶並為他提供 sudo 特權。

安裝 openvpn 在 ubuntu 上,運行以下命令:

$ sudo apt update
$ sudo apt install openvpn

在 openvpn 服務器上,easyrsa 將用於生成將由 CA 服務器驗證和簽名的證書請求。 按照我們在上一節中遵循的相同步驟安裝 Easyrsa。

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

現在解壓縮下載的 tgz 文件:

$ tar xvf EasyRSA-3.0.8.tgz

僅限制用戶訪問:

$ chmod 700 EasyRSA-3.0.8

將 EasyRSA-3.0.8 移至 opt 目錄:

$ sudo mv EasyRSA-3.0.8 /opt/

創建 PKI

現在我們需要 創建PKI 這將有助於為客戶端和將連接到我們 VPN 的其他服務器請求和管理 TLS 證書。

讓我們使用已經可用的示例文件創建一個 vars 文件:

$ cp vars.example vars

現在通過在文件末尾添加以下行來編輯 vars 文件:

$ vim vars
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

創建 PKI 文件夾 在 openvpn 服務器上,運行 easyrsa 腳本文件:

$ ./easyrsa init-pki

輸出:

注意:使用 Easy-RSA 配置來自:/opt/EasyRSA-3.0.8/vars init-pki complete; 您現在可以創建 CA 或請求。 您新創建的 PKI 目錄是:/opt/EasyRSA-3.0.8/pki

創建服務器證書請求和私鑰

現在我們將生成一個 私鑰證書請求 在 OpenVPN 服務器上。 然後我們將證書請求文件傳輸到CA服務器進行簽名,以創建所需的證書

在同一個文件夾中,我們可以生成請求 nopass 選項。 以下命令創建一個名為 openvpn-server.key 的私鑰文件和一個名為 openvpn-server.req 的證書請求文件。

$ ./easyrsa gen-req openvpn-server nopass

輸出:

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
Generating an EC private key
writing new private key to '/opt/EasyRSA-3.0.8/pki/easy-rsa-4737.CGhQHN/tmp.UGQ9wi'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [openvpn-server]:

Keypair and certificate request completed. Your files are:
req: /opt/EasyRSA-3.0.8/pki/reqs/openvpn-server.req
key: /opt/EasyRSA-3.0.8/pki/private/openvpn-server.key

現在,將名為 openvpn-server.key 的服務器密鑰文件複製到名為 /etc/openvpn/server 的目錄中。

$ sudo cp /opt/EasyRSA-3.0.8/pki/private/openvpn-server.key /etc/openvpn/server

然後將證書請求文件複製到 CA服務器

$ scp /opt/EasyRSA-3.0.8/pki/reqs/openvpn-server.req [email protected]:/tmp

在 CA 服務器上,切換到 easyrsa 目錄,

$ cd /opt/EasyRSA-3.0.8/

導入請求, 運行以下命令:

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

輸出:

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020

The request has been successfully imported with a short name of: openvpn-server
You may now use this name to perform signing operations on this request.

現在簽署請求。 當我們簽署服務器的請求時,我們應該使用指令 server 在我們的 openvpn 服務器的通用名稱之前。 如果是客戶的請求,我們應該使用指令 client 反而。

簽署請求

$ ./easyrsa sign-req server openvpn-server

輸出:

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020

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 = openvpn-server

Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /opt/EasyRSA-3.0.8/pki/easy-rsa-4100.IbygpP/tmp.hJY2T5
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'openvpn-server'
Certificate is to be certified until Jul 1 19:50:36 2023 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /opt/EasyRSA-3.0.8/pki/issued/openvpn-server.crt

現在OpenVPN服務器的證書請求已經被CA服務器簽名了,我們需要將簽名的請求和公共證書傳送到OpenVPN服務器。

$ scp pki/{ca.crt,issued/openvpn-server.crt} [email protected]:/tmp

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

我們現在將生成 tls-crypt 預共享密鑰,以確保我們的 OpenVPN 服務器能夠應對未經身份驗證的流量、端口掃描和一些會佔用大量服務器資源的攻擊。

$ ./easyrsa gen-dh

輸出:

注意:使用 Easy-RSA 配置來自:/opt/EasyRSA-3.0.8/vars 使用 SSL:openssl OpenSSL 1.1.1f 2020 年 3 月 31 日生成 DH 參數,2048 位長安全素數,生成器 2 這將需要很長時間…………………………………………………………………………………………………………………………………………………… …………………………………………….. ……………………………… ……………………………… ………………………………..+…….+…….+. ……………………………………………………………………………………………………………………………………………………………………………………………………………… ……………………………………………..++* ++*++*++* 在 /opt/EasyRSA-3.0.8/pki/dh.pem 創建的大小為 2048 的 DH 參數

$ openvpn --genkey --secret ta.key

現在將密鑰和 pem 文件複製到目錄 /etc/openvpn/server:

$ sudo cp ta.key pki/dh.pem /etc/openvpn/server

生成客戶端證書和密鑰對

我們需要創建一個目錄來保存證書和客戶端的密鑰。 確保授予非 root 用戶權限。

$ sudo mkdir -p /opt/client-configs/keys
$ sudo chown franck:franck -R /opt/client-configs
$ sudo chmod 700 -R /opt/client-configs

生成客戶端證書請求:

$ cd /opt/EasyRSA-3.0.8
$ ./easyrsa gen-req my-pc nopass

輸出:

注意:使用來自以下位置的 Easy-RSA 配置:/opt/EasyRSA-3.0.8/vars Using SSL: openssl OpenSSL 1.1.1f 2020 年 3 月 31 日生成 EC 私鑰將新私鑰寫入’/opt/EasyRSA-3.0.8/ pki/easy-rsa-6961.m7fBMu/tmp.dkqaZI’ —– 您將被要求輸入將納入您的證書請求的信息。 您將要輸入的是所謂的專有名稱或 DN。 有很多字段,但您可以留空 對於某些字段,將有一個默認值,如果您輸入“.”,該字段將留空。 —– 通用名稱(例如:您的用戶、主機或服務器名稱) [my-pc]:密鑰對和證書請求已完成。 您的文件是: req: /opt/EasyRSA-3.0.8/pki/reqs/my-pc.req 密鑰: /opt/EasyRSA-3.0.8/pki/private/my-pc.key

現在將客戶端密鑰複製到 client-configs 目錄:

$ cp pki/private/my-pc.key /opt/client-configs/keys/

將客戶端證書請求文件複製到 CA 服務器:

$ scp pki/reqs/my-pc.req [email protected]:/tmp

在 CA 服務器上,導入 CSR:

$ cd /opt/EasyRSA-3.0.8
$ ./easyrsa import-req /tmp/my-pc.req my-pc

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020

The request has been successfully imported with a short name of: my-pc
You may now use this name to perform signing operations on this request.

現在我們應該簽署客戶端的請求,輸入:

$ ./easyrsa sign-req client my-pc

輸出:

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020

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 client certificate for 825 days:

subject=
commonName = my-pc

Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /opt/EasyRSA-3.0.8/pki/easy-rsa-5511.IwDcbS/tmp.doUbCv
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'my-pc'
Certificate is to be certified until Jul 1 21:33:52 2023 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /opt/EasyRSA-3.0.8/pki/issued/my-pc.crt

在 openvpn 服務器上複製客戶端證書:

$ scp pki/issued/my-pc.crt [email protected]:/tmp

現在在 openvpn 服務器上,我們需要將所有客戶端文件複製到我們之前創建的客戶端目錄中。

$ sudo cp /tmp/my-pc.crt /opt/client-configs/keys/

$ sudo cp /etc/openvpn/server/ca.crt /opt/client-configs/keys/

$ cp /opt/EasyRSA-3.0.8/ta.key /opt/client-configs/keys/

確保非 root 用戶對文件具有權限。

$ sudo chown franck:franck /opt/client-configs/keys/*

配置 VPN 服務

我們應該先複製一份模板來使用

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

然後解壓文件

$ sudo gzip -d /etc/openvpn/server/server.conf.gz

然後進入文件夾

$ cd /etc/openvpn/server

一些行將被替換以匹配我們的配置::

  • 加密密碼將設置為 AES-256-CBC
  • HMAC 消息摘要算法將是 sha256
  • 由於我們還使用了 Diffie-Hellman 參數,因此我們將其設置為 dh.pem
  • 我們將使用用戶 沒有人 和組 無組 openvpn 啟動後無權限運行
  • 我們將推送 dns 更改以使用值重定向通過 vpn 的所有流量 push redirect-gateway def1 bypass-dhcp, push dhcp-option DNS 208.67.222.222, push dhcp-option DNS 208.67.220.220
  • 我們將保留默認端口 1194
  • 我們將使用 udp 協議
  • 我們應該指出關鍵 openvpn-server.key 和證書 openvpn-server.crt 用作憑證

所以文件應該如下所示:

$ sudo vim /etc/openvpn/server/server.conf
tls-crypt ta.key
cipher AES-256-CBC
auth SHA256
dh dh.pem
user nobody
group nogroup
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
port 1194
proto udp
explicit-exit-notify 1
cert openvpn-server.crt
key openvpn-server.key

您應該通過編輯 /etc/sysctl.conf 中的 net.ipv4.ip_forward 值來激活 ip 轉發。

$ sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1

要使我們在 /etc/sysctl.conf 中所做的更改生效,請運行:

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

現在您需要通過啟用偽裝來允許 OpenVPN 通過您的防火牆。 為此,您需要確定公共網絡接口的名稱:

$ ip route | grep default
default via X.X.X.X dev eth0 proto static

在我們的例子中是 eth0。 現在我們應該在防火牆配置中添加偽裝規則,因此我們將在規則文件的頂部添加以下行:

$ sudo vim /etc/ufw/before.rules
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to the public server interface eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

現在讓我們編輯 ufw 以允許默認轉發數據包。

$ sudo vim /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

打開防火牆上的openvpn端口:

$ sudo ufw allow '1194/udp'

要重新啟動 ufw 服務,請鍵入:

$ sudo ufw disable && sudo ufw enable

要使 openvpn 服務在系統啟動時啟動,請鍵入:

$ sudo systemctl enable openvpn-server@server

要啟動 openvpn,請鍵入:

$ sudo systemctl start openvpn-server@server

您可以通過以下方式檢查 openvpn 狀態:

$ sudo systemctl status openvpn-server@server

輸出:

[email protected] - OpenVPN service for server
Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
Active: active (running) since Sun 2021-03-28 23:30:57 UTC; 8s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 78132 (openvpn)
Status: "Initialization Sequence Completed"
Tasks: 1 (limit: 1073)
Memory: 1.0M
CGroup: /system.slice/system-openvpnx2dserver.slice/[email protected]
└─78132 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf

Mar 28 23:30:57 localhost systemd[1]: Starting OpenVPN service for server...
Mar 28 23:30:57 localhost systemd[1]: Started OpenVPN service for server.

要檢查隧道接口,請鍵入:

$ ip addr show tun0

輸出:

3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel 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::c3d9:85d1:e2a9:6b2c/64 scope link stable-privacy
valid_lft forever preferred_lft forever

為客戶端配置 vpn 文件

$ sudo mkdir -p /opt/client-configs/files

現在我們應該複製示例配置文件

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

授予非root用戶權限

$ sudo chown franck:franck -R /opt/client-configs/

編輯 base.conf 文件

$ vim /opt/client-configs/base.conf
remote your_server_ip 1194
proto udp
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
#ca ca.crt
#cert client.crt
#key client.key
#tls-auth ta.key 1
cipher AES-256-CBC
auth SHA256
key-direction 1
# For the clients using resolvconf for DNS resolution, uncomment the lines below on the client computer
; script-security 2
; up /etc/openvpn/update-resolv-conf
; down /etc/openvpn/update-resolv-conf
# Instead for the clients using systemd-resolved for DNS resolution, uncomment the lines below on the client computer
; script-security 2
; up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE .

現在我們將創建一個腳本來在客戶端生成證書和加密文件。 該腳本還將復制 base.conf 文件並收集為客戶端創建的所有密鑰和證書。 對於每個客戶端,我們需要在運行腳本之前生成證書和密鑰

$ vim /opt/client-configs/make_config.sh
#!/bin/bash

# First argument: Client identifier

KEY_DIR=/opt/client-configs/keys
OUTPUT_DIR=/opt/client-configs/files
BASE_CONFIG=/opt/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

確保只有非 root 用戶才能運行腳本。

$ chmod 700 /opt/client-configs/make_config.sh

現在您可以根據客戶端密鑰和證書配置(my-pc.crt 和 my-pc.key)生成客戶端連接文件

$ cd /opt/client-configs

現在運行腳本,後跟用於客戶端的通用名稱,這將創建要使用的客戶端 vpn 文件。

$ ./make_config.sh my-pc

您可以檢查結果:

$ ls -l files/
total 12
-rw-rw-r-- 1 franck franck 8598 Mar 30 11:12 my-pc.ovpn

將客戶端連接到 OpenVPN 連接

在客戶端安裝 openvpn。 這將用於建立與服務器的 vpn 連接

$ sudo apt update && sudo apt install openvpn -y

現在將服務器上的 OpenVPN 客戶端文件複製到您的客戶端計算機。 因此,在您的客戶端計算機上執行以下命令:

$ rsync -av [email protected]:/opt/client-configs/files/my-pc.ovpn .

在編輯客戶端 OpenVPN 配置文件之前,我們必須檢查我們是否使用 resolvconf 或 systemd-resolved 進行 DNS 解析

$ cat /etc/resolv.conf
OUTPUT:
# This file is managed by man:systemd-resolved(8). Do not edit.
. . .

nameserver 127.0.0.53
options edns0

隨著價值 nameserver 127.0.0.53,它表明您使用了 systemd-resolved。 因此,安裝一個包,這將有助於 systemd-resolved 在連接時使用 VPN 進行 DNS 解析。

$ sudo apt install openvpn-systemd-resolved

現在我們可以通過取消註釋 systemd-resolved 所需的行來編輯 vpn 客戶端文件

$ vim my-pc.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 的系統,您將取消註釋這些行

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

現在讓我們試試 連接到 VPN 使用 openvpn 命令到客戶端配置文件:

$ sudo openvpn --config my-pc.ovpn

可以查看隧道接口的ip信息

$ ip a

這將顯示一個隧道 IP 地址,我們可以對 OpenVPN 服務器進行 ping 操作。 有了這個,您可以確認您能夠訪問您的服務器,就像您在同一個專用網絡中一樣。

結論

使用 OpenVPN 時很容易建立 VPN 連接。 當您想在雲服務器上設置 VPN 解決方案而不使用任何專門的解決方案(例如虛擬防火牆或其他任何東西)時,這是一個很好的解決方案。 這是一種快速且安全的解決方案。