部署Tinc VPN组网

部署Tinc VPN组网


很多人都想要使用VPN,试图在爱好者或者不同区域进行连接,形成一个私有网络,Tinc VPN是一种开源的P2P组网技术,本文就讲述如何部署Tinc VPN。

什么是Tinc VPN

tinc是一个虚拟专用网络(VPN)守护程序,它使用隧道和加密在Internet上的主机之间创建一个安全的专用网络。tinc是免费软件,根据GNU通用公共许可证版本2或更高版本授权。由于VPN作为一个普通的网络设备出现在IP层的网络代码中,因此不需要对现有的任何软件进行修改。这使得VPN站点可以在因特网上彼此共享信息,而不向其他人公开任何信息。此外,tinc还具有以下特点:

  • 加密、身份验证和压缩:所有的流量都可以选择使用zlib或LZO进行压缩,LibreSSL或OpenSSL用于加密流量,并防止其被消息验证代码和序列号更改。
  • 全网格自动布线:无论如何设置tinc守护进程以相互连接,VPN流量总是(如果可能的话)直接发送到目的地,而不经过中间跃点。
  • NAT穿越:只要VPN中的一个节点允许公共IP地址(即使是动态IP地址)上的传入连接,tinc就能够进行NAT遍历,从而允许对等方之间的直接通信。
  • 轻松扩展VPN:当您想将节点添加到您的VPN时,您只需添加一个额外的配置文件,就不需要启动新的守护程序或创建和配置新的设备或网络接口
  • 能够桥接以太网段:您可以将多个以太网段连接在一起,使其像单个网段一样工作,从而允许您运行通常只能在Internet上的LAN上运行的应用程序和游戏。
  • 在许多操作系统上运行并支持IPv6:目前支持Linux、FreeBSD、OpenBSD、NetBSD、OS X、Solaris、Windows 2000、XP、Vista以及Windows 7和8平台。有关端口状态的更多信息,请参阅我们关于支持的平台的部分。tinc还完全支持IPv6,提供了在其隧道上隧道IPv6流量和在现有IPv6网络上创建隧道的可能性。

在linux上编译tinc vpn

官方发行tinc一般来说,可以从软件包直接获取,比如以下命令:

sudo apt install tinc

但是这方式获取的tinc通常只能得到1.0的版本,笔者建议使用tinc 1.1,由于tinc1.1尚未发布,因此无法获取二进制包,通常情况下使用源码发行,这意味着需要从官网下载源码包,解压后在源码目录执行以下命令:

./configure --prefix=/usr --sysconfdir=/etc --with-systemd
make
sudo make install

配置tinc 1.1 vpn

要启动tinc,必须先对其进行配置,目录结构为:

$ tree /etc/tinc
/etc/tinc  #配置目录
├── nets.boot   # 开机自动启动tinc网络
└── tinc0  # 网络名目录
    ├── ed25519_key.priv   # ED25519私钥
    ├── hosts  # 主机配置目录
    │   ├── jack
    │   ├── jack_android
    │   └── qhjack
    ├── rsa_key.priv   # RSA私钥
    ├── tinc.conf  # 对特定网络的主配置文件
    ├── tinc-down   # 关闭接口自动执行的hook文件
    └── tinc-up   # 启动接口自动执行hook文件

加入网络

如果通过邀请加入,则直接跳到接口配置即可,命令为:

sudo tinc -n netname join url

配置主配置文件

tinc的每个网络都是独立的文件夹,对每个tinc网络实例的主配置文件大致如下:

Name = jack
Interface = tinc0
Mode = router
Compression=11
ConnectTo = qhjack
Cipher  = aes-256-cbc
Digest = sha256

参数含义如下:

  • Name:当前节点的名字
  • Interface:生成的接口名字
  • Mode:工作模式,支持以下三种模式:
    • switch: 交换机模式,对MAC进行交换和学习
    • hub:集线器模式,所有数据广播给所有节点
    • router:路由器模式,对IP进行路由
  • Compression:压缩级别,支持0(off)、1(fast zlib)-9(best zlib)和10(fast LZO)以及11(best LZO)
  • ConnectTo:连接到特定的节点,通常情况下,在tinc 1.1支持AutoConnect,并且默认为yes,因此这个选项不是必须的,当AutoConnectno时,需要指定该选项
  • Cipher:用于使用旧协议加密UDP数据包的对称密码算法。任何LibreSSL都支持ssl。此外,指定none将关闭包加密。最好只使用那些支持CBC模式的密码。此选项对使用SPTPS协议的连接无效,该协议始终使用AES-256-CTR
  • Digest:用于使用旧协议对UDP数据包进行身份验证的摘要算法。可以识别LibreSSL或OpenSSL支持的任何摘要。此外,指定none将关闭包身份验证。此选项对使用SPTPS协议的连接无效,后者始终使用HMAC-SHA-256

配置主机配置文件

主机配置文件格式通常是:

Subnet = 10.1.3.2/32
Subnet = 2001:2:fe:ccff::2/128
-----BEGIN RSA PUBLIC KEY-----
RSA公钥
-----END RSA PUBLIC KEY-----
Ed25519PublicKey = Ed25519公钥

参数含义如下:

  • Subnet:宣告出去的地址段
  • Address:宣告出去的节点地址
  • Port:宣告出去的端口,默认为655
  • Ed25519PublicKey:RSA公钥

生成公钥

执行以下命令即可生成长度为4096的公钥:

tinc -n netname generate-keys 4096

如果netname是tinc0,则命令是:

tinc -n tinc0 generate-keys 4096

接口配置

最后,我们仍需要对接口进行设置,否则我们的接口没办法知道自己的ip等信息,我们通过编写tinc-uptinc-down来进行配置,这是一个bash的hook文件,如下tinc-up

#!/bin/sh
#ifconfig $INTERFACE 10.1.3.2 netmask 255.255.255.0
ip addr add dev $INTERFACE local 2001:2:fe:ccff::2/64
ip addr add dev $INTERFACE local 10.1.3.2/24
ip link set $INTERFACE up

tinc-down用来在tinc关闭时自动执行,如:

#!/bin/sh
ip link set $INTERFACE down

注意:tinc-uptinc-down必须具备执行权限,如:

sudo chmod a+x tinc-up
sudo chmod a+x tinc-down

启动tinc

启动一个tinc网络的命令如:

sudo systemctl start tinc@netname

如果网络名为tinc0的话,则命令为:

sudo systemctl start tinc@tinc0

netname必须存在/etc/tinc/netname目录,并且是有效的网络配置

设置开机启动

我们可以将网络名加入nets.boot以实现开机启动,如:

tinc0

然后执行如下命令即可开机启动特定网络:

sudo systemctl enable tinc

也可以使用如下命令启动立刻特定网络:

sudo systemctl start tinc

邀请他人

我们可以在一个外网可以直接连接的公网节点,使用如下命令创建一个邀请:

sudo tinc -n netname invite nodename

将生成一个URL,可以发给对方使用join加入网络,邀请收到连接的收件人邀请进入,节点将为nodename,假如netname为tinc0,邀请对方以test节点为节点名进入网络,则输入命令:

sudo tinc -n tinc0 invite test
0 0 vote
Article Rating
打赏

订阅
提醒
guest
0 评论
Inline Feedbacks
View all comments

扫码二维码快速访问本页

部署Tinc VPN组网 – 起航天空
0
Would love your thoughts, please comment.x
()
x