介绍
在本教程中,我们将介绍如何使用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的图(在先决条件中描述):
绿色代表我们的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
这些步骤需要在两个internalnyc和ams1,与将要注意的微小变化。
在internalnyc和ams1,为我们的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
然后在externalnyc的internalnyc的文件复制到适当的位置:
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
然后在externalnyc的ams1的文件复制到适当的位置:
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,而不依赖于单个节点。
祝你好运!