介绍

TincV+P+N是一个P2PV+P+N,即两端可以直接通信,虚拟局域网内只需要一台机器(VPS)能够有外网访问的能力即可,一旦两端建立起连接,流量就不会再经过VPS。

官网

https://www.tinc-vpn.org/

本次使用1.1pre17 版本部署

# 推荐使用 tinc-pre 1.1 版本
# 配置更方便使用更简单

下载地址:

linux: https://www.tinc-vpn.org/packages/tinc-1.1pre17.tar.gz

Windows XP/Vista/7/8/10: https://www.tinc-vpn.org/packages/windows/tinc-1.1pre17-install.exe

部署

本次部署系统环境: centos7,后面操作均在root下操作;

安装编译依赖环境

yum -y install gcc readline-devel zlib-devel lzo-devel openssl-devel ncurses-devel

解压

tar -xvf tinc-1.1pre17.tar.gz

编译安装

cd tinc-1.1pre17
./configure
make
make install

配置server

开放防火墙端口655,方法略,本文的环境已经关闭了防火墙

# 创建pid文件生成路径
mkdir /var/run/
# 创建配置文件路径
mkdir /etc/tinc
# 初始化server,格式: tinc -n 网络名称 init server名
tinc -n vbn init server
# 启动tinc
tincd -n vbn
# 配置tinc的网段
tinc -n vpn add subnet 10.10.1.1
# 配置tinc启动后的网卡
echo 'ip addr add 10.10.1.1/24 dev $INTERFACE' > /etc/tinc/vbn/tinc-up
echo 'ip link set $INTERFACE up' >> /etc/tinc/vbn/tinc-up
# 配置server的外网ip
echo 'Address=服务器的外网ip' >> /etc/tinc/vbn/tinc.conf
# 配置加密方式(可选)
echo 'Cipher=aes-256-cbc' >> /etc/tinc/vbn/tinc.conf
echo 'Digest=sha512' >> /etc/tinc/vbn/tinc.conf
# 设置广播包发到其他节点的方式, 所有节点需要使用相同的方式, 否则可能会产生路由循环
# no 不发送广播包 
# mst 使用 Minimum Spanning Tree, 保证发往每个节点
# direct 只发送给直接访问的节点, 从其他节点接收到的不转发. 如果设置了 IndirectData, 广播包也会发送给有 meta 链接的节点
# 试验阶段
# no | mst | direct
# 可选
echo 'Broadcast = mst' >> /etc/tinc/vbn/tinc.conf
# 尝试发现本机网络中的节点
# 允许与本地节点地址建立直接连接
# 目前, 本地发现机制是通过在 UDP 发现阶段发送本地地址的方式
# 可选
echo 'LocalDiscovery = yes' >> /etc/tinc/vbn/tinc.conf

# 重启server
pkill -9 tincd
# daemonize方式启动
tincd -n vbn
# debug方式启动
tincd -n vbn -D -d3

编译客户端

cd tinc-1.1pre17
./configure
make
make install

配置客户端

# 创建pid文件生成路径
mkdir /var/run/
# 创建配置文件路径
mkdir /etc/tinc
# server服务器上生成邀请连接 tinc -n 网络名称 invite 客户端名称
tinc -n vbn invite client1
# 要求连接 server的外网ip/随机码
222.222.222.222/swgz4VsseZKhF1dsd1LnVp-yfIJ-iVT47u44feu8w3uP7VYQD7It

# 客户端加入server
[root@localhost sbin]# tinc join 222.222.222.222/swgz4VsseZKhF1dsd1LnVp-yfIJ-iVT47u44feu8w3uP7VYQD7It
Connected to 222.222.222.222 port 655...
..................................................................+++ p
....................................................+++ q
Configuration stored in: /etc/tinc/vbn
Invitation successfully accepted.

# 启动tinc
tincd -n vbn
# 配置客户端的ip,需要和server的不一样,可以直接加1即可
tinc -n vbn add subnet 10.10.1.2
# 配置tinc启动后的网卡,下面的ip需要和上一步一样
echo 'ip addr add 10.10.1.2/24 dev $INTERFACE' > /etc/tinc/vbn/tinc-up
echo 'ip link set $INTERFACE up' >> /etc/tinc/vbn/tinc-up

# 配置加密方式(可选)
echo 'Cipher=aes-256-cbc' >> /etc/tinc/vbn/tinc.conf
echo 'Digest=sha512' >> /etc/tinc/vbn/tinc.conf
# 尝试发现本机网络中的节点
# 允许与本地节点地址建立直接连接
# 目前, 本地发现机制是通过在 UDP 发现阶段发送本地地址的方式
# 可选
echo 'LocalDiscovery = yes' >> /etc/tinc/vbn/tinc.conf

# 重启server
pkill -9 tincd
# daemonize方式启动
tincd -n vbn
# debug方式启动
tincd -n vbn -D -d3

安装上面方法添加多个客户端,然后相互ping客户端的ip即可

注意:某个客户端如果配置了CipherDigestLocalDiscovery这三个参数,则其他所有的客户端都需要配置这三个参数,否则会不通。

高级玩法

路由表

如果某个客户端(10.10.1.2)启用了路由转发,可以在其他客户端的tinc-up中添加路由配置,如下:

[root@localhost vbn]# more tinc-up 
ip addr add 10.10.1.3/24 dev $INTERFACE
ip link set $INTERFACE up
route add -net 10.1.231.0 netmask 255.255.255.0 gw 10.10.1.2

此时可以在其他的客户端上直接上10.1.231.x网段的ip了

参考文档

https://github.com/wenerme/wener/blob/master/tricks/ops/network/private/tinc.md

https://nwgat.ninja/quick-easy-tinc-1-1-2/

https://lala.im/6209.html