Tinc on OpenWrt 组网

上一篇写了在路由器上使用 WireGuard 在 IPv6 上直连组网,效果也不错。但是 WireGuard 是使用 UDP 通信的,有可能会被运营商 QoS 限速,所以还可以试试使用 TCP 通信的 Tinc 来组网。

安装 Tinc

在两台路由器上均进行安装。

opkg update
opkg install tinc

配置 Tinc

此处假设使用两台路由器来配置互相连接,名称为 A 和 B。
路由器 A 的 DDNS 地址为 A.router.com,路由器 B 的 DDNS 地址为 B.router.com,这里解析出来的地址无论是 IPv4 还是 IPv6 都没关系,只要是公网能访问的地址就可以。
路由器 A 和 B 均使用 665 端口监听 tinc 的传入连接。
路由器 A 的局域网为 192.168.88.0/24,路由器 B 的局域网为 192.168.99.0/24。
在 tinc 网络中,路由器 A 使用 IP 10.0.0.88,路由器 B 使用 IP 10.0.0.99。

路由器 A

首先需要定义一个网络名称,这里使用 tincnet

/etc/tinc/ 目录中新建文件夹,名字为网络名称,即创建 /etc/tinc/tincnet/ 目录。
在此目录下创建 tinc.conf tinc-up tinc-down 文件和 hosts 文件夹。
tinc.conftincnet 的配置文件,tinc-up 为启动该网络时自动执行的脚本,tinc-down 为关闭该网络时自动执行的脚本,hosts 文件夹保存着各个节点(路由器)的信息。

tinc.conf 文件中保存着路由器 A 的配置信息:

Name = A #路由器 A 的名称
BindToAddress = * 665 #监听端口
Interface = tinc #虚拟接口名称
Device = /dev/net/tun
Mode = switch #交换机模式
ConnectTo = B #默认连接路由器 B

tinc-up 文件是网络启动时执行的脚本,一般在这里为 tinc 的接口添加地址信息:

#!/bin/sh

ip link set $INTERFACE up
ip addr add 10.0.0.88/24 dev $INTERFACE
ip route add 192.168.99.0/24 via 10.0.0.99 dev tinc src 10.0.0.88 onlink

tinc-down 文件是网络关闭时执行的脚本,一般在这里为 tinc 的接口清除配置:

#!/bin/sh

ip route del 192.168.99.0/24
ip addr del 10.0.0.88/24 dev $INTERFACE
ip link set $INTERFACE down

配置好 tinc-up tinc-down 文件之后,不要忘了为这两个文件增加执行权限:

chmod +x tinc-up
chmod +x tinc-down

hosts 文件夹中先创建好本机的文件,名称需要与上方 tinc.conf 中第一行的配置保持一致,即文件 A

Address = A.router.com
Port = 665
Subnet = 10.0.0.88/32

接下来为 tincnet 创建密钥信息,在询问保存位置时直接回车使用默认位置即可:

tinc -n tincnet generate-rsa-keys
tinc -n tincnet generate-ed25519-keys

此时路由器 A 的 /etc/tinc/tincnet/ 目录下的情况为:

├── ed25519_key.priv
├── hosts/
│   └── A
├── rsa_key.priv
├── tinc-down*
├── tinc-up*
└── tinc.conf

最后需要编辑 /etc/config/tinc 文件:

config tinc-net tincnet
    option enabled 1
    option Name A

config tinc-host A
    option enabled 1
    option net tincnet

路由器 B

首先需要定义一个网络名称,这里还是使用 tincnet

/etc/tinc/ 目录中新建文件夹,名字为网络名称,即创建 /etc/tinc/tincnet/ 目录。
在此目录下创建 tinc.conf tinc-up tinc-down 文件和 hosts 文件夹。
tinc.conftincnet 的配置文件,tinc-up 为启动该网络时自动执行的脚本,tinc-down 为关闭该网络时自动执行的脚本,hosts 文件夹保存着各个节点(路由器)的信息。

tinc.conf 文件中保存着路由器 B 的配置信息:

Name = B #路由器 B 的名称
BindToAddress = * 665 #监听端口
Interface = tinc #虚拟接口名称
Device = /dev/net/tun
Mode = switch #交换机模式
ConnectTo = A #默认连接路由器 A

tinc-up 文件是网络启动时执行的脚本,一般在这里为 tinc 的接口添加地址信息:

#!/bin/sh

ip link set $INTERFACE up
ip addr add 10.0.0.99/24 dev $INTERFACE
ip route add 192.168.88.0/24 via 10.0.0.88 dev tinc src 10.0.0.99 onlink

tinc-down 文件是网络关闭时执行的脚本,一般在这里为 tinc 的接口清除配置:

#!/bin/sh

ip route del 192.168.88.0/24
ip addr del 10.0.0.99/24 dev $INTERFACE
ip link set $INTERFACE down

配置好 tinc-up tinc-down 文件之后,不要忘了为这两个文件增加执行权限:

chmod +x tinc-up
chmod +x tinc-down

hosts 文件夹中先创建好本机的文件,名称需要与上方 tinc.conf 中第一行的配置保持一致,即文件 B

Address = B.router.com
Port = 665
Subnet = 10.0.0.99/32

接下来为 tincnet 创建密钥信息,在询问保存位置时直接回车使用默认位置即可:

tinc -n tincnet generate-rsa-keys
tinc -n tincnet generate-ed25519-keys

此时路由器 B 的 /etc/tinc/tincnet/ 目录下的情况为:

├── ed25519_key.priv
├── hosts/
│   └── B
├── rsa_key.priv
├── tinc-down*
├── tinc-up*
└── tinc.conf

最后需要编辑 /etc/config/tinc 文件:

config tinc-net tincnet
    option enabled 1
    option Name B

config tinc-host B
    option enabled 1
    option net tincnet

交换密钥

需要将路由器 A 上的 /etc/tinc/tincnet/hosts/A 文件复制到路由器 B 的/etc/tinc/tincnet/hosts/ 目录下,同理,需要将路由器 B 上的 /etc/tinc/tincnet/hosts/B 文件复制到路由器 A 的/etc/tinc/tincnet/hosts/ 目录下。

此时两个路由器的 /etc/tinc/tincnet/ 目录下均为这样:

├── ed25519_key.priv
├── hosts/
│   ├── A
│   └── B
├── rsa_key.priv
├── tinc-down*
├── tinc-up*
└── tinc.conf

需要注意两个路由器要在防火墙中开放 665 端口。

在两个路由器上均启动 tinc,即可连通两个路由器:

/etc/init.d/tinc start

完成

如果需要更省心的操作,可以参考上一篇文章中的自动化的配置。