实名推荐虚拟组网套件——Tailscale

关键词

  • Tailscale
  • Subnet routes
  • Exit node

引言

使用Tailscale配置好虚拟组网生态后,我个人沉浸式使用了半年时间,非常好用,非常优雅的满足了我的各种使用需求,忍不住要向大伙儿分享

先说句题外话,之前分享自建Tailscale节点教程的时候,很多佬友在评论区留言说觉得Tailscale用起来太复杂了,还是Zerotier更简单上手。

从我个人的使用体验来说,Zerotier的优势在于节点认证十分简单,设备只需要一串代码就能入网,而基于官方认证系统的Tailscale就需要良好的网络环境,仅从认证这一环节来看,Tailscale确实没有优势(Headscale自建认证系统虽然能解决这个问题,但是对我来说又太麻烦了)

那我为什么最后还是选择使用Tailscale作为我的个人家庭虚拟组网套件呢?

正文

设备情况

首先介绍我的个人设备网络情况,两个局域网不在一个城市:

局域网A下部署一个主路由,该网关下有我的NAS、Ubuntu和软路由;

在另一个局域网B中部署一个副路由,该网关下有我的PC、iPad、手机。

我的需求就是能够随时随地、便捷地访问和配置A网下的所有设备。

graph TD
    subgraph "局域网A"
        A_GW[主路由] --> NAS[NAS]
        A_GW --> Ubuntu[Ubuntu 主机]
        A_GW --> SoftRouter[软路由]
    end

    subgraph "局域网B"
        B_GW[副路由] --> PC[PC]
        B_GW --> iPad[iPad]
        B_GW --> Phone[手机]
    end

    A_GW <-->|虚拟组网| B_GW

    style A_GW fill:#cde4ff,stroke:#333
    style B_GW fill:#ffe4cd,stroke:#333 

Subnet routes(子网路由器)

这时就要使用到Tailscale的Subnet routes(子网路由器)功能,这也是最吸引我的功能。

虚拟组网会给子网设备分配虚拟的IP地址,这个地址可以自定义。

但是这就有一个不方便的地方,比如说我在局域网环境下访问NAS上的站点服务(如emby、群晖主页)时,已经保存有cookie和历史记录,很多站点服务的端口、账号、密码,我都完全依赖chrome的联想和自动补全,如果在虚拟局域网环境下NAS的IP改变了,就意味着我需要重新输一遍,这对我来说太麻烦了。

而 Subnet routes(子网路由器)可以实现将局域网的某个子网设备作为路由器将一个网段共享,什么意思呢,就是我在虚拟组网环境下,依然可以直接通过访问局域网IP来直接访问设备,不需要做任何调整

这是一种极大便利,因为我会在手机、平板、电脑上访问局域网下的多个设备,这涉及到十几个应用或窗口,如果都需要一一调整IP,我会裂开的。

而且这个功能的优势在于,你只需要将局域网中一台设备设置为Subnet routes(子网路由器),就可以在虚拟网络环境下访问整个局域网中同网关下的任意设备,甚至可以远程使用打印机(连WIFI的那种),对于局域网设备多的用户来说,减少了太多配置成本。

特别是当你的设备回到局域网环境中时,一切配置都不需要调整的感觉,你想象那种爽感吗?

Exit node(出口节点)

接下来这个功能,我用的不多,但是对于某些场景,实用性是相当高的。

Exit node(出口节点)就是可以将任意一个虚拟组网设备a配置为流量出口节点,如果你在另一个虚拟组网设备b中将设备a选中为出口节点,那么此时你的设备b的所有流量都会通过a中转。

是不是很像VPN?

已经有了clash,这个功能有什么意义呢?

举例子:

  1. 在手机上同时只能启动一个VPN,如果你使用了Tailscale,你就不能同时使用clash。但如果此时你刚好有一个组网设备实现了科学上网,那么将它作为Exit node(出口节点),在手机上选择它,你就能同时实现虚拟组网+科学上网。

  2. 又或者有一些设备突然需要科学上网,但是不方便配置clash,或者懒得折腾,直接使用Exit node(出口节点)功能,就能瞬间解决这个难题。

  3. 再或者在一些业务场景中,某些APP或网站不允许异地登录或者频繁更换IP,你也可以将一个固定家宽设备作为Exit node(出口节点),其他登录设备都将其选择它作为流量出口。

这个功能虽然对我来说使用频率并不高,但是用起来几乎没有任何成本,偶尔用上了就会感到爽的不行。

STUN内网穿透强行实现P2P

接下来这个玩法,我怀疑全网估计都没人说过,虽然原理并不复杂。

Tailscale之所以需要自建derp,一个是增加NAT打洞概率,一个是为了设备NAT打洞失败情况下,也能回退到中继保持联通

但是现实的网络环境并不总受自己掌控,特别是在外租房,那网络环境更是一个比一个逆天,一个比一个复杂,所以NAT打洞几乎是不可能的。

如果我只能使用中继节点的3Mbps“大”水管看emby,那真不如看在线资源

所以之前我在主路由部署了lucky,使用STUN内网穿透随便给一个端口打了一个洞

没想到无心插柳柳成荫,这个穿透出来的地址就相当于我的局域网的公网IP,此时在Tailscale虚拟组网环境中ping我的局域网设备,都自动从STUN穿透地址实现了直连。

总结

实际上我在使用Tailscale时,并没有进行很复杂的配置,也没有仔细研究它的功能,我就是在使用过程中慢慢解锁了上面这些能力,然后才发现它帮我省了多少时间和精力,我非常乐意向你推荐这个宝藏虚拟组网套件。

这篇文章并不是教程,如果有佬友需要更具体的配置,可以留言说一下,我觉得使用起来还是很符合逻辑的。

优点小结

优点1:设备支持
我的个人设备几乎涵盖了所有主流操作系统:Windows、Ubuntu、OpenWrt、群晖、Mac OS、iPad OS、Android,而Tailscale支持以上所有设备,且你很方便的就能实现安装(应用商城、命令行、安装包)。

优点2:支持局域网IP
不管在什么网络环境下,都使用一个固定局域网IP访问设备,使用体验极好。

优点3:自选流量出口
将子网设备作为出口节点,实现流量转发功能。

题外话

说到STUN内网穿透,之前我也分享了一个内网穿透的使用手册,但是现在cloudflare调整了Free计划,好像已经用不了了。

而且之前的域名跳转也很不优雅,我最近想做一个STUN内网穿透2.0教程,并且开发了一个支持动态更新域名的轻量导航站,不知道有没有佬友觉得有意思的,对于导航站的建议可以随时提。

159 个赞

感觉不错,感谢分享!

2 个赞

不错的教程,感谢分享。虽然我选择直接内网穿透放在公网上,但是你这个方案更私密安全。

5 个赞

请谨慎在 Linux 服务器上安装,有概率造成服务器失联或断网

4 个赞

其实Zerotier配Managed Routes也可以实现子网路由

我从zerotier换tailscale的核心动力是原生的自建derp支持moon真难用吧、控制平面转发的保底连接可靠性以及更方便的连接性debug工具。以前用zerotier连不上的时候根本查不出来为什么

以及tailscale感觉比zerotier完善一些,web控制台、客户端应用和各种功能都更好用

2 个赞

目前没有出现这个问题,我认为应该是更大可能是个人配置问题

1 个赞

我在路由器上面装了Zerotier和Tailscale
Zerotier秒打洞成功,Tailscale一直只能走中转,不知道是什么原因

2 个赞

哇塞,终于有大佬细聊整个配置内容了,我先看看对网络的要求程度如何,谢谢分享。

2 个赞

感谢佬友分享,回头有空研究研究

2 个赞

很简单易用,我现在组网就是用这个和surge,无缝衔接家里设备,我上班都是带着ipad ,然后远程桌面家里电脑,延迟6ms,带宽30M

5 个赞

个人感觉tailscale可能没适配好网络边界的设备,有公网v4还是打洞失败

这个问题我选择摆烂,端口转发41641 udp解决拉倒

2 个赞

我想给家人也装一个,取代无公网V4的困恼。

3 个赞

ios怎么用 家庭电脑作为exit node吗

2 个赞

我对这个相当感兴趣,等有空了试试。多写分享。

3 个赞

是不是同运营商?
现在跨运营商时候,我电信链接家里联通基本不可用,经常丢包卡顿

1 个赞

各种跨,什么联通、电信、移动,三家都有

这个还蛮神奇的哈哈

那很奇怪,我家里还是联通公网。
不管是公网直连还是打洞,都很卡顿

1 个赞

配置好子网路由,在ipad上开tailscale,请求会按路由规则走对应节点

exit node的作用是转发所有而非指定子网流量,只是连回去没必要

1 个赞

支持,支持,搞一套在公司玩玩

1 个赞