在Ubuntu 16.04 LTS上安装带有Tinc的VPN

虚拟专用网络(VPN)是一种在更大的公共网络(如互联网)上运行的安全专用网络。近年来,VPN越来越受欢迎,主要是因为它们提供了更高的安全性和隐私性,而不需要设置昂贵而复杂的新硬件。它们还提供了其他几个优势,包括降低网络和支持成本。


VPN通过在公共网络中创建加密隧道来工作,并使用它在服务器和终端之间安全地发送数据。这些连接可以通过多种方式进行加密,并且有许多不同的VPN客户端和守护进程来适应您的架构、预算和经验水平。
Tinc就是这样一种解决方案(1)。它是一个开源的VPN守护进程,现在可用于各种平台,与类似的VPN客户端相比有几个优势。它提供安全可靠的加密、可选的压缩,并且随着网络的增长而易于扩展。自动全网格路由意味着VPN流量始终(只要可能)直接发送到目标机器,而无需进行中间传输,这通过限制数据被盗的可能性大大提高了安全性(3)。此外,由于Tinc VPN在IP级别的网络代码中显示为正常的网络设备,因此在设置Tinc VPN后不需要调整现有的软件。这使得Tinc VPN具有固有的可扩展性。

Tinc唯一的小问题是,有些人发现它的设置有点棘手。如果这听起来像你,别担心——今天我将带你通过一种(或多或少)无忧的方式,在你的服务器上启动并运行Tinc VPN。

先决条件

要完全遵循本教程,您将需要至少三台Ubuntu 16.04服务器,并在每台机器上拥有root访问权限。如果你没有这个或不确定这意味着什么,本教程不适合你——你应该先看看如何使用Ubuntu设置服务器(2)。

如果你从头开始构建一个服务器系统,你首先需要考虑你的机器将如何相互通信。在本教程中,我将使用我认为大多数人会选择的变量名,但请注意,您可能需要调整一些变量名以适应自己的设置。

如果你想完全遵循本教程,你首先需要在同一个数据中心设置两个VPS,然后在第二个数据中心创建第三个VPS。我的数据中心叫做NYC2,它有两个VPS,还有AMS2,它有第三个VPS。这些VPS被称为:

externalnyc–我们所有的VPN节点都将连接到此服务器,这意味着它必须保持连接并可用,以确保网络正常运行。如果您最终想在设置中添加额外的服务器,则需要以与externalnyc相同的方式设置它们。

internalnyc–此VPS使用专用网络接口连接到externalnyc VPN节点。

ams1–这是我们的公共VPN连接。它使用公共互联网连接到externalnyc。

目标
我们希望实现以下目标:

图片[1]_在Ubuntu 16.04 LTS上安装带有Tinc的VPN_马特资源网

我们的专用网络由绿线表示,连接所有三台服务器。橙色是我们的专用网络,将两台NYC2服务器连接在一起。所有三台服务器都可以通过VPN连接,尽管AMS1无法访问专用网络。

为此,请执行以下步骤:

安装Tinc
首先,我们需要安装Tinc。与往常一样,通过运行以下命令确保所有apt存储库都是最新的:

sudo apt-get update

然后通过apt以标准方式安装Tinc:

sudo apt-get install tinc

就是这样!您的机器现在将下载Tinc,以及您需要的任何先决条件。我们现在需要查看配置。

配置
配置Tinc可能与您习惯的其他VPN略有不同。它使用“网络名”来区分一个VPN和另一个VPN。当您在Tinc上运行多个VPN时,这会非常有用,但起初有点违反直觉。由于这是我们的第一个Tinc网络,让我们保持简单,并将我们的VPN称为“netname”。

现在,对于我们的每台服务器。每个都需要三个配置组件:

配置文件:tinc.conf、tinc-up、tinc-down和可选数量的其他文件。

公钥和私钥对:用于加密和身份验证。

主机配置文件:这些文件包含公钥和其他VPN配置元素。

现在让我们依次配置每个服务器。首先是externalnyc。

配置externalnyc
好的,现在谈谈螺母和螺栓。在externalnyc上,首先为VPN网络名创建配置目录结构。运行:

sudo mkdir -p /etc/tinc/netname/hosts

现在在您选择的文本编辑器中打开tinc.conf:

sudo vi /etc/tinc/netname/tinc.conf

将文件放在面前后,将以下内容添加到文件底部:

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

您在这里所做的就是配置一个名为externalnyc的节点,并告诉服务器它的网络接口将使用ipv4并被称为“tun0”。保存文件,然后关闭它。

接下来,我们需要为externalnyc创建一个主机配置文件。为此,请在文本编辑器中打开hosts配置文件:

sudo vi /etc/tinc/netname/hosts/externalnyc

再次,在此文件底部添加一些行,在第一行中替换您的VPS的公共IP地址:

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

这是其他服务器将用于连接到externalnyc的文件。地址告诉其他节点如何以及在何处连接到此服务器,子网地址是此守护程序将在其上操作的子网。请再次保存对此文件的更改并将其关闭。

现在我们需要为此主机生成公钥/私钥对。这很容易,只需运行:

sudo tincd -n netname -K4096

这将生成一个私有RSA密钥,并将一对公钥添加到我们刚刚创建的配置文件的末尾。如果你愿意,你可以再次打开它,看看这已经完成了。

现在,我们需要编写tinc,这是一个在VPN启动时运行的小脚本。打开以下文件进行编辑:

sudo vi /etc/tinc/netname/tinc-up

并添加:

#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0

每当启动VPN网络名称时,此脚本都会运行。它将创建一个网络接口供我们的VPN使用,在这个VPN上,externalnyc的IP地址为10.0.0.1。

但是当VPN停止时,我们希望这个网络接口消失,所以我们需要一个额外的脚本。这应该附加到tinc down中。打开:

sudo vi /etc/tinc/netname/tinc-down

然后添加:

#!/bin/sh
ifconfig $INTERFACE down

再次保存并退出。我们现在有了脚本,但为了使它们工作,需要将它们标记为可执行。这很容易,使用命令行:

sudo chmod 755 /etc/tinc/netname/tinc-*

保存并退出,即可完成此服务器的配置。接下来是internalnyc和ams1。

配置internalnyc和ams1
要配置剩下的两台服务器,您需要在每台机器上运行相同的命令。有一些细微的变化,我会指出,但过程基本相同。

正如我们上面对externalnyc所做的那样,我们首先需要为配置文件创建目录结构。在每台服务器上,运行以下命令,然后打开Tinc配置文件进行编辑:

 sudo mkdir -p /etc/tinc/netname/hosts
sudo vi /etc/tinc/netname/tinc.conf

然后在此文件底部添加几行,将“node_name”替换为每个节点的名称:

Name = node_name
AddressFamily = ipv4
Interface = tun0
ConnectTo = externalnyc

您可以看到,我们的两台服务器现在都配置为尝试连接到externalnyc。保存此文件,然后将其关闭。

现在我们需要制作主机配置文件。运行:

 sudo vi /etc/tinc/netname/hosts/node_name

然后,对于internalnyc,添加以下行:

Subnet = 10.0.0.2/32

对于ams1,添加以下行:

Subnet = 10.0.0.3/32

这里唯一的区别是地址不同,所以我们可以区分我们的服务器。保存此文件,然后将其关闭。

现在,和以前一样,我们需要生成公钥/私钥对,并创建网络接口启动脚本。在每台服务器上,运行:

 sudo tincd -n netname -K4096

然后:

 sudo vi /etc/tinc/netname/tinc-up

现在。对于每台服务器,我们需要使用我们之前指定的地址。如果你准确地跟随我,对于internalnyc,你需要补充:

ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

对于ams1:

ifconfig $INTERFACE 10.0.0.3 netmask 255.255.255.0

但是,如果您在上面指定了不同的地址,请在此处也进行更改。保存这些文件,然后退出。我们快到了。

我们只需要让网络接口停止脚本,就像以前一样:

 sudo vi /etc/tinc/netname/tinc-down

然后在两台服务器上添加此行:

ifconfig $INTERFACE down

最后一点配置是使我们的新脚本可执行:

 sudo chmod 755 /etc/tinc/netname/tinc-*

保存并退出。呼。如果一切顺利,现在所有三台服务器都已配置。现在来实现密码学。

分发密钥
如果你已经在使用配置管理系统,那么你很幸运。在理想情况下,我们现在创建的每个节点都需要能够使用公钥/私钥接口直接与另一个节点通信。如上所述,密钥现在位于每台服务器的主机配置文件中。在我们这里构建的简单网络中,实际上只有externalnyc需要与其他节点交换密钥。

因此,最简单的方法就是将每个公钥复制到各个节点的所有成员。这实际上很容易,只要在复制externalnyc配置文件时小心地将其配置文件中的“address”值更改为它自己的私有IP地址即可。这样,连接将通过私有网络建立。

如果你跟踪我并称你的VPN为“netname”,那么主机配置文件在这里:/etc/tinc/netname/hosts

externalnyc和internalnyc之间的密钥交换
这很简单。在internalnyc上,找到hosts配置文件并将其复制到externalnyc:

scp /etc/tinc/netname/hosts/internalnyc user@externalnyc_private_IP:/tmp

然后,在externalnyc上,将相同的文件复制到正确的位置:

 cd /etc/tinc/netname/hosts; sudo cp /tmp/internalnyc .

现在我们做相反的程序。在externalnyc上,将hosts配置文件复制到internalnyc:

 scp /etc/tinc/netname/hosts/externalnyc user@internalnyc_private_IP:/tmp

然后在internalnyc上复制文件,使其位于正确的位置:

 cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .

现在我们需要在internalnyc上编辑externalnyc的主机配置文件,使地址正确。这样节点将通过专用网络连接到VPN。因此,在internalnyc上,打开externalnyc的主机配置文件:

 sudo vi /etc/tinc/netname/hosts/externalnyc

并将地址值更改为externalnyc的私有IP地址,如下所示:

Address = externalnyc_private_IP

保存文件,然后退出。这两把钥匙就完成了。现在我们只需要与剩下的一个节点交换密钥。

externalnyc和ams1之间的交换密钥
这里的过程非常相似。使用ams1,将hosts配置文件复制到externalnyc:

scp /etc/tinc/netname/hosts/ams1 user@externalnyc_public_IP:/tmp

然后再次使用externalnyc将其复制到正确的位置:

 cd /etc/tinc/netname/hosts; sudo cp /tmp/ams1 .

在externalnyc上,以另一种方式复制文件,将其复制到ams1:

 scp /etc/tinc/netname/hosts/externalnyc user@ams1_public_IP:/tmp

在ams1上,再次复制此文件,使其位于正确的位置:

 cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .

您已经完成了密钥交换。理论上,您现在已经通过Tinc获得了一个可用的加密VPN。如果您已经完全遵循了本教程,则可以继续测试您的设置。但是,如果您也借此机会添加了额外的节点,那么现在是交换所需所有密钥的好时机。

请记住,如果您使用的是中央节点,就像我在这里做的那样,您不需要将所有密钥复制到所有服务器。但是,如果你想让节点能够直接相互通信,它们需要交换密钥。执行此操作的过程与我上面描述的相同——只需根据需要进行尽可能多的迭代,即可实现所需的连接。

测试
现在你应该准备好测试了。为此,最好在调试模式下启动Tinc,这样我们就可以发现任何错误,并在出现问题时获得更多信息。请记住,配置不当的VPN实际上可能存在安全风险,因此在开始将VPN用于任何重要用途之前,请确保一切正常。

要在调试模式下启动Tinc,在每个节点上,从externalnyc开始,运行:

sudo tincd -n netname -D -d3

当然,如果你给VPN起了不同的名字,请将“netname”变量更改为适当的名称。

在每个节点上启动守护进程后,它应该返回输出,给出每个节点连接时的名称。如果这没有发生,你在某个地方犯了错误。

现在,我们可以测试VPN。在ams1的新窗口中,使用其IP地址ping internalnyc。我们之前将其分配给10.0.0.2,因此键入:

 ping 10.0.0.2

希望你的ping能正常工作。你也应该在其他窗口中看到一些调试输出,描述你刚刚建立的连接。Ams1现在已通过您的新VPN连接到externalnyc,并可以通过它连接到internalnyc。点击CTRL-C,ping将停止。

现在你有了一个安全的VPN连接,你可以将它用于任何其他类型的网络通信——应用程序连接、复制文件、SSH或任何你喜欢的东西。

如果你的ping不起作用,但你认为你做得对,那可能是防火墙挡住了路。请检查防火墙设置,然后重试。

开机时发出叮当声
还有最后一件事。如果您现在要将Tinc VPN用于所有网络,您可能需要将其设置为启动时启动。您需要在每个节点上通过编辑nets.boot配置文件来执行此操作。使用以下命令打开文件:

 sudo vi /etc/tinc/nets.boot

然后将新VPN的名称添加到此文件中。如果你像我一样选择“netname”,这将如下所示:

# This file contains all names of the networks to be started on system 	startup.
netname

保存并退出,你就完成了。Tinc现在正在工作,并将启动。干得好。

如果需要控制Tinc,现在可以运行“service”命令。在每个节点上,只需运行:

 sudo service tinc start

玩一玩。通过此命令可以实现大多数基本控制。

结论
现在,您应该在所有计算机上都有一个通过Tinc运行的安全VPN连接。此VPN可用作建立进一步网络功能的基础。

如果你想在未来添加更多节点,或者将Tinc与其他VPN结合使用,Tinc将允许你这样做。每个额外节点的过程与我上面描述的相同,您应该能够很容易地看到哪些变量和地址需要更改。请记住,如果你想让节点能够直接相互连接,你需要直接在它们之间交换密钥。像这样,Tinc作为网状VPN运行,这比我的方法更安全。否则,你可以像我一样设置你的网络,让所有东西都通过一个中心节点。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容