如何在 Ubuntu 14.04 上安装 Tinc 并设置基本 VPN

介绍

在本教程中,我们将讨论如何使用Tinc,一个开源的虚拟私人网络(VPN)魔鬼,创建一个安全的VPN,你的服务器可以通信,就像他们是在本地网络上一样。

Tinc 有几个功能使其有用,包括加密,可选压缩,自动网格路由(如果可能的话,VPN流量会直接在通信服务器之间进行路由),以及易于扩展。这些功能将Tinc与OpenVPN等其他VPN解决方案区分开来,使其成为从许多地理分布的小型网络中创建VPN的好解决方案。

<$>[注] 注: 如果您想快速轻松地设置Tinc mesh VPN,请参阅本教程: 如何使用Ansible和Tinc VPN来保护您的服务器基础设施

前提条件

要完成本教程,您将需要在至少三个Ubuntu 14.04服务器上 root 访问. 设置 root 访问的说明可以在这里找到(步骤 3 和 4): [Ubuntu 14.04 初始服务器设置(https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-14-04)。

如果您计划在自己的环境中使用此功能,您将需要计划您的服务器需要如何互相访问,并将本教程中的示例适应您的需求。

如果您想准确地遵循本教程,请在同一数据中心创建两个VPS,使用私人网络,并在单独的数据中心创建另一个VPS,我们将在NYC2数据中心创建两个VPS,在AMS2数据中心创建一个VPS,名称为:

  • externalnyc:所有VPN节点将连接到这个服务器,并且必须保持连接以确保适当的VPN功能。可以配置类似于此类的额外服务器以提供冗余性,如果需要
  • internalnyc:通过其 _private_网络接口
  • ams1连接到 externalnyc VPN节点通过公共互联网

我们的目标

以下是我们想要设置的VPN的图表(在前提条件中描述):

Tinc VPN Setup

绿色代表我们的VPN,灰色代表公共互联网,橙色代表私人网络。

让我们从安装Tinc开始!

安装Tinc

在您想要加入私人网络的每个VPS上,安装Tinc。

1sudo apt-get update

然后通过 apt 安装 Tinc:

1sudo apt-get install tinc

现在Tinc已安装,让我们看看Tinc配置。

Tinc 配置

Tinc 使用netname来区分一个 Tinc VPN 和另一个 VPN (在多个 VPN 的情况下),即使您只计划配置一个 VPN,也建议使用 netname。

每个服务器将成为我们VPN的一部分,需要以下三个配置组件:

*配置文件: tinc.conf、 tinc-up 和 tinc-down,例如 *公共/私钥对:用于加密和节点身份验证 *主机配置文件:包含公共密钥和其他VPN配置

让我们从配置我们的 externalnyc 节点开始。

外部配置

externalnyc上,创建我们的VPN的配置目录结构,称为netname:

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

现在打开 tinc.conf 来编辑:

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

现在添加以下几行:

1Name = externalnyc
2AddressFamily = ipv4
3Interface = tun0

这简单地配置了一个名为externalnyc的节点,有一个网络接口将使用IPv4称为tun0

接下来,让我们创建一个 externalnyc 主机配置文件:

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

添加以下行(在这里取代您的VPS的公共IP地址):

1Address = externalnyc_public_IP
2Subnet = 10.0.0.1/32

最终,这个文件将在其他服务器上使用,以与这个服务器进行通信. 该地址指定了其他节点将如何连接到这个服务器,而子网则指定了这个大门将服务的子网。

现在用以下命令生成这个主机的公共/私人键对:

1sudo tincd -n netname -K4096

这会创建私钥(/etc/tinc/netname/rsa_key.priv),并将公共钥匙附加到我们最近创建的 externalnyc 主机配置文件(/etc/tinc/netname/hosts/externalnyc)。

现在我们必须创建tinc-up,这个脚本将在我们的 netname VPN 启动时运行。

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

添加以下几行:

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

当我们启动我们的VPN时,这个脚本将运行,以创建我们的VPN将使用的网络接口。

让我们也创建一个脚本来删除当我们的VPN被阻止时的网络接口:

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

添加以下几行:

1#!/bin/sh
2ifconfig $INTERFACE down

保存和停止。

最后,使 tinc 网络脚本可执行:

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

保存和停止。

让我们转到我们的其他节点。

配置 internalnyc 和 ams1

这些步骤在 internalnycams1 上都需要执行,将注意到稍微的变化。

internalnycams1上,创建我们的VPN的配置目录结构,称为netname,并编辑Tinc配置文件:

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

添加以下行(以节点名称代替名称):

1Name = node_name
2AddressFamily = ipv4
3Interface = tun0
4ConnectTo = externalnyc

这些节点被配置为尝试连接到externalnyc(我们之前创建的节点)。

接下来,让我们创建主机配置文件:

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

对于 internalnyc,添加此行:

1Subnet = 10.0.0.2/32

对于 ams1,添加此行:

1Subnet = 10.0.0.3/32

请注意,数字不同. 保存和停止。

接下来,生成 keypairs:

1sudo tincd -n netname -K4096

创建网络接口启动脚本:

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

对于 internalnyc,添加此行:

1ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

对于 ams1,添加此行:

1ifconfig $INTERFACE 10.0.0.3 netmask 255.255.255.0

这些IP地址是如何在VPN上访问这些节点。

现在创建网络界面停止脚本:

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

再加上这条线:

1ifconfig $INTERFACE down

保存和停止。

最后,使 tinc 网络脚本可执行:

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

保存和停止。

现在我们必须将主机配置文件分发到每个节点。

把钥匙分发

如果你碰巧使用了配置管理系统,这是一个很好的应用程序. 至少,每一个想要直接与另一个节点通信的节点都必须有交换的公共密钥,这些都位于主机配置文件中。 例如,在我们的情况下,只有 _externalnyc 需要与其他节点交换公共密钥。 如果你只将每个公共密钥复制到节点的所有成员,就更容易管理。 请注意,当它被复制到 internalc 时,您将希望在 externalnyc 的主机配置文件中更改地址值,以便在私人网络上建立连接。

因为我们的VPN被称为netname,这里是主机配置文件的位置: /etc/tinc/netname/hosts

externalnyc 和 internalnyc 之间的交换密钥

internalnyc上,将其主机配置文件复制到 externalnyc:

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

然后在 externalnyc上,将 internalnyc 的文件复制到相应的位置:

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

然后在 externalnyc 再次,复制其主机配置文件到 internalnyc:

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

internalnyc上,将 externalnyc 的文件复制到相应的位置:

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

internalnyc上,让我们编辑 _externalnyc 的主机配置文件,以便将地址字段设置为 _externalnyc 的私人 IP 地址(因此 internalnyc 将通过私人网络连接到 VPN)。

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

地址值更改为 _externalnyc 的私人 IP 地址:

1Address = externalnyc_private_IP

保存和停止. 现在让我们继续到我们的剩余节点,ams1。

externalnyc 和 ams1 之间的交换密钥

ams1上,将其主机配置文件复制到 externalnyc:

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

然后在 externalnyc上,将 ams1 的文件复制到相应的位置:

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

然后在 externalnyc上再次复制其主机配置文件到 ams1:

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

ams1上,将 externalnyc 的文件复制到相应的位置:

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

额外节点之间的交换密钥

如果你正在创建一个更大的VPN,现在是交换这些其他节点之间的密钥的好时机。记住,如果你想让两个节点彼此直接通信(没有彼此之间的转发服务器),他们需要交换他们的密钥/主机配置文件,他们需要能够访问彼此的真实网络接口。

测试我们的配置

每个节点上,从 externalnyc 开始,在调试模式中启动Tinc(netname是我们的VPN的名称):

1sudo tincd -n netname -D -d3

在每个节点上启动 DAEMON 后,您应该看到每个节点的名称输出,因为它们连接到 externalnyc. 现在让我们通过 VPN 测试连接。

在一个单独的窗口中,在 ams1上, ping internalnyc 的 VPN IP 地址(我们之前分配到 10.0.0.2):

1ping 10.0.0.2

ping 应该正常工作,你应该在其他窗口中看到有关 VPN 连接的一些调试输出,这表明 ams1 能够通过 externalnyc 到 internalnyc 通过 VPN 进行通信。

您还可以使用VPN接口进行任何其他网络通信,如应用连接,复制文件和SSH。

在每个 Tinc daemon 调试窗口中,通过按 CTRL-\ 来终止 DAEMON。

**注:如果连接不起作用,请确保防火墙不会阻止连接或转发。

配置 Tinc 到 Boot 上启动

在Tinc init脚本正常工作之前,我们必须将VPN的名称放入nets.boot配置文件中。

在每个节点上,编辑 nets.boot:

1sudo vi /etc/tinc/nets.boot

将您的VPN(s)名称添加到此文件中. 我们的名称是网名:

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

Tinc 现在已配置为启动,并且可以通过服务命令进行控制. 如果您想启动它,现在在每个节点上运行以下命令:

1sudo service tinc start

您的Tinc VPN已设置。

结论

现在你已经通过了这个教程,你应该有一个很好的基础来构建你的VPN来满足你的需求。Tinc非常灵活,任何节点都可以配置到连接到任何其他节点(它可以通过网络访问),所以它可以作为一个网格VPN,而不是依赖单个节点。

好运!

Published At
Categories with 技术
comments powered by Disqus