使用tailscale实现异地组网
背景
- 想和不在一个局域网下的朋友,联机玩星露谷
- 有很多设备,有的在云上,有的在公司,有的在家,上面或多或少都部署了一些服务,虽然有 UU 远程和自带的端口映射,但还是不够方便。
思考过的解决方案:
- VPN
- FRP
但都需要一台服务器来架设服务,懒得维护,最终找到了 Tailscale 这款软件,完美满足我的需求。
介绍
Tailscale 是基于 WireGuard 实现的异地组网工具,能够将处于不同网络环境下的设备构建成统一虚拟局域网,实现设备间互通。 只需在路由器或 NAS 上部署 Tailscale 完成组网,即可达成如下能力:
- 接入 Tailscale 的设备,可通过家庭局域网内网 IP 直接访问家庭内网资源;
- 家庭内网设备,可使用 Tailscale 分配的虚拟 IP,反向访问所有接入 Tailscale 的终端;
- 支持多局域网跨网互通,每个局域网仅需一台设备部署 Tailscale,要求各局域网网段不能冲突。
下载安装使用
前往 https://tailscale.com/download,选择合适的版本,下载安装即可。

安装后登录同样的账号,就会进入同一个组网。

此时组网就成功了,可以互相访问开放的服务。

子网功能(指定网段代理)
文档:https://tailscale.com/docs/features/subnet-routers
子网路由器允许你将 Tailscale 网络(称为 tailnet)扩展至包含无法运行或无需运行 Tailscale 客户端的设备。它们作为 tailnet 与物理子网之间的网关,让你无需在所有设备上安装 Tailscale,就能安全访问老旧设备、整个网络或各类服务。这一功能在保留 Tailscale 安全模型的同时,为复杂网络环境提供了灵活性。
简单来说,可以访问目标内网中的其他资产,如打印机、NAS、未安装 tailscale 的设备上的服务,相当于做成一个代理、跳板机。
官方步骤很详细,建议直接看官方的,这里简单记录下,设置可访问的网段(不建议用 windows,windows 可能会比较卡):
# 打开转发 方式一
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
# 方式一不行就用方式二
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
# 设置网段
sudo tailscale set --advertise-routes=192.0.2.0/24,198.51.100.0/24

从管理页面启用路由:

对应操作如下:

然后 IP就可以访问通了。

补充:一些资产做了 ALB,必须要通过域名才能访问,最简单的办法,就是直接改本地 hosts 即可。
出口节点(全局代理)
文档:https://tailscale.com/docs/features/exit-nodes
默认情况下,Tailscale 作为覆盖网络运行:它仅转发运行 Tailscale 的设备之间的流量,不会干预你的公网互联网流量,例如访问谷歌或推特时产生的流量。对于大多数需要在敏感设备(例如公司服务器或家用电脑)之间实现安全通信,但又不希望为公网互联网连接增加额外加密层级或延迟的用户而言,该覆盖网络配置十分适用。
简单来说,所有的流量都从出口节点出去,相当于做了一个全局代理(初步体验了下,速度有点慢,不是很理想)
配置步骤:

使用步骤:

