说明

Tinc是一个轻量级的VPN(Virtual Private Network)软件,可以帮助用户建立一个加密的虚拟网络,实现对远程服务器的访问和管理。Tinc具有高度可扩展性、灵活性和安全性,支持多种操作系统和网络环境。本文将介绍Tinc的安装和配置方法,以及常用的操作命令和技巧。

1. Linux安装

在Linux操作系统上,可以使用包管理工具来安装Tinc。
请根据自己的操作系统类型和版本选择相应的安装方法。

例如,在Debian和Ubuntu系统上,可以使用以下命令来安装Tinc:

1
sudo apt-get install tinc

在CentOS和Fedora系统上,可以使用以下命令来安装Tinc:

1
sudo yum install tinc

在Arch Linux系统上,可以使用以下命令来安装Tinc:

1
sudo pacman -S tinc

在OpenSUSE系统上,可以使用以下命令来安装Tinc:

1
sudo zypper install tinc

2. 配置Tinc

2.1 创建配置文件

Tinc的配置文件位于/etc/tinc目录下,每个Tinc网络都有一个单独的目录,目录名为网络名。

其目录结构如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
.
└── ens33
├── hosts
│ ├── MasterA
│ ├── MasterB
│ ├── MasterC
│ ├── NodeA
│ ├── NodeB
│ └── NodeC
├── rsa_key.priv
├── tinc.conf
├── tinc-down
└── tinc-up
  1. tinc.conf:该文件主要存放当前节点的配置,使用的虚拟网卡等。
  2. rsa_key.priv:该文件是私钥文件,由tincd工具生成。
  3. tinc-up:网络建立时需要执行的操作
  4. tinc-down:网络停止时需要执行的操作
  5. hosts文件夹:该文件夹存放当前网络所有节点的配置文件,我有六个节点,那么就有六个文件,文件名为节点名。节点名在tinc.conf中进行设置。

在本文中,我们将创建一个名为ens33的Tinc网络,因此需要创建一个名为ens33的目录:

1
sudo mkdir -p /etc/tinc/ens33
  1. 这个文件名可以随意取,文件名即最后生成的虚拟网卡名称,如果没有特别需求可以随便取。
  2. 此处我之所以使用是ens33作为网卡名,是因为我生产环境使用的腾讯云服务器,腾讯云服务器的网卡名称是eth0,而k8s集群calico等网络插件一般默认使用网卡eth.*|ens.*作为网络通信的网卡,所以为了方便配置我自己搭建一个名为ens33的虚拟网卡,这样就可以让集群网络配置更简单简单。
  3. 当然如果你的默认网卡是ens33,那么你可以使用其他名称,比如eth0、tinc0、myvpn等等。
  4. 这里的网卡名称请灵活处理。

在ens33目录下,需要创建以下三个文件:

1
2
3
sudo touch /etc/tinc/ens33/tinc.conf
sudo touch /etc/tinc/ens33/tinc-up
sudo touch /etc/tinc/ens33/tinc-down

然后需要根据自己需求创建hosts文件,这里我创建文件名为MasterA的文件,文件内容如下:

1
sudo vi /etc/tinc/ens33/hosts/MasterA
  1. 其他节点的hosts文件通过复制修改创建。
  2. 因为节点的文件里需要添加进公钥信息。

2.2 配置tinc.conf

tinc.conf文件中,需要添加以下内容:

1
2
Name = MasterA
Interface = ens33
  1. Name:当前节点名称,告诉tinc当前节点对应hosts的配置文件是哪一个。
  2. Interface:虚拟网卡名称,这个名称就是我们在上面创建的当前网络的目录名称。

2.3 配置tinc-up

tinc-up文件中,需要添加以下内容:

1
2
#!/bin/sh
ifconfig $INTERFACE 10.10.10.1 netmask 255.255.255.0
  1. INTERFACE:虚拟网卡名称,这里我直接使用变量$INTERFACE
  2. IP地址:这里我使用的是10.10.10.1,这个IP地址是我自己随便取的,只要不和其他网络冲突即可。
  3. 注意: 一个tinc网络中,所有节点的IP地址必须是同一个网段

2.4 配置tinc-down

tinc-down文件中,需要添加以下内容:

1
2
#!/bin/sh
ifconfig $INTERFACE down

2.5 配置hosts

masterA中的hosts文件内容如下:

1
2
3
4
5
6
7
8
9
Subnet=10.10.10.1/32
Address=124.220.166.88
Port=1655

ConnectTo = MasterB
ConnectTo = MasterC
ConnectTo = NodeA
ConnectTo = NodeB
ConnectTo = NodeC
  1. Subnet:当前节点的IP地址,对应tinc-up中的IP地址。
  2. Address:当前节点的公网IP地址,这个地址必须是所有节点能连接到的地址,否则无法建立网络。
  3. 关于Address的地址需要在有公网IP的机器上配置,没有公网IP的机器不配置。
  4. Port:Tinc服务所建立通信的端口号,默认是655,这里我修改成1655。
  5. ConnectTo:当前节点需要连接的节点,这里我需要连接所有节点,所以都写上。

2.6 生成私钥Tinc文件

在/etc/tinc目录下,注意修改网络的名称!执行以下命令:

1
2
cd /etc/tinc
tincd -n ens33 -K 4096
  1. -n:指定当前网络的名称,这里我使用的是ens33,请换成你自己的名称。
  2. -K:生成私钥文件,这里我使用的是4096位的密钥,可以根据自己的需求进行调整。
  3. 执行命令后,按两次回车将自动在/etc/tinc/ens33文件夹下新增一个私钥文件:rsa_key.priv,公钥信息则自动添加到了/etc/tinc/ens33/hosts/MasterA文件了。

2.7 创建全部节点的hosts文件

  1. 复制MasterA文件,修改文件名为MasterB、MasterC、NodeA、NodeB、NodeC…等。
  2. 在/etc/tinc/ens33/hosts目录下,创建MasterB、MasterC、NodeA、NodeB、NodeC等节点文件,文件内容和MasterA一样,只是Subnet和Address不同。
  3. 之所以复制创建是因为公钥信息是自动生成的。

例如masterB中的hosts文件内容如下,其他hosts文件类似:

1
2
3
4
5
6
7
8
9
10
11
12
Subnet=10.10.10.2/32
Port=1655

ConnectTo = MasterA
ConnectTo = MasterC
ConnectTo = NodeA
ConnectTo = NodeB
ConnectTo = NodeC

-----BEGIN RSA PUBLIC KEY-----
...<此处省略>...
-----END RSA PUBLIC KEY-----

2.8 启动Tinc服务

请完成所有hosts文件的创建后,再执行以下命令启动Tinc服务:
请不要直接复制执行,需要根据自己的网络名称修改!

1
2
3
4
5
6
7
sudo chmod +x /etc/tinc/ens33/tinc-*
sudo systemctl start tinc@ens33
sudo systemctl enable tinc@ens33
sudo cat >> /etc/systemd/system/tinc.service.wants/tinc@ens33.service << EOF
WantedBy=multi-user.target
EOF
sudo systemctl enable tinc@ens33
  1. sudo systemctl start tinc@ens33:启动Tinc服务,这里我使用的是ens33,请换成你自己的名称。
  2. sudo systemctl enable tinc@ens33:设置开机自启动。
  3. 后面是修改开机自启BUG的命令,如果不执行,开机自启动可能会失败,可以先不执行,遇到了在执行。

3. 查看Tinc网络

3.1 查看Tinc网络状态

查看Tinc网络状态:

1
2
3
4
ip a | grep ens33
# ens33: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq state UNKNOWN group default qlen 500
# inet 10.10.10.3/24 scope global ens33
# 出现类似上面的信息,说明Tinc网络已经建立成功了。

4. 常见问题

4.1 使用yum等命令安装不了时,可使用rpm等方法进行安装

https://developer.aliyun.com/packageSearch?word=tinc

4.2 重启后服务没有自启动

请浏览2.8中的命令,执行后重启即可。

4.3 无法连接到其他节点,或启动失败

  1. 请检查tinc文件配置是否正确。
  2. 每个节点的tinc-uptinc.conf 均需要修改为当前节点的配置。
  3. tinc-up文件和tinc-down文件是否有执行权限。
  4. 必须有一台机器有公网IP,进行数据分发。
  5. 请检查防火墙是否开放了Tinc服务的端口。云服务器需要在安全组中开放端口。

4.4 关于windows客户端和安卓等客户端的配置

windows客户端与安卓客户端的配置,可以参考以下内容:

  1. Windows 操作系统,通过安装包安装好后,默认会安装到C:\Program Files (x86)\tinc目录。
  2. 右键用管理员权限打开tap-win64/addtap.bat 运行后,会在网络适配器中看到一个新的适配器,将其重命名为我们规划的名称,例如:ens33。
  3. 在tinc安装目录创建ens33文件夹,与Linux中的/etc/tinc/ens33文件夹差不多
  4. 修改tinc-up文件名为tinc-up.bat,修改tinc-down文件名为tinc-down.bat
  5. 管理员身份运行cmd,进入tinc安装目录,执行类似命令tincd.exe --net=ens33,即可启动服务。
  1. 安卓客户端第三方下载地址:https://tincapp.pacien.org/
  2. 打开app,点击右上角扳手图标,然后在工具里选择生成节点配置和秘钥
  3. 创建后,会自动在/storage/emulated/0/Android/data/org.pacien.tincapp/files目录下生成跟linux差不多的文件夹
  4. 修改配置文件后,返回Tinc App主页,点击网络名称即可连接该网络。

4.5 更多问题请在下方评论区留言或者联系我