通过Tinc实现内网穿透

简介

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

《通过Tinc实现内网穿透》上有9条评论

  1. 你好,你的教程是阿里云主机生成一对公私密钥,电脑和手机不用单独生成密钥对吗?三个设备可以公用一对密钥吗?

  2. 我打算用Tinc先将两个局域网通过IPV6先串联起来,然后因为这两个局域网只有其中一个有IPV4公网,我是否可以通过tinc只接入有IPV4公网的局域网(hosts里面只放有公网IPv4的配置文件)也能访问那个无IPv4公网的局域网?

  3. 你好,以调试方式启动tinc,出现下面的错误提示,请问是什么问题?
    tincd 1.0.36 starting, debug level 3
    Name for tinc daemon required!
    Terminating

发表评论

邮箱地址不会被公开。 必填项已用*标注