TINC - 构建 IPv6 隧道及私有网络

Tinc VPN 简介

Tinc VPN 是一个轻量型的 GNU 协议下的开源软件,通过隧道以及加密技术在互联网点与点之间创立隧道。VPN 是 IP 层面上的,所以可以像普通的网络设备那样,不需要去适配其他已经存在的软件。所以他就可以很安全的在点与点之间传输数据,并不需要担心泄露。他还有其他几大的特点:

(上面的内容基本就是官网首页的一个简单的翻译,官方网站:https://www.tinc-vpn.org/

IPv6 隧道实例

需求及现有资源

在学校内网中,由于学校网络暂未支持 IPv6 ,有时候想在外面访问回去自己的笔记本,因此想要将自己的笔记本或者将自己的路由器通过某种方法支持并接入到 IPv6 网络。

目前已有一台 ping 值较低的 VPS ,并且这台 VPS 通过 TunnelBroker 已经接入到 he.net 的 IPv6 网络中。

已有 IPv6 前缀:2001:DB8:1::/48 (使用文档保留前缀 RFC 3849

Tinc 隧道中分配:2001:DB8:1::/64 ,VPS 使用 2001:DB8:1::1/64,笔记本使用2001:DB8:1::2/64,并且划分2001:DB8:1:2::/64给我的笔记本或者路由器。

假定 VPS 的网络名叫(这个在配置中会用到):vps , 我笔记本的网络名叫: laptop

Tinc 配置

安装

tinc 在各个发行版的仓库中都可以找到,例如 Debian / Ubuntu 系列的系统就可以通过下面的命令安装:

apt-get install tinc

其他系统也相对类似,平时怎么安装软件就怎么安装就对 了。

目录结构

/etc/tinc
└── vps
    ├── hosts
    │   ├── laptop
    │   └── vps
    ├── rsa_key.priv
    ├── tinc.conf
    ├── tinc-down
    └── tinc-up

详细配置

服务器端

服务器端使用的是 Debian 系统,因此为了能够使用 systemctl 进行管理以及自启动,添加本台服务器的网络名到 /etc/tinc/nets.boot

root@vps:/etc/tinc# cat nets.boot
## This file contains all names of the networks to be started on system startup.
vps

配置文件 tinc.conf 相对也比较简单,我这里只设置了三个参数,更多的参数设置请参考 Main configuration variables

Name 是本台服务器的网络名;Interface 是隧道所使用的网卡(随便设置即可);Mode 有三种模式,分别是 router / switch / hub ,相对应我们平时使用到的路由、交换机、集线器,同样使用 switch 即可

root@vps:/etc/tinc/vps# cat tinc.conf
Name = vps
Interface = tinc
Mode = switch

tinc-up 以及 tinc-down 类似,只不过一个是 up 一个是 down ,一个是 add 一个是 del

$INTERFACE 在 tinc 启动时会作为环境变量自动代入,这里不需要修改。

静态路由按照下面所示即可,这两个文件需要赋予可执行权限。

root@vps:/etc/tinc/vps# cat tinc-up
#!/bin/sh

ip -6 link set $INTERFACE up
ip -6 addr add 2001:DB8:1::1/64 dev $INTERFACE
ip -6 route add 2001:DB8:1:2::/64 via 2001:DB8:1::2

root@vps:/etc/tinc/vps# cat tinc-down
#!/bin/sh

ip -6 link set $INTERFACE down
ip -6 route del 2001:DB8:1:2::/64 via 2001:DB8:1::2

root@vps:/etc/tinc/vps# chmod +x tinc-*

创建密钥执行如下命令即可

root@vps:/etc/tinc/vps# tincd -n vps -K 4096
客户端

客户端的配置基本相同,按照自己的设置进行配置即可。但还是需要注意几个地方

tinc.conf 文件需要 ConnectTo = vps ,这样程序才会去主动连接

root@laptop:/etc/tinc/laptop# cat tinc.conf
Name = laptop
Interface = tinc
Mode = switch
ConnectTo = vps

tinc-uptinc-down 文件进行相应的调换即可。

一切妥当后同样执行密钥的生成。

客户端服务器之间的连接

在之前我们提到了 /etc/tinc/vps/hosts 这个文件夹,我们需要将公钥分配给对方。

VPS 上的 /etc/tinc/vps/hosts/vps 需要复制到 laptop 的相同位置,同时第一行需要加上下面这行,以明确客户端连接的对象。这里正如上面所说,VPS 有公网 IP ,laptop 在内网环境中。

Address = 222.222.222.222

而 laptop 上的 /etc/tinc/vps/hosts/laptop 同样需要复制到 vps 的相同位置,但这里就不需要加上 Address =了,因为客户端连接的 IP 并不确定,因此不需要设置,只需要公钥即可。

一切妥当后,启动 tinc 服务即可。

使用分享

经过了我的搭建之后,一切都按部就班地进行着。

抓包可以看出,我本地与服务器之间的连接已经数据传输是加密的,而如果你对数据的传输有兴趣的话,只需要将抓包的网卡设置成上面设置的网卡(tinc)即可,在 tinc 传输的数据已经是经过解密的了,因此抓包可以很好的复原传输的过程。

另外如果有你懂的需求的话,似乎 tinc 也是可以做到的。