安装

~$ sudo apt install tinc

如果没有 ifconfig 命令:
~$ sudo apt install net-tools

Alpine Linux 启用 tun 设备

alpie linux 默认没有启用 tun 设备,因此配置完毕启动服务业看不到虚拟网卡信息。

sudo modprobe tun
sudo echo "tun" >>/etc/modules

检查确认是否启用成功

ls /dev/net/tun

Alpine Linux 系统服务配置文件

sudo nano etc/conf.d/tinc.networks

Server

创建配置文件目录:

~$ sudo mkdir -p /etc/tinc/p2pvpn/hosts

创建 tinc.conf 配置文件:

~$ sudo nano /etc/tinc/p2pvpn/tinc.conf

Name = vultr
Device = /dev/net/tun

创建 vultr 配置文件(Address 为公网 IP):

~$ sudo nano /etc/tinc/p2pvpn/hosts/vultr

Address = 45.63.45.63
Subnet = 10.0.0.1/32

创建 tinc-up 配置文件:

~$ sudo nano /etc/tinc/p2pvpn/tinc-up

对于 ifconfig
#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0

对于 ip
#!/bin/sh
ip link set $INTERFACE up
ip addr add  10.0.0.1/24 dev $INTERFACE

创建 tinc-down 配置文件:

~$ sudo nano /etc/tinc/p2pvpn/tinc-down

对于 ifconfig
#!/bin/sh
ifconfig $INTERFACE down

对于 ip
#!/bin/sh
ip addr del 10.0.0.1/24 dev $INTERFACE
ip link set $INTERFACE down

为脚本设置可执行权限:

~$ sudo chmod -v +x tinc-{up,down}

生成密钥对(公钥会自动追加到 hosts/vultr 文件尾部):

~$ sudo tincd -n p2pvpn -K4096

vultr 配置文件复制到 Client/etc/tinc/p2pvpn/hosts 目录。

启动:

~$ sudo tincd -n p2pvpn

Client

创建配置文件目录:

~$ sudo mkdir -p /etc/tinc/p2pvpn/hosts

创建 tinc.conf 配置文件:

~$ sudo nano /etc/tinc/p2pvpn/tinc.conf

Name = homeserver
Device = /dev/net/tun
ConnectTo = vultr

创建 homeserver 配置文件:

~$ sudo nano /etc/tinc/p2pvpn/hosts/homeserver

Subnet = 10.0.0.2/32

创建 tinc-up 配置文件:

~$ sudo nano /etc/tinc/p2pvpn/tinc-up

#!/bin/sh
ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

对于 ip
#!/bin/sh
ip link set $INTERFACE up
ip addr add  10.0.0.2/24 dev $INTERFACE

创建 tinc-down 配置文件:

~$ sudo nano /etc/tinc/p2pvpn/tinc-down

#!/bin/sh
ifconfig $INTERFACE down

对于 ip
#!/bin/sh
ip addr del 10.0.0.2/24 dev $INTERFACE
ip link set $INTERFACE down

为脚本设置可执行权限:

~$ sudo chmod -v +x tinc-{up,down}

生成密钥对(公钥会自动追加到 hosts/homeserver 文件尾部):

~$ sudo tincd -n p2pvpn -K4096

homeserver 配置文件复制到 Server/etc/tinc/p2pvpn/hosts 目录。

启动:

~$ sudo tincd -n p2pvpn

Mutiple Clinet

可参照 Clinet 添加多个客户端,客户端只需与服务端交换带公钥的主机名配置文件即可,不需要和其他的客户端交换。

Mac OS X 客户端

使用 brew 安装,程序目录位于 /usr/local/Cellar/tinc

~$ brew install tinc

创建配置文件目录

~$ mkdir -p /usr/local/etc/tinc

手动启动服务

pid 文件位置:/var/run/tinc.p2pvpn.pid

$ sudo /usr/local/sbin/tincd -c /usr/local/etc/tinc/p2pvpn/ --pidfile=/var/run/tinc.p2pvpn.pid

其他配置方式与前面记录的方法相同。

Windows 客户端

在程序安装目录 C:\Program Files (x86)\tinc 创建 p2pvpnp2pvpn\hosts 子目录,创建 tinc.conf 配置文件:

Name = lenovo
Interface = VPN
ConnectTo = vultr

注意:这里要用 Interface 而不是 Device

p2pvpn\hosts 创建主机文件,例如 lenovo

Subnet = 10.10.0.2/32

以管理员身份打开终端,切换到 tinc 安装目录,生成密钥:

C:\Program Files (x86)\tinc> .\tincd.exe -n p2pvpn -K4096

无需创建 tinc-up 和 tinc-down。但要 以管理员身份 打开命令行安装虚拟网卡,程序目录提供了 32位64位 两个版本,根据所使用的操作系统选择,以管理员身份执行 addtap.bat 脚本。

虚拟网卡安装完成后,重命名为 VPN,此处的名称与 tinc.conf 配置文件中 Interface 的名称相对应。

注意:使用 Windows 中的 设备管理器 卸载虚拟网卡

直接在虚拟网卡属性中配置 IPv4 地址和掩码。

tinc-windows-ip

在命令行中启动服务 tincd.exe -n p2pvpn 后会自动创建系统服务,配置无误服务即可正常启动。

提示:在 Windows 系统服务管理中停止服务。

与服务端交换主机名文件即可。

Auto start

~$ sudo systemctl enable tinc.service

~$ sudo systemctl enable tinc@p2pvpn

~$ sudo systemctl enable tinc@another_name

重点备忘

无论客户端还是服务端,主机文件中的 Subnet 中的 IP 部分要与 tinc-up 中的 IP 地址相一致,而且每个主机的 Subnettinc-up 中的 IP 地址要唯一,否则会出现节点之间 PING 不通的现象。

多台服务器的情况
如果有多台服务器时,需在客户端配置文件 tinc.conf 中设置多条 ConnectTo 记录,例如:

Name = macbook
Device = /dev/tap0
ConnectTo = qcloud
ConnectTo = vultr

故障排查

  • ping 不通时,检查 VPS 是否防火墙屏蔽了 655 端口;
  • 主机名 不要使用符号字符

See also