如何安装和TINC建立一个基本的VPN在Ubuntu 14.04

在本教程中,我们将在如何使用TINC,一个开源的虚拟专用网络(VPN)进程,创建,好像他们是在本地网络上的服务器可以在通信安全的VPN。我们还将演示如何使用TINC到一个安全的通道设置成专用网络。我们将使用Ubuntu 14.04服务器,但是该配置可以适于与任何其他操作系统使用。

介绍

在本教程中,我们将介绍如何使用Tinc(一种开源虚拟专用网络(VPN)守护程序)来创建安全的VPN,您的服务器可以像在本地网络上一样进行通信。 我们还将演示如何使用Tinc设置到私有网络的安全隧道。 我们将使用Ubuntu 14.04服务器,但配置可以适用于任何其他操作系统。

Tinc的一些功能使它有用包括加密,可选压缩,自动网格路由(VPN流量直接在通信服务器之间路由,如果可能),并且容易扩展。 这些功能将Tinc与其他VPN解决方案(如OpenVPN)区分开来,使其成为从地理上分布的许多小型网络创建VPN的良好解决方案。 许多操作系统都支持Tinc,包括Linux,Windows和Mac OS X.

注意:如果你想建立一个TINC网VPN快速,轻松地,看看这个教程: 如何使用Ansible和TINC VPN保护您的服务器基础架构

先决条件

要完成本教程,您将需要至少三个Ubuntu 14.04服务器的根访问权限。 说明设置root访问权限可以在这里找到(第3步和4): 与Ubuntu 14.04初始服务器设置

如果您计划在自己的环境中使用它,您必须计划服务器如何访问彼此,并根据您自己的需要调整本教程中提供的示例。 如果您要根据自己的设置进行调整,请务必使用您自己的值替换示例中突出显示的值。

如果您想要完全遵循本教程,请在相同的数据中心中使用专用网络创建两个VPS,并在单独的数据中心中创建另一个VPS。 我们将在NYC2数据中心中创建两个VPS,并在AMS2数据中心中创建两个具有以下名称的VPS:

  • externalnyc:所有VPN节点将连接到该服务器,连接必须保持正确的VPN功能。 如果需要,可以与此类似地配置附加服务器以提供冗余。
  • internalnyc:连接使用其专用网络接口externalnyc VPN节点
  • ams1:连接在公共互联网上externalnyc VPN节点

我们的目标

下面是我们要设置的VPN的图(在先决条件中描述):

Tinc VPN设置

绿色代表我们的VPN,灰色代表公共互联网,橙色代表私有网络。 所有三个服务器都可以在VPN上通信,即使专用网络不可访问ams1。

让我们开始安装Tinc!

安装Tinc

在要加入专用网络的每个VPS上,安装Tinc。 让我们从更新apt:

sudo apt-get update

然后通过apt安装Tinc:

sudo apt-get install tinc

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

Tinc配置

Tinc使用“网络名称”来区分一个Tinc VPN与另一个(在多个VPN的情况下),并且建议使用网络名称,即使您仅计划配置一个VPN。 我们呼吁我们的简单VPN“ 网络名 ”。

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

  • 配置文件: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主机配置文件:

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

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

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

最终,此文件将用于其他服务器与此服务器通信。 该地址指定其他节点如何连接到此服务器,子网指定此守护程序将服务的子网。 保存并退出。

现在使用以下命令为此主机生成公共/私有密钥对:

sudo tincd -n netname -K4096

这将创建私钥(在/ etc / TINC / 网络名 /rsa_key.priv),并追加公钥来,我们最近创建的externalnyc主机配置文件(/ etc / TINC /网络名/主机/ externalnyc)。

现在,我们必须创建tinc-up ,每当我们的网络名 VPN启动将运行该脚本。 立即打开文件进行编辑:

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

添加以下行:

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

当我们开始我们的VPN,这个脚本将运行创建我们的VPN将使用的网络接口。 在VPN上,此服务器的IP地址为10.0.0.1。

让我们还创建一个脚本,当我们的VPN停止时删除网络接口:

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

添加以下行:

#!/bin/sh
ifconfig $INTERFACE down

保存并退出。

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

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

保存并退出。

让我们继续到我们的其他节点。

配置internalnyc和ams1

这些步骤需要在两个internalnycams1,与将要注意的微小变化。

internalnycams1,为我们的VPN称为“网络名”配置目录结构和编辑TINC配置文件:

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

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

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

这些节点被配置为尝试连接到“externalnyc”(我们之前创建的节点)。 保存并退出。

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

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

这些IP地址是如何在VPN上访问这些节点。 保存并退出。

现在创建网络接口停止脚本:

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

并添加以下行:

ifconfig $INTERFACE down

保存并退出。

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

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

保存并退出。

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

分发密钥

如果你碰巧使用配置管理系统,这里是一个很好的应用程序。 最低限度地,希望与另一个节点直接通信的每个节点必须具有交换的公钥,其在主机配置文件内。 在我们的情况下,例如,仅externalnyc需要与其他节点交换公共密钥。 如果只是将每个公钥复制到节点的所有成员,则它更容易管理。 请注意,你将要在externalnyc的主机配置文件中的“地址”的值更改为它的私有IP地址,当它被复制到internalnyc,使连接建立在专用网络。

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

Exchange键在externalnyc和internalnyc之间

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

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

然后在externalnycinternalnyc的文件复制到适当的位置:

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

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

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

internalnyc,的文件复制externalnyc到合适的位置:

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

internalnyc,让我们这样的“地址”字段设置为externalnyc东道主配置文件的私有IP地址的编辑externalnyc(所以internalnyc将通过专用网络连接到VPN)。 编辑externalnyc的主机配置文件:

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

更改“地址”值externalnyc的私有IP地址:

Address = externalnyc_private_IP

保存并退出。 现在让我们继续我们的剩余节点ams1。

externalkey在externalnyc和ams1之间

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

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

然后在externalnycams1的文件复制到适当的位置:

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

然后再externalnyc,复制其主机配置文件ams1:

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

ams1,的文件复制externalnyc到合适的位置:

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

附加节点之间的Exchange键

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

测试我们的配置

每个节点上,从externalnyc,TINC开始在调试模式下,像这样(网络名是我们的VPN的名称):

sudo tincd -n netname -D -d3

在每个节点上启动守护程序后,在连接到externalnyc时,您应该看到每个节点的名称为output的输出。 现在让我们通过VPN测试连接。

在一个单独的窗口,在ams1,平internalnyc的VPN的IP地址(我们分配到10.0.0.2,更早):

ping 10.0.0.2

ping应该工作正常,你应该在其他窗口中看到关于VPN上的连接的一些调试输出。 这表明ams1能够通过VPN通过externalnyc与internalnyc通信。 按CTRL-C退出ping。

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

在每个Tinc守护程序调试窗口中,通过按CTRL- \退出守护程序。

注意 :如果连接不工作,确保您的防火墙没有阻止连接或转发。

将Tinc配置为在引导时启动

之前TINC初始化脚本将正常运行,我们必须把我们的VPN的名字进入了nets.boot配置文件。

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

sudo vi /etc/tinc/nets.boot

将VPN的名称添加到此文件中。 我们是“网名”:

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

保存并退出。 TINC现已配置为在引导时启动,它可以通过控制service命令。 如果要立即启动它,请在每个节点上运行以下命令:

sudo service tinc start

恭喜! 您的Tinc VPN已设置。

结论

现在您已经完成了本教程,您应该有一个良好的基础来构建您的VPN以满足您的需求。 Tinc非常灵活,任何节点都可以配置为连接到任何其他节点(它可以通过网络访问),因此它可以充当网状VPN,而不依赖于单个节点。

祝你好运!