使用Tinc搭建虚拟局域网的详细安装与配置教程

说明

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

1. Linux安装

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

sudo apt-get install tinc

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

sudo yum install tinc

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

sudo pacman -S tinc

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

sudo zypper install tinc

2. 配置Tinc

2.1 创建配置文件

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

其目录结构如下所示:

.
└── 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的目录:

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

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

sudo touch /etc/tinc/ens33/tinc.conf
sudo touch /etc/tinc/ens33/tinc-up
sudo touch /etc/tinc/ens33/tinc-down

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

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

2.2 配置tinc.conf

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

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

2.3 配置tinc-up

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

#!/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文件中,需要添加以下内容:

#!/bin/sh
ifconfig $INTERFACE down

2.5 配置hosts

masterA中的hosts文件内容如下:

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目录下,注意修改网络的名称!执行以下命令:

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文件类似:

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服务:
请不要直接复制执行,需要根据自己的网络名称修改!

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网络状态:

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主页,点击网络名称即可连接该网络。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在 Golang 中实现虚拟局域网(VPN)可以使用第三方库,例如 WireGuard、OpenVPN 或 Tinc。这些库提供了 VPN 协议的实现,可以用于在 Golang 应用程序中创建和管理 VPN 连接。 下面是使用 WireGuard 在 Golang 中创建 VPN 连接的示例代码: ```go package main import ( "fmt" "golang.zx2c4.com/wireguard/wgctrl" ) func main() { // 创建 WireGuard 控制器 client, err := wgctrl.New() if err != nil { panic(err) } defer client.Close() // 创建一个 WireGuard 接口 device, err := client.DeviceCreate(&wgctrl.Config{ PrivateKey: "private-key", ListenPort: 51820, }) if err != nil { panic(err) } defer device.Close() // 配置 WireGuard 接口 err = device.ConfigureDevice(&wgctrl.Config{ PublicKey: "public-key", ListenPort: 51820, Peers: []wgctrl.PeerConfig{{ PublicKey: "peer-public-key", AllowedIPs: []net.IPNet{{IP: net.ParseIP("10.0.0.2"), Mask: net.CIDRMask(24, 32)}}, PersistentKeepaliveInterval: 30, }}, }) if err != nil { panic(err) } // 输出 WireGuard 接口的信息 fmt.Printf("Device name: %s\n", device.Name) fmt.Printf("Device private key: %s\n", device.PrivateKey) fmt.Printf("Device public key: %s\n", device.PublicKey) fmt.Printf("Device listen port: %d\n", device.ListenPort) fmt.Printf("Device peers: %v\n", device.Peers) } ``` 这段代码使用 WireGuard 控制器创建了一个名为 `wg0` 的 WireGuard 接口,配置了该接口的私钥、公钥、监听端口和一个对等体。你可以根据需要添加更多对等体或进行其他配置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值