当前位置: 首页>>技术教程>>正文


Ubuntu 18.04 Bionic Beaver Linux上的Openvpn设置

, ,

目的

了解如何在Ubuntu 18.04 Bionic Beaver上安装和配置Openvpn服务器

要求

  • 根权限

困难

介质

约定

  • -要求给出linux命令可以直接以root用户身份或通过使用root特权以root特权执行sudo命令
  • $-要求给出linux命令以普通非特权用户身份执行

介绍

Description here虚拟专用网络技术可以通过使用不太安全的网络(例如Internet)来访问安全的专用网络。 VPN通常用于连接组织的物理远程分支机构,从而使它们看起来好像它们是同一LAN的一部分(例如,不同城市中的两个办公室)。使用隧道对连接双方之间的流量进行加密,从而保护传输的数据和连接信息本身。出于相同的特征,VPN通常用于规避政府的限制并匿名化互联网流量。

在本教程中,我们将了解如何使用Ubuntu 18.04 Bionic Beaver上的开源VPN软件OpenVPN创建虚拟专用网络服务器。

第1步-安装

在Ubuntu 18.04上安装OpenVPN非常容易:默认存储库中提供了该软件。我们还需要安装easy-rsa软件包,它将帮助我们创建所需的证书和密钥:

$ sudo apt-get update && sudo apt-get install openvpn easy-rsa

几秒钟后,该软件将安装在我们的计算机中,可以进行配置了。

第2步-服务器基础架构设置

在本节中,我们将生成所需的证书和密钥:首先,我们将创建自定义CA(证书颁发机构),那么我们将生成服务器certificate/key pairDiffie-Hellman参数和tls-auth key

让我们从生成目录开始,该目录将包含将为我们完成繁重工作的脚本。我们运行make-cadir命令,这是easy-rsa包,提供我们要创建的目录的名称。我们还希望在创建目录后立即输入该目录:

$ make-cadir certificates && cd certificates

在这种情况下,我将目录称为certificates。这将是本教程其余部分的工作目录,因此,必须将所有提及的命令视为在其中启动的命令。




步骤2.1-变量设置

首先,我们需要调整变量,这些变量将用于设置在证书颁发机构和证书/密钥生成期间使用的值。变量在内部定义vars文件:

export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"

一个非常重要的变量是KEY_CONFIG,默认情况下是通过调用一些包装程序脚本来设置的,该脚本应检索正确的ssl配置。但是,如果以这种方式使用,则会生成错误,因为脚本不会检索配置。为了避免这种情况,我们直接指定配置文件:

export KEY_CONFIG="$EASY_RSA/openssl-1.0.0.cnf"

其他变量的值必须更改并适应您的特定需求。编辑完文件后,必须”source”才能使变量成为运行时环境的一部分:

$ source vars

步骤2.2-生成CA

我们可以继续并生成我们的CA(证书颁发机构)。运行clean-allbuild-ca脚本顺序。将使用我们在vars文件作为相应字段的默认值:

$ ./clean-all && ./build-ca

步骤2.3-证书和密钥生成

下一步是为服务器生成证书和密钥。只需运行build-key-server脚本即可,给出我们要用于证书的名称以及密钥作为参数。在这种情况下,我们使用”server”,因为它是vpn配置文件中使用的默认名称,我们将在本教程中进一步了解:

$ ./build-key-server server

请按照屏幕上的说明进行操作。的challenge passwordcompany name字段是可选的。

步骤2.4-Diffie-Hellman参数生成

下一步是创建Diffie-Hellman参数。这些参数用于使用公共和不安全通道交换密码密钥。我们使用build-dh脚本:

$ ./build-dh

该脚本将花费一些时间来生成参数,具体取决于我们正在运行的机器,请耐心等待!

步骤2.5-生成一个随机密钥以用作共享密钥

为了增强我们的安全性,除了使用证书之外,我们还将生成并使用密钥来使用共享密钥。服务器和每个客户端将需要此密钥的副本:

$ openvpn --genkey --secret keys/ta.key

步骤2.6-复制生成的文件

证书颁发机构(ca.crt),证书(server.crt),密钥(server.key),Diffie-Hellman参数(dh2048.pem)和tls-auth密钥(ta.key)文件应已在keys目录。现在是时候将它们复制到/etc/openvpn

$ sudo cp keys/{server.crt,server.key,ca.crt,dh2048.pem,ta.key} /etc/openvpn

第3步-OpenVPN配置

我们可以继续配置OpenVPN服务。 (压缩的)样本配置可以在以下位置找到/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz:我们只需要将其解压缩到/etc /openvpn目录中即可:

$ gzip -d -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf > /dev/null

使用上面的命令,我们解压缩了原始文件,将其输出发送到stdout并通过/etc/openvpn/server.conf文件。验证配置文件中的默认值是否与我们生成的默认值相对应:

ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem


步骤4-设置防火墙并允许IP转发

我们几乎完成了VPN服务器的设置:现在,我们必须设置防火墙,以便允许来自端口的传入流量1194/udp(默认端口和协议):

$ sudo ufw allow openvpn

非常重要:默认情况下,仅客户端和服务器之间的流量通过VPN隧道传递,这不包括Internet流量。要更改此行为,我们首先必须取消注释该选项192服务器配置文件(/etc/openvpn/server.conf):

push "redirect-gateway def1 bypass-dhcp"

接下来,我们需要使用iptable规则通过Internet对VPN客户端进行NAT。请注意,我指定了eth0接口,但是您需要根据计算机上使用的接口调整规则:

$ sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

设置这种方式,但是,该规则将不会保留重启。为了使其持久,我们必须将其添加到/etc/ufw/before.rules文件。该文件包含ufw在命令行定义的规则之前应用的规则。将规则添加为文件中的第一个规则:

*nat
:POSTROUTING ACCEPT [0:0] 
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT

现在我们必须启用数据包转发。首先,我们需要编辑/etc/sysctl.conf文件并取消注释该行28

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

此时,我们应该重新加载配置:

$ sudo sysctl -p /etc/sysctl.conf

我们仍然需要允许通过ufw防火墙转发数据包。打开/etc/default/ufw并改变DEFAULT_FORWARD_POLICYDROPACCEPT

# 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"

最后,重新加载防火墙:

$ sudo ufw reload

第5步-启动服务

现在,我们将使用systemctl来启动服务器,将包含我们配置文件名称的变量传递给服务单元。通过使用systemd,我们可以在值前面加上@符号。例如:

$ sudo systemctl start openvpn@server

此时,服务器应已启动并正在运行。通过运行验证

$ sudo systemctl is-active openvpn@server

该命令应返回”active”。



第6步-客户端设置

对于我们要使用的每个客户端,我们都必须生成一个证书/密钥对,就像我们对服务器所做的一样:

$ source vars && ./build-key client

现在,我们有两个选择:我们可以将必要的文件复制到客户端,也可以生成一个.ovpn文件,其中嵌入了这些文件的内容。我们将专注于第二种选择。

就像我们在服务器端所做的一样,我们将以示例配置为起点。让我们创建一个专用目录并复制模板:

$ mkdir clients && cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf clients/client.ovpn

遵循文件中注释非常清楚的部分,并使选项适应服务器配置中定义的选项(在我们的示例中,该选项已完成)。通过修改设置(第42行)来设置服务器ip和端口:


remote my-server-1 1194

如果不使用默认值,则必须用服务器ip替换”my-server”,并且必须更改端口。接下来,取消注释以下行(61,62):

# Downgrade privileges after initialization (non-Windows only)
;user nobody
;group nogroup

现在,我们将用文件的实际内容替换对CA,证书,密钥,dh参数和tls-auth密钥的引用:这样,我们将创建一个嵌入的,易于导出的配置。第一个注释参考(第88-90和108行)

#ca ca.crt
#cert client.crt
#key client.key
#tls-auth ta.key 1

接下来,在适当的标签之间复制提到的文件的内容。证书颁发机构的内容必须包含在标签之间,内部证书文件的内容以及之间的密钥之间。仅作为示例,考虑一下CA:

<ca>
# Here goes the content of the ca.crt file
</ca>

对于tls-auth键,我们将执行以下操作:

key-direction 1
<tls-auth>
# The content of the ta.key file
</tls-auth>

最后,只需将文件导入客户端应用程序,就可以开始使用了。

Android连接示例

要从android连接到我们的openvpn服务器,我们将使用官方的openvpn应用程序:OpenVpn Connect。安装并启动后,将出现以下菜单:

Android Openvpn App Menu

Android Openvpn应用程式选单



点击最后一项,OVPN Profile在文件选择器中,导航到.ovpn文件的存储位置,然后选择它,然后点击右上角的”import”。该配置文件应该已经正确导入:

Android Openvpn App Import

Android Openvpn应用程序导入

现在,与以前一样,点击添加,然后在以下屏幕上激活连接:

Android Openvpn App Connected

Android Openvpn应用已连接

成功!

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10260.html,未经允许,请勿转载。