简介
Tinc是一个开源的组网软件,相比之前的《通过ZeroTier实现内网穿透》,Tinc的配置较为繁琐(ZeroTier配置更简单,只需要注册账号然后加入网络即可)。但ZeroTier无论是用官方提供的服务,还是自建Moon或planet服务器,都绕不开官方的节点,会有比较高的延迟。Tinc是完全开源的,完全由自己部署搭建,稳定性要高很多。
准备
使用Tinc组网,需要有一台具有公网IP的服务器。我这里准备了一台阿里云的服务器(Centos7)。
安装
Tinc 没有服务端和客户端的区别,要加入Tinc组成的网络,都需要下载并安装对应的软件。
CentOS
yum install tinc
Android
Tinc App
IOS(需越狱)
Cydia packages
Windows
官方下载地址
准备工作
为Tinc将组建的这个网络取一个名字,这里取名:dock。同时想清楚有哪些设备要加入到这个网络,以及这些设备使用的IP地址及子网掩码。
本文将会有三个设备加入这个网络,分别是aliyun(阿里云服务器,有公网IP,操作系统:CentOS7)、thinkpad(笔记本电脑,无公网IP,操作系统:Windows10)、meizu(安卓手机,无公网IP)
配置aliyun节点
aliyun节点是CentOS7操作系统,通过yum install tinc
安装好tinc后,输入tincd --version
如果正确显示版本号则说明安装成功。
创建主要配置文件
上一步已经想好了网络名:dock,那么创建/etc/tinc/dock
文件夹。如果你取的网络名是hello,那么创建/etc/tinc/hello
文件夹。创建好文件夹后,目前dock文件夹是空文件夹,什么也没有,接下来将创建这些文件。本例子最终配置好后的dock目录有如下文件:
└── dock
├── hosts
│ ├── aliyun
│ ├── thinkpad
│ └── meizu
├── rsa_key.priv
├── tinc.conf
├── tinc-down
└── tinc-up
2 directories, 7 files
tinc.conf:该文件主要描述了当前节点的名字,使用的虚拟网卡等。
rsa_key.priv:该文件是私钥文件,由tincd
工具生成。
tinc-up:网络建立前需要执行的操作
tinc-down:网络建立后需要执行的操作
hosts文件夹:该文件夹存放当前网络所有节点的配置文件,本文有三个节点,那么有三个文件,文件名为节点名。节点名在tinc.conf中已设置。
tinc.conf
tinc.conf文件的内容如下:
Name = aliyun
Interface = tinc
该文件设置了当前节点的名字为:aliyun,虚拟网卡的名字为tinc。更多的配置项可以查看官网文档。
tinc-up
tinc-up文件的内容如下:
#!/bin/sh
ifconfig $INTERFACE 192.168.192.1 netmask 255.255.255.0
该文件起到的作用是设置了当前节点虚拟网卡的IP地址为 192.168.192.1,子网掩码为:255.255.255.0
tinc-down
tinc-down文件的内容如下:
#!/bin/sh
ifconfig $INTERFACE down
rsa_key.priv
该文件在后面由tincd生成,此处先跳过
设置可执行权限
chmod +x tinc-up tinc-down
创建节点配置文件
有多少个节点,就要在/etc/tinc/dock/hosts
文件夹创建多少个文件。下面先创建并设置好aliyun节点,另外两个节点只需要复制aliyun的然后稍加修改即可。
创建aliyun文件
新建/etc/tinc/dock/hosts
文件夹,然后创建/etc/tinc/dock/hosts/aliyun
文件,内容如下:
Subnet=192.168.192.1/32
Address=1.1.1.1
Port=1655
该文件描述了aliyun节点信息,Subnet是当前节点在dock网络中的IP地址,Address是当前节点的公网IP地址(没有公网IP则不填写该行),Port为tinc使用的端口号(默认为655,如果你不打算更改,也可以不填写该行)。
注意在系统防火墙和服务器安全组中放行1655端口。
更多配置项可以查看官方文档。
生成aliyun节点秘钥对
cd /etc/tinc
tincd -n dock -K 4096
执行命令后,按两次回车将自动在/etc/tinc/dock
文件夹下新增一个私钥文件:rsa_key.priv
,公钥信息则自动添加到了/etc/tinc/dock/hosts/aliyun
文件的末尾:
创建thinkpad文件
将/etc/tinc/dock/hosts/aliyun
复制为将/etc/tinc/dock/hosts/thinkpad
,打开thinkpad文件,修改为如下信息:
Subnet=192.168.192.2/32
Port=1655
-----BEGIN RSA PUBLIC KEY-----
...<此处省略>...
-----END RSA PUBLIC KEY-----
相比aliyun节点,thinkpad节点修改了两处信息:
1.修改了Subnet,将IP地址改为了192.168.192.2
2.删掉了Address行(因为该节点没有公网IP)
创建meizu文件
将/etc/tinc/dock/hosts/aliyun
复制为将/etc/tinc/dock/hosts/meizu
,打开meizu文件,修改为如下信息:
Subnet=192.168.192.3/32
Port=1655
-----BEGIN RSA PUBLIC KEY-----
...<此处省略>...
-----END RSA PUBLIC KEY-----
相比aliyun节点,meizu节点修改了两处信息:
1.修改了Subnet,将IP地址改为了192.168.192.3
2.删掉了Address行(因为该节点没有公网IP)
启动tinc服务
以调试方式启动
该方式可以实时查看日志信息
tincd -n dock -D -d3
以后台服务方式启动
systemctl enable tinc@dock
systemctl start tinc@dock
systemctl status tinc@dock
至此,aliyun节点已配置完成。
配置thinkpad节点
安装tinc
thinkpad节点是Windows 10操作系统,通过安装包安装好后,默认会安装到C:\Program Files (x86)\tinc
目录。
创建虚拟网卡
右键用管理员权限打开tap-win64/addtap.bat
创建完成后将多出一个网络连接图标:
更改虚拟网卡名字
找到写有TAP-Win32-Adapter V9的那个网络适配器, 为它起一个别名, 后面配置文件中会用到, 这里起的别名为tinc
创建主要配置文件
在tinc安装目录创建dock
文件夹,创建好文件夹后,目前dock文件夹是空文件夹,什么也没有,但最终配置好后的dock文件夹有如下文件夹和文件:
└── dock
├── hosts
│ ├── aliyun
│ ├── thinkpad
│ └── meizu
├── rsa_key.priv
├── tinc.conf
├── tinc-down.bat
└── tinc-up.bat
文件夹和文件的含义与上面aliyun节点章节一致,这里不多作说明。只不过windows系统下tinc-up和tinc-down文件都多一个后缀名.bat
tinc.conf
tinc.conf文件的内容如下:
Name = thinkpad
Interface = tinc
ConnectTo = aliyun
Interface为虚拟网卡的名字,上一步已设置为tinc
。ConnectTo 指定启动时要连接的其他节点。如果没有使用 ConnectTo 指定主机,tinc 将不会尝试连接到其他节点,而只会监听传入的连接。
tinc-up.bat
tinc-up.bat文件的内容如下:
netsh interface ip set address tinc static 192.168.192.2 255.255.255.0
tinc-down.bat
windows系统不需要这个文件,保持为空即可。
rsa_key.priv
该文件直接从aliyun节点中拷贝过来。
创建节点配置文件
hosts文件夹中的文件直接从aliyun节点中的/etc/tinc/dock/hosts/
中拷贝过来。
启动tinc服务
以调试方式启动
管理员身份运行cmd,进入tinc安装目录,执行如下命令:
tincd.exe -n dock -D -d3
以服务方式启动
管理员身份运行cmd,进入tinc安装目录,执行如下命令:
tincd.exe --net=dock
命令执行后,将会在服务中多出一个tinc.dock
服务。
在tinc.dock
服务名上右键,选择启动即可。
测试是否连通
在aliyun节点 ping thinkpad节点的IP:192.168.1.2或者在thinkpad节点 ping aliyun节点的IP:192.168.1.1,如果可以互相ping通,则说明配置成功。
至此,thinkpad节点已配置完成。
配置meizu节点
meizu节点是安卓系统,需要下载第三方提供的APP,下载地址:https://tincapp.pacien.org/
创建主要配置文件
创建后,会自动在/storage/emulated/0/Android/data/org.pacien.tincapp/files
目录下生成dock文件夹:
这时候借助安卓上的文件管理软件(我用的是CX文件管理器,可以连接FTP,方便传输文件)打开并修改以下文件:
tinc.conf
Name=meizu
ConnectTo=aliyun
network.conf
打开(去掉前面的#)并修改以下两项配置:
Address=192.168.192.3/32
Route=192.168.192.0/24
rsa_key.priv
删除该文件,然后从aliyun节点的/etc/tinc/dock/rsa_key.priv
中拷贝过来。
ed25519_key.priv
该文件不用修改
创建节点配置文件
hosts文件夹中的文件直接从aliyun节点中的/etc/tinc/dock/hosts/
中拷贝过来。
启动tinc服务
返回Tinc App主页,点击网络名称即可
至此,meizu节点已配置完成。
常用命令
关闭tinc服务
pkill -9 tincd
5.2.1 创建aliyun文件 一节似有笔误,介绍文字括号中默认端口号或许为1655?
默认端口为655,这里使用了自定义端口
你好,你的教程是阿里云主机生成一对公私密钥,电脑和手机不用单独生成密钥对吗?三个设备可以公用一对密钥吗?
是的,共用
我打算用Tinc先将两个局域网通过IPV6先串联起来,然后因为这两个局域网只有其中一个有IPV4公网,我是否可以通过tinc只接入有IPV4公网的局域网(hosts里面只放有公网IPv4的配置文件)也能访问那个无IPv4公网的局域网?
不清楚
邮箱发了,那边一直没有验证啊
感谢,教程很清晰
你好,以调试方式启动tinc,出现下面的错误提示,请问是什么问题?
tincd 1.0.36 starting, debug level 3
Name for tinc daemon required!
Terminating