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

2023-11-11

介绍

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

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

Note:如果您想快速轻松地设置 Tinc 网状 VPN,请查看本教程:如何使用 Ansible 和 Tinc VPN 保护您的服务器基础设施.

先决条件

要完成本教程,您需要至少三台 Ubuntu 14.04 服务器上的 root 访问权限。可在此处找到设置 root 访问权限的说明(步骤 3 和 4):使用 Ubuntu 14.04 进行初始服务器设置.

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

如果您想完全按照本教程进行操作,请在同一数据中心中创建两个具有专用网络的 VPS,并在单独的数据中心中创建另一个 VPS。我们将在 NYC2 数据中心创建两个 VPS,在 AMS2 数据中心创建一个 VPS,名称如下:

  • 外部纽约:所有 VPN 节点都将连接到此服务器,并且必须保持连接才能正常运行 VPN 功能。如果需要,可以采用与此类似的方式配置其他服务器以提供冗余。
  • 内部纽约:连接到外部纽约VPN 节点使用其private网络接口
  • ams1:连接到外部纽约公共互联网上的 VPN 节点

Our Goal

这是我们要设置的 VPN 的图表(先决条件中描述):

Tinc VPN Setup

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

让我们开始安装 Tinc!

安装Tinc

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

sudo apt-get update

然后通过apt安装Tinc:

sudo apt-get install tinc

现在Tinc已经安装好了,让我们看看Tinc的配置。

锡配置

Tinc uses a “netname” to distinguish one Tinc VPN from another (in case of multiple VPNs), and it is recommended to use a netname even if you are only planning on configuring one VPN. We will call our VPN “netname” for simplicity.

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

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

让我们从配置我们的外部纽约 node.

配置externalnyc

On 外部纽约,为我们的 VPN 创建名为“netname”的配置目录结构:

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

现在打开tinc.conf进行编辑:

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

现在添加以下行:

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

This simply configures a node called externalnyc, with a network interface that will use IPv4 called “tun0”. Save and quit.

接下来,让我们创建一个外部纽约主机配置文件:

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/netname/rsa_key.priv) 并将公钥附加到外部纽约我们最近创建的主机配置文件(/etc/tinc/netname/hosts/外部纽约).

现在我们必须创建tinc-up,每当我们的netnameVPN 已启动。现在打开文件进行编辑:

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

两者都需要执行这些步骤内部纽约 and ams1,略有变化,将被注意到。

On 内部纽约 and ams1,为我们的 VPN 创建名为“netname”的配置目录结构并编辑 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”(我们之前创建的节点)。保存并退出。

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

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

For 内部纽约,添加这一行:

Subnet = 10.0.0.2/32

For ams1,添加这一行:

Subnet = 10.0.0.3/32

请注意,数字不同。保存并退出。

接下来,生成密钥对:

sudo tincd -n netname -K4096

并创建网络接口启动脚本:

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

For 内部纽约,添加这一行:

ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

For 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-*

保存并退出。

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

分发密钥

如果您碰巧使用配置管理系统,这里是一个很好的应用程序。至少,想要与另一个节点直接通信的每个节点都必须交换公钥,该公钥位于主机配置文件内。以我们的例子为例,只有外部纽约需要与其他节点交换公钥。如果您只需将每个公钥复制到节点的所有成员,管理起来会更容易。请注意,您需要更改中的“地址”值外部纽约的主机配置文件复制到其私有IP地址时内部纽约,以便通过专用网络建立连接。

Because our VPN is called “netname”, here is the location of the hosts configuration files: /etc/tinc/netname/hosts

在externalnyc 和internalnyc 之间交换密钥

On 内部纽约,将其hosts配置文件复制到外部纽约:

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

Then on 外部纽约,复制内部纽约的文件到适当的位置:

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

Then on 外部纽约再次将其主机配置文件复制到内部纽约:

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

On 内部纽约, copy 外部纽约的文件到适当的位置:

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

On 内部纽约,我们来编辑一下外部纽约的主机配置文件,因此“地址”字段设置为外部纽约的私有IP地址(因此internalnyc将通过私有网络连接到VPN)。编辑外部纽约的主机配置文件:

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

将“地址”值更改为外部纽约的私有IP地址:

Address = externalnyc_private_IP

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

在 externalnyc 和 ams1 之间交换密钥

On ams1,将其hosts配置文件复制到外部纽约:

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

Then on 外部纽约,复制ams1的文件到适当的位置:

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

Then on 外部纽约再次将其主机配置文件复制到ams1:

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

On ams1, copy 外部纽约的文件到适当的位置:

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

在附加节点之间交换密钥

如果您要创建更大的 VPN,那么现在是在其他节点之间交换密钥的好时机。请记住,如果您希望两个节点直接相互通信(之间没有转发服务器),它们需要交换其密钥/主机配置文件,并且需要能够访问彼此的真实网络接口。此外,只需将每个主机配置复制到 VPN 中的每个节点即可。

测试我们的配置

On each节点,开始于外部纽约,在调试模式下启动 Tinc,如下所示(网络名称是我们 VPN 的名称):

sudo tincd -n netname -D -d3

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

在单独的窗口中,ams1, ping 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-\ 退出守护程序。

Note:如果连接不起作用,请确保您的防火墙没有阻止连接或转发。

将 Tinc 配置为开机自启动

在 Tinc 初始化脚本正常运行之前,我们必须将 VPN 的名称放入nets.boot配置文件。

On 每个节点,编辑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,而不依赖于单个节点。

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ubuntu 14.04 上安装 Tinc 并设置基本 VPN 的相关文章

  • 如何列出静态链接的 python 版本中可用的所有 openssl 密码?

    在python 2 7 8到2 7 9升级中 ssl模块从使用更改为 DEFAULT CIPHERS DEFAULT aNULL eNULL LOW EXPORT SSLv2 to DEFAULT CIPHERS ECDH AESGCM D
  • 无法运行 android/sdk/build-tools/23.0.2/aapt

    最近在 Ubuntu 15 上安装了 Android Studio 1 0 1 由于某些原因是旧版本 我正在尝试创建一个新项目 每当我构建它时 我都会收到此错误 无法运行程序 home user Android Sdk build tool
  • 具有相同容器端口的多个 docker 容器连接到同一网络

    我有一个依赖于多个 Docker 容器的应用程序 我使用 docker compose 以便所有这些都位于同一网络中以进行容器间通信 但是 我的两个容器正在各自容器内侦听相同的端口 8080 但是映射到主机上的不同端口 8072 8073
  • 如何检测CSRF漏洞[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定一个网站 如何检测潜在的 CSRF 漏洞 提前致谢 这是一个CSRF https www owasp org index php
  • Symfony 5.4 Security Bundle,注册后无法登录

    我在 5 4 版本上构建空的新项目 我使用这些命令来构建项目 composer create project symfony skeleton 5 4 testapp54 cd testapp54 composer require weba
  • 在 Python 中通过网络发送对象的最佳方式是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我需要通过网络发送对象 我将使用 Twisted 并且我刚刚开始查看它的文档 据我所知 python实现套接字的唯一方式是通过文本 那么我如何使
  • 调试断言失败。表达式(流!=NULL)

    我收到以下错误 调试断言失败 表达式 流 NULL 文件 f dd vctools crty bld self x86 crt src fwrite c 创建 4 个线程时 CPU 使用率 100 该代码最初运行良好一段时间 然后给出此错误
  • 非加密用途的最快哈希值?

    我本质上是在准备要放入数据库的短语 它们可能格式错误 所以我想存储它们的简短散列 我将简单地比较它们是否存在 所以散列是理想的 我假设 MD5 在处理 100 000 个请求时相当慢 所以我想知道散列短语的最佳方法是什么 也许推出我自己的散
  • 未找到命令“ember”

    看来我搞砸了 ember cli 安装 我已经使用 sudo 安装了 npm 但是在阅读了 npm 上 ember cli 和 sudo 的一些问题后 我按照此处的说明卸载并重新安装https gist github com isaacs
  • 将 CCtray 与 Jenkins 结合使用,同时启用安全性(使用 HTTPS)

    我将 Jenkins 服务器配置为仅使用 HTTPS 并启用安全性 我也不喜欢任何未登录的人查看仪表板 即使它是空的 在这里 我禁用了 匿名 的 读取 访问权限 到目前为止 所有这些都完全符合我的喜好 但想要通过例如向远程客户端添加一些构建
  • 是否有一种加密技术可以将 8 位数字变成 10 或 11 位或更少的数字?

    我见过的许多加密技术都可以轻松加密一个简单的 8 位数字 如 12345678 但结果通常是 8745b34097af8bc9de087e98deb8707aac8797d097f 编造的 但你明白了 有没有办法加密这个 8 位数字 但生成
  • 是否可以在 PHP 中使用 file_get_contents 来破坏 CSRF 令牌验证

    在每个会话的表单上使用令牌的 CSRF 预防方法是一种流行的方法 但是 我不明白这种令牌方式如何保护file get contentsPHP 可以获取跨域文件表单的内容 gt 它可以获取表单上的令牌并使用它 那么这种token方式是如何运作
  • 客户端登录 - 如何在客户端安全地存储凭据?

    许多 API 都提供通过用户 密码组合远程访问其数据的功能 我想知道存储这些值的最佳方式是什么 高度安全的方式 即使 100 是不可能的 以便直接连接它们而无需每次都询问这些值 我推荐以下三种方法之一 使用身份验证令牌完全避免存储密码 在此
  • 在数据库中存储密码的最佳方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Apache 反向代理的基本身份验证问题

    我想为在 Ubuntu 服务器 12 04 1 上运行的 Apache 反向代理站点添加基本身份验证 网络应用程序是Jenkins http jenkins ci org运行在 Java EE 容器上 我在中添加了以下配置httpd con
  • Ubuntu 12.04 上的 DeepDive 安装指南

    在拥有以后很多问题 https stackoverflow com questions 22469188 deepdive installation postgresql error安装深潜项目 http deepdive stanford
  • 存储外部站点(不使用 OAuth)的用户凭据的智能方法是什么?

    我意识到 一般来说 您不应该直接存储用户凭据 即以纯文本形式 相反 最好存储它们的某种加密形式 但是 假设我创建了一个与其他第三方网站交互的网站 假设这个第 3 方站点提供了一个 API 需要用户的凭据 使用该站点 进行身份验证 如果我的目
  • 受信任的 1.5 小程序可以执行系统命令吗?

    如果是的话 这个能力有什么限制吗 具体来说 我需要以 Mac OSX 为目标 我以前用过这个在 Windows 系统上启动东西 但从未在 Mac 上尝试过 public void launchScript String args Strin
  • python:API 令牌生成及其危险

    我正在按照 Flask Web Development 一书来实现基于令牌的身份验证 基本上 用户使用 HTTP 基本身份验证对其进行身份验证 并为其生成令牌 s Serializer app config SECRET KEY expir
  • 在 JavaScript 中生成 RSA 密钥对

    我最近发现了这个 RSA JavaScript 库 http www ohdave com rsa http www ohdave com rsa 但是 它要求预先生成密钥 这是我的问题 问题 我想在 JavaScript 中生成 RSA

随机推荐

  • 如何在 Debian 9 上安装 Nginx

    Nginx 是一个开源 高性能的 HTTP 和反向代理服务器 为互联网上一些最大的网站提供支持 Nginx 可以用作独立的 Web 服务器 也可以用作反向代理 for Apache和其他网络服务器 与 Apache 相比 Nginx 可以处
  • 如何在 Linux 中将用户添加到组

    在本教程中 我们将解释如何在 Linux 系统中将用户添加到组 我们还将向您展示如何从组中删除用户以及如何创建 删除和列出组 Linux 群组 Linux 组是用于组织和管理 Linux 中的用户帐户的组织单位 组的主要目的是定义一组权限
  • 如何在 Ubuntu 18.04 上设置 DNS 名称服务器

    域名系统 DNS 是网络基础设施的核心部分 提供了一种将域名转换为 IP 地址的方法 您可以将 DNS 视为互联网的电话簿 连接到互联网的每台设备均由其 IP 地址唯一标识 当您在浏览器中输入要访问的网站时 必须将其域名转换为相应的IP地址
  • 如何在 Debian Linux 上挂载 exFAT 驱动器

    exFAT 扩展文件分配表 是 Microsoft 专有的文件系统 针对 SD 卡和 USB 闪存驱动器等闪存设备进行了优化 它旨在取代旧的 32 位 FAT32 文件系统 该系统无法存储大于 4 GB 的文件 所有最新版本的 Window
  • 如何在 CentOS 8 上安装 Elasticsearch

    Elasticsearch 是一个开源分布式全文搜索和分析引擎 它支持 RESTful 操作 允许您实时存储 搜索和分析大量数据 Elasticsearch 是最流行的搜索引擎之一 为具有复杂搜索要求的应用程序 例如大型电子商务商店和分析应
  • 如何在树莓派上安装Java

    Java 是最流行的编程语言之一 用于构建不同类型的应用程序和系统 Java 有两种不同的实现 Oracle Java 和 OpenJDK OpenJDK 是 Java 平台的开源实现 Oracle Java 有一些额外的商业功能和lice
  • 如何在 CentOS 7 上安装 Tomcat 8.5

    本教程向您展示如何在 CentOS 7 上安装 Tomcat 8 5 Tomcat 是 Java Servlet JavaServer Pages Java 表达式语言和 Java WebSocket 技术的开源实现 先决条件 在开始本教程
  • Python 中的 numpy.square()

    Python numpy square 函数返回一个新数组 其元素值作为源数组元素的平方 源数组保持不变 Python numpy square 示例 它是一个快速求矩阵元素平方的实用函数 让我们看一下带有整数 浮点和复数类型数组元素的 n
  • 如何在 Ubuntu 14.04 上安装和保护 phpMyAdmin

    介绍 虽然许多用户需要 MySQL 等数据库管理系统的功能 但他们可能不习惯仅通过 MySQL 提示符与系统交互 php我的管理员创建的目的是让用户可以通过 Web 界面与 MySQL 进行交互 在本指南中 我们将讨论如何安装和保护 php
  • 如何在 CentOS 7 上安装 Elasticsearch、Logstash 和 Kibana(ELK Stack)

    介绍 在本教程中 我们将介绍在 CentOS 7 即 Elasticsearch 2 2 x Logstash 2 2 x 和 Kibana 4 4 x 上安装 Elasticsearch ELK Stack 我们还将向您展示如何使用 Fi
  • 如何在 Ubuntu 上的 WordPress 中配置安全更新和安装

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • Spring JDBC 示例

    Spring JDBC 是本教程的主题 数据库是大多数企业应用程序不可或缺的一部分 因此 当涉及到 Java EE 框架时 必须与JDBC非常重要 春季 JDBC Spring Framework provides excellent in
  • 带有 COUNT() 函数的 SQL SELECT 语句

    嘿伙计 在这篇文章中 我们将重点关注SQL SELECT 语句以及 COUNT 函数 什么是 SQL SELECT 语句 SQL SELECT 语句帮助我们选择并显示数据库特定表中的数据值 Syntax SELECT columns FRO
  • Python 有序字典

    Python OrderedDict 是一个dict维护项目插入顺序的子类 当我们迭代 OrderedDict 时 项目将按照插入的顺序返回 常规字典不跟踪插入顺序 因此 当对其进行迭代时 项目会以任意顺序返回 当我们想要确保项目按照插入顺
  • 代理设计模式

    代理设计模式是结构设计模式之一 在我看来也是最容易理解的模式之一 代理设计模式 Proxy design pattern intent according to GoF is Provide a surrogate or placehold
  • 如何在 Ubuntu 16.04 上使用 RVM 安装 Ruby on Rails

    介绍 Ruby on Rails 是最受希望创建网站和 Web 应用程序的开发人员欢迎的应用程序堆栈之一 Ruby 编程语言与 Rails 开发框架相结合 使应用程序开发变得简单 您可以使用命令行工具轻松安装 Ruby 和 RailsRVM
  • C/C++中二叉树的高度

    二叉树的高度定义为任何叶节点距根节点的最大深度 即从根节点到任意叶子节点的最长路径的长度 让我们考虑下面的二叉树 Binary Tree Ht 由于最大深度对应的叶子节点为40 and 50 为了求出高度 我们只需求出从根节点到这两个节点之
  • 如何在 Ubuntu 22.04 上安装和配置 Ansible

    介绍 配置管理系统旨在简化管理员和运营团队控制大量服务器的过程 它们允许您从一个中心位置以自动化方式控制许多不同的系统 虽然有许多流行的配置管理工具可用于 Linux 系统 例如Chef and Puppet 这些通常比许多人想要或需要的更
  • 了解 R 中的plot() 函数 - 图形绘制基础知识

    在本教程中 让我们首先了解 R 中使用plot 函数的基础知识 R 语言以其精美的图形而闻名 它具有丰富的函数来构建和格式化任何类型的图形以及plot 函数族之一可以帮助我们构建这些函数 R 中的plot 函数不是单个定义的函数 而是一系列
  • 如何在 Ubuntu 14.04 上安装 Tinc 并设置基本 VPN

    介绍 在本教程中 我们将介绍如何使用 Tinc 一个开源虚拟专用网络 VPN 守护程序 来创建一个安全的 VPN 您的服务器可以在该 VPN 上进行通信 就像在本地网络上一样 我们还将演示如何使用 Tinc 建立通往专用网络的安全隧道 我们