背景
我有多个节点的设备,以前使用zertotier实现互联互通,但稳定性不如后来发现的tailscale,网络自由度也数tailscale更高,因此我所有的设备都切换到tailscale网络上来,包括腾讯云、阿里云、华为云、私人服务器、路由器(openwrt)等等,但这些设备里面,就数openwrt中的tailscale最难部署,此文记录当前完美的部署方案。
方案
- openwrt/immortalwrt自由仓库里面的tailscale,wrt从wrt 22才开始集成tailscale,但仓库里面的版本太老旧,被提示高危漏洞。
- docker平台上的tailscale,好几个设备上的tailscale使用的是docker部署tailscale,但在wrt中,最少需要60MB的空间,路由器大多都是小固件空间,这个方案在wrt中行不通。
- 使用官方二进制包进行部署,需要至少50MB的运行内存或者固件存储,此方案因我的路由器有512MB的运行内存,并且还在github中找到一个现成的运行管理库,部署更方便,需要的固件空间更小,大运行内存也有它相应的用途,这是推荐的方案,也是本文所写的方案。
步骤
下面所有的操作都需要在终端中运行,推荐使用Xterminal终端以ssh协议连接路由器。
1下载软件
wget https://github.com/adyanth/openwrt-tailscale-enabler/releases/download/v1.60.0-e428948-autoupdate/openwrt-tailscale-enabler-v1.60.0-e428948-autoupdate.tgz
这个命令直接运行在wrt的命令行终端,会自动下载部署包。
当然,也可以直接在浏览器中先下载,然后使用winscp、网页上传等工具传到wrt中的/tmp分区。
2解压软件
tar x -zvC / -f openwrt-tailscale-enabler-v1.60.0-e428948-autoupdate.tgz
3安装依赖包
opkg update
opkg install libustream-openssl ca-bundle kmod-tun
4设置开机启动,验证开机启动
/etc/init.d/tailscale enable
ls /etc/rc.d/S*tailscale*
5启动tailscale
/etc/init.d/tailscale start
这个命令,会自动下载最新版本的tailscaled到/tmp,并启动服务。
6获取登录链接
tailscale up
复制显示的地址,并在浏览器中打开,登录Tailscale的管理主页进行验证。
7开启子网
在OpenWrt上输入以下命令,打开本地子路由。子网地址是OpenWrt的lan网络。
tailscale up --accept-dns=false --accept-routes --advertise-routes=192.168.2.0/24
--netfilter-mode=off
关闭自动添加防火墙功能,因为该功能会影响新版本的防火墙配置,在openwrt 23以后的版本的版本不需要这个配置项。--accept-dns=false
关闭接受 dns 通告,不接受服务器的dns。--accept-routes
接受其他子网路由器以及作为子网路由器的任何其他节点的通告路由。--advertisse-routes
将物理子网路由公开到整个 Tailscale 网络。
在Tailscale的管理页面上,单击设备列表右侧的更多图标,禁用密钥过期,并打开子网路由,我这里并没有打开,因为我暂时用不着
8配置防火墙
以下的命令,新增tailscale接口,无协议,并指定了tailscale0设备,在防火墙创建tailscale区域,允许转发到lan和wan,这样路由下面的设备可以直接访问tailscale网络。
uci add network tailscale
uci set network.tailscale=interface
uci set network.tailscale.proto=none
uci set network.tailscale.device=tailscale0
uci commit network
uci add firewall zone
uci set firewall.@zone[-1]=zone
uci set firewall.@zone[-1].name=tailscale
uci set firewall.@zone[-1].input=ACCEPT
uci set firewall.@zone[-1].output=ACCEPT
uci set firewall.@zone[-1].forward=ACCEPT
uci set firewall.@zone[-1].masq=1
uci set firewall.@zone[-1].mtu_fix=1
uci set firewall.@zone[-1].network=tailscale
uci commit firewall
uci add firewall forwarding
uci set firewall.@forwarding[-1].src=tailscale
uci set firewall.@forwarding[-1].dest=wan
uci commit firewall
uci add firewall forwarding
uci set firewall.@forwarding[-1].src=lan
uci set firewall.@forwarding[-1].dest=tailscale
uci commit firewall
uci add firewall forwarding
uci set firewall.@forwarding[-1].src=tailscale
uci set firewall.@forwarding[-1].dest=lan
uci commit firewall
最终防火墙类似以下的配置
结论
tailscale在路由器设备有更高的部署要求。