在之前的文章Headscale搭建过程实录中我们介绍了如何搭建一个Headscale服务,并成功将Tailscale加入到Headscale中。安装了Tailscale并成功接入的设备,可以像局域网一样互相访问。
但是在我们的家中,不是每一台设备都是可以安装Tailscale的,这时就需要用到Tailscale的子网路由功能了。

这是一张来自官网的示意图,可以帮助我们快速了解什么是子网路由:
20260322_tailscale_subnet_router
在图中,左边是加入了tailscale网络的节点,右边是另外的一个独立子网。在子网中,我们挑选一台设备安装tailscale,并开启子网路由功能。那么已经加入tailscale的其他设备(图左),就可以直接使用子网的机器ip,例如192.168.0.2,进行直接访问。

部署步骤

关于如何安装tailscale,请参考Headscale搭建过程实录

开启转发功能

1
2
3
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

如果没有/etc/sysctl.d目录,则执行:

1
2
3
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
我用的是alpine系统,重启之后,forward可能会失效。

需要使用命令rc-update add sysctl boot启用sysctl服务

重启tailscale服务并广播子网

如果你是自己部署的headscale服务,使用命令:

1
2
# 192.168.0.0/24 需要根据实际情况修改
tailscale up --accept-routes --advertise-routes=192.168.0.0/24 --login-server=https://hs.example.com

如果是使用tailscale官方服务,使用命令:

1
2
# 192.168.0.0/24 需要根据实际情况修改
tailscale up --advertise-routes=192.168.1.0/24 --accept-routes

在网页批准子网路由

连接成功后,进入对应节点的配置页面,点击“编辑”:
20260322_plane_machine
然后Approve并保存:
20260322_plane_subnet_route_approve
就成功开启了子网路由~~

验证

在任意一台开启tailsale的设备中,直接ping子网中的机器ip,例如192.168.0.2。如果能正常受到响应,则说明子网路由成功。