sing-box 从 1.12.0 开始引入了 Tailscale 端点的支持。本文介绍如何在 OpenWrt 路由器上使用它组网。
安装
参考官方文档。
配置
sing-box
这是我使用的配置,参考官方文档。
{
"log": {
"level": "info"
},
"endpoints": [
{
"type": "tailscale",
"tag": "ts",
"hostname": "netbird",
"advertise_routes": [
"192.168.42.0/24"
],
"accept_routes": true,
"system_interface": true,
"system_interface_name": “sbts”
}
]
}
这里的作用和官方的 daemon 类似,我们使用 sing-box 启动了一个名为 sbts 的 TUN 接口,用于和 Tailnet 通信。我们的节点名为 netbird,接受外部通告的网段,并向外部通告 192.168.42.0/24 这个段(即节点所处的局域网段)。
使用命令 service sing-box start 启动服务,然后使用 logread 查看 sing-box 输出的登陆地址,可能要多试几遍。
接口
目前我们只是启动了虚拟设备,要让它被 OpenWrt 管理,我们需要新建一个接口,将底层的虚拟设备暴露出来。
路由
目前我们还没有配置任何路由规则,路由器不知道需要把哪些网段转发到我们的接口。
假设我们的对端网段是 192.168.69.0/24,则添加静态路由如下:
此外我们需要将 Tailnet 的网段路由进我们的接口,否则无法形成对称路由,让外部访问我们的设备,或从我们的设备访问 Tailnet 网段。
防火墙
我们还需要配置防火墙,允许 LAN 区域与我们的 VPN 互通。添加一个区域:
至此,我们应该已经可以从该局域网下的任意一台设备连接到对端和 Tailnet。请注意,我们已经假定对端已经通过 Tailscale 通告网段,你可以参考我以前的一篇教程:我的 MiniLab:内网互联
优点
sing-box 作为客户端比官方 Tailscale 的内存占用要低,不使用全局 TUN 并在 sing-box 内部路由,这样 sing-box 挂了不至于把网络一波带跑。