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

网络安全
查看原帖
你正在查看历史版本 v1。返回最新版本

在模态框中查看主贴与评论的删除、修改和新增情况。

906051999
906051999 楼主
#1

关键词

  • 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教程,并且开发了一个支持动态更新域名的轻量导航站,不知道有没有佬友觉得有意思的,对于导航站的建议可以随时提。

:heart:139:+1:19:clap:1:open_mouth:1
TOPIC OWNER
168楼层
167回复
88用户
906051999 momeo Chaosm Cat73 Xinalin marsgh

评论第 3 页,共 4 页

zj.z
zj.z
#104

感觉分享

:heart:1
Fayilor
#105

你指的是exit node节点与使用exit node的节点吗?
如果是的话,那么答案是不需要,因为tailscale本身就是虚拟局域网,只要同在一个tailnet(tailscale的网络名)就可以用这种形式,即使不用tailscale,用其他的一些组网工具,只要条件具备(exit node本质上也是一种流量接管),原理上也是能通的。

:heart:1
houlangs
houlangs
#106

也是从zerotier转到ts然后又回到zr的。我日常使用下来认为zr的打洞能力更强,p2p激活的概率也更高。
ts的用户体验更好,有很多方便的功能。比如内网dns解析,权限控制等等。

:heart:2
1018ji
1018ji
#107

stun 都成,说明网络就可以了,tailscale 还不能 p2p 感觉不太现实

houlangs
#108

佬,不太清楚你的具体情况。看4k,瓶颈主要在你家的上行带宽,上行带宽不够,什么组网方法也无济于事

:heart:1
2个回复
906051999
906051999 楼主

家宽上行一般都是有30Mbps-50Mbps,看4k差不多够

如果走中继的话,就不太可能了,国内的99/年价位的云服务器,带宽只有3M左右

所以p2p还是很有必要的

TOPIC OWNER
Denial3938

一个人的上行是不是就是另外一个人的下行

:heart:1
↓ 跳到帖子
906051999
906051999 楼主 ↶ @houlangs
#109

家宽上行一般都是有30Mbps-50Mbps,看4k差不多够

如果走中继的话,就不太可能了,国内的99/年价位的云服务器,带宽只有3M左右

所以p2p还是很有必要的

1个回复
Denial3938

没有公网也可以P2P吗?

:heart:1
↓ 跳到帖子
TOPIC OWNER
Denial3938 ↶ @houlangs
#110

一个人的上行是不是就是另外一个人的下行

:heart:1
1个回复
houlangs
houlangs

不是的,假设我的上行是100m,你的下行是1000m。你从我这下东西,我发给你的速度就是你下载的速度。当同时受制于你下载的能力。

:heart:2
↓ 跳到帖子
Denial3938 ↶ @906051999
#111

没有公网也可以P2P吗?

:heart:1
1个回复
906051999
906051999 楼主

p2p不需要公网IP,只要NAT环境支持,两个设备就能牵手成功

TOPIC OWNER
↓ 跳到帖子
shklrt
shklrt
#112

感谢分享

Fayilor
#113

认证也要自己部署一次

不太确定佬说的这个部署是指的哪个阶段,但是tailscale如果使用Tailnet Lock特性的话,也需要二次确认,不过我觉得netbird由于控制粒度更细(至少UI上看起来),或许会复杂一点也是情理之中 :thinking:,我是最近刚玩,还没尝试得更深入。

:heart:1
hot
hot
#114

回头试试看

:heart:2
houlangs
#115

不是的,假设我的上行是100m,你的下行是1000m。你从我这下东西,我发给你的速度就是你下载的速度。当同时受制于你下载的能力。

:heart:2
1个回复
Denial3938

但是我从你这下东西 我的下载速度难道不会受到你把东西发给我的速度限制吗 你把东西发给我的速度不就是你的上行带宽吗

:heart:2
↓ 跳到帖子
Denial3938 ↶ @houlangs
#116

但是我从你这下东西 我的下载速度难道不会受到你把东西发给我的速度限制吗 你把东西发给我的速度不就是你的上行带宽吗

:heart:2
1个回复
houlangs
houlangs

是的,同时受制于你的下行带宽

:heart:1
↓ 跳到帖子
houlangs
#117

是的,同时受制于你的下行带宽

:heart:1
1个回复
Denial3938

那对应到这个帖子 怎么提高虚拟局域网的传输速度呢

:heart:1
↓ 跳到帖子
Denial3938 ↶ @houlangs
#118

那对应到这个帖子 怎么提高虚拟局域网的传输速度呢

:heart:1
1个回复
906051999
906051999 楼主

无法提升,家宽的上行一般只有30-50Mbps,看运营商和地区,对应的速度就是3-6mb/s

TOPIC OWNER
↓ 跳到帖子
colt
#119

谢谢教程,之前折腾了Headscale,没有别的服务器换回tailscale。公网v4有时打不通走中继。

:heart:1
kuraudowelle
kuraudowelle
#120

我以前有一个同学也是推荐我用 他的话呢是, 经常, 比如说科学上网, 他是手机连回家。 然后才有了代理的这个流程。 他的手机上什么都没装, 反正就是随时随地的用自己家里的。 路由器网关来进行科学上网。 因为家里都已经布署好了。

:heart:1
Mi_Manchi
Mi_Manchi ↶ @Sullivan
#121

其实还安全,我现在自己家里弄的 nas 和 emby 都是走 tailscale

:heart:1
yyy2024
yyy2024
#122

喜欢哪个用哪个,这些组网工具都大同小异

:heart:1
gophlet
gophlet
#123

Tailscale 的 Subnet 非常好用,而且不管是 Web 管理端还是客户端都设计得比 ZeroTier 更美观。

我原来是手搓的 WireGuard 配置,组了 Mesh 用来打通各个服务器,留了一个中心服务器用来供本地客户端接入服务器群的虚拟局域网,开头几天很稳定,到后面连不上去了,域名端口 IP 都是通的,排查下来发现是 udp 回程被 drop 了……

没办法只能上 Tailscale,但是又不想让每个服务器都安装 Tailscale 客户端,所以在保留原有 WireGuard Mesh 直连的基础上给中心服务器配置了 Subnet 就完美解决了这个问题。

Tailscale 在我心中的地位仅次于 Cloudflare!:grin:

过段时间把老的内网设备也从 ZeroTier 全迁过来,All in Tailscale。

:heart:2
Specs
#124

这样配置后,我在 clash 日志里没有看到手机端的请求

:heart:1
1个回复
Fayilor
Fayilor

没有在macos这边配置过呢,不过可以提供几个方向:

  1. 是否只是单纯的设置生效延迟?
    一般use exit node之后,可能需要重新启动浏览器等程序才能快速用上(我这边是这样)。
  2. exit node提供端有勾选Allow incoming connections吗?
    但是这个设置好像是默认勾选的。同理Allow local network access也可以试试(虽然看官方文档好像与exit node本身关系不大)。
  3. 确认下提供exit node的机器本身的网络栈(tun配置不正确的话可能没有生效?)确实能捕获到使用端设备的连接(用抓包工具试试?)
    如果能捕获到,那么多半是代理这边设置的问题了,不能的话,那可能是ts这边哪里设置没有弄对,我这边目前的经验是,在windows上开启exit node后,android/linux直接使用没有问题,但是另一台windows直接使用就通不了(平时不怎么用就没管了)。
:heart:1
↓ 跳到帖子
zhaox
zhaox
#125

给身边的朋友安利好多次了,我不太会写文档,所以没有分享帖子

我有个玩法分享下,如果有云服务器, ng 可以直接反向代理到你的 tailscale 内网设备,frp 直接就替代掉了

  1. 在服务器上搞了个泛域名证书 *.home.aaa.com; DNS指向云服务器
  2. 直接 nginx 加一条配置,转发到对应的 tailscale 内网设备不用额外考虑解析和证书。就能启动 https 一键转发到内网
  3. 如果云服务器上需要:ladder:的时候,也可以直接 export http_proxy=http://pc-home:7890 走家里的代理,方便的嘞

btw, 虽然可以 http://pc-home:1050,但是建议还是 http://10.25.01.12:1050。用 IP 可以省去一些 DNS 解析的问题,之前在 Docker 里踩过坑

:heart:1
1个回复
zhaox
zhaox

强烈安利 Tailscale 的一个原因是,它真的算是基建了,平时又无感。

设备全部连在一个局域网内,舒服的嘞

:heart:1
↓ 跳到帖子
zhaox
#126

强烈安利 Tailscale 的一个原因是,它真的算是基建了,平时又无感。

设备全部连在一个局域网内,舒服的嘞

:heart:1
mwabu
#127

感谢分享,真详细

:heart:1
orion331
orion331
#128

我这边校园网屏蔽了 Tailscale,但是 zerotier 可以

:heart:1
arxiv
arxiv
#129

很好用的! 打通公司电脑和个人设备 :rofl:美滋滋

:heart:1
Fayilor
Fayilor ↶ @Specs
#130

没有在macos这边配置过呢,不过可以提供几个方向:

  1. 是否只是单纯的设置生效延迟?
    一般use exit node之后,可能需要重新启动浏览器等程序才能快速用上(我这边是这样)。
  2. exit node提供端有勾选Allow incoming connections吗?
    但是这个设置好像是默认勾选的。同理Allow local network access也可以试试(虽然看官方文档好像与exit node本身关系不大)。
  3. 确认下提供exit node的机器本身的网络栈(tun配置不正确的话可能没有生效?)确实能捕获到使用端设备的连接(用抓包工具试试?)
    如果能捕获到,那么多半是代理这边设置的问题了,不能的话,那可能是ts这边哪里设置没有弄对,我这边目前的经验是,在windows上开启exit node后,android/linux直接使用没有问题,但是另一台windows直接使用就通不了(平时不怎么用就没管了)。
:heart:1
1个回复
Specs
Specs

这个也都是打开的状态。电脑上设置了 tun 模式后,日志里能看到 命令行、浏览器的访问,但是手机端重新打开 tailscale 并选择macos作为 exit node 后,浏览器的访问在 clash 里看不到日志 :broken_heart:,感觉还是手机上的 exit node 设置没有生效,没有经过 macOS

:heart:1
↓ 跳到帖子
adrainlee8 ↶ @Cat73
#131

这个问题我遇到过,一般是局域网的失联,在非局域网的机器可以通过 tailscale 的 ip 连接,查了一此资料最后发现是防火墙的问题,还有就是 tailscal 会自动更改/etc/hosts的 dns,改回去就可以了

:heart:2
Specs
#132

这个也都是打开的状态。电脑上设置了 tun 模式后,日志里能看到 命令行、浏览器的访问,但是手机端重新打开 tailscale 并选择macos作为 exit node 后,浏览器的访问在 clash 里看不到日志 :broken_heart:,感觉还是手机上的 exit node 设置没有生效,没有经过 macOS

:heart:1
1个回复
Fayilor
Fayilor

浏览器是手机这边的浏览器?手机还设置了其他代理吗?

:heart:1
↓ 跳到帖子
hoping
#133

一样用过一段时间的zerotier和tailscale,现在直接zerotier了,简单

:heart:1
Fayilor
Fayilor ↶ @Specs
#134

浏览器是手机这边的浏览器?手机还设置了其他代理吗?

:heart:1
1个回复
Specs
Specs

嗯,电脑上浏览器访问在clash里有日志,手机端浏览器访问就没有,应该是没有经过电脑上。手机上只能启用一个代理,开了 tailscale 之后其他就关闭了

:heart:1
↓ 跳到帖子
JakATom
JakATom
#135

学习了,tailscale一直想用,但是怕麻烦一直没用,学习学习

:heart:1
Specs
#136

嗯,电脑上浏览器访问在clash里有日志,手机端浏览器访问就没有,应该是没有经过电脑上。手机上只能启用一个代理,开了 tailscale 之后其他就关闭了

:heart:1
1个回复
Fayilor
Fayilor

怪哉,会不会跟dns有关,客户端有个use tailscale dns设置来着,如果没开的话会不会因为解析不了其他ts节点导致实际上请求根本就没出得去?虽然感觉可能性也不大就是了 :thinking:

:heart:1
↓ 跳到帖子
Fayilor
Fayilor ↶ @Specs
#137

怪哉,会不会跟dns有关,客户端有个use tailscale dns设置来着,如果没开的话会不会因为解析不了其他ts节点导致实际上请求根本就没出得去?虽然感觉可能性也不大就是了 :thinking:

:heart:1
1个回复
Specs
Specs

这个选项我给关了,之前遇到过 istoreos 安装 tailscale 后 默认使用了 tailscale dns 导致上不了网的情况,所以后来都把这个给关了

:heart:1
↓ 跳到帖子
Specs
#138

这个选项我给关了,之前遇到过 istoreos 安装 tailscale 后 默认使用了 tailscale dns 导致上不了网的情况,所以后来都把这个给关了

:heart:1
1个回复
Fayilor
Fayilor

tailscale的dns好像需要配置来着,可以在admin console中查看具体设置,我是简单加了谷歌的8.8.8.8和阿里的223.5.5.5,目前连接没啥问题。

:heart:1
↓ 跳到帖子
906051999
906051999 楼主 ↶ @Denial3938
#139

p2p不需要公网IP,只要NAT环境支持,两个设备就能牵手成功

1个回复
Denial3938

nat是不是假如我有一个服务开在12345 你来访问这个服务还是走12345

:heart:1
↓ 跳到帖子
TOPIC OWNER
906051999
906051999 楼主 ↶ @Denial3938
#140

无法提升,家宽的上行一般只有30-50Mbps,看运营商和地区,对应的速度就是3-6mb/s

TOPIC OWNER
Fayilor
Fayilor ↶ @Specs
#141

tailscale的dns好像需要配置来着,可以在admin console中查看具体设置,我是简单加了谷歌的8.8.8.8和阿里的223.5.5.5,目前连接没啥问题。

:heart:1
dtemiemie
dtemiemie
#142

鸿蒙似乎用tailscale有点问题:face_holding_back_tears:呜呜

:heart:1
xingcxx
xingcxx
#143

想学,但是怕麻烦。自己用的ipv6+ddns方案,还有cf的tunnel,双重保障。ipv6速度还是蛮快的。先收藏备用吧

:heart:1
1个回复
906051999
906051999 楼主

有ipv6就不需要这些了,我这边ipv6生态几乎等于没有

:heart:1
TOPIC OWNER
↓ 跳到帖子
906051999
906051999 楼主 ↶ @xingcxx
#144

有ipv6就不需要这些了,我这边ipv6生态几乎等于没有

:heart:1
TOPIC OWNER
Denial3938 ↶ @906051999
#145

nat是不是假如我有一个服务开在12345 你来访问这个服务还是走12345

:heart:1
1个回复
906051999
906051999 楼主

我理解你说的和 NAT 不是一回事

虚拟组网后就是局域网,局域网怎么用就怎么用

如果你需要暴露某个端口,那是内网穿透+nginx 反代

:heart:1
TOPIC OWNER
↓ 跳到帖子
jinjinx
jinjinx
#146

实名在哪

:heart:1
1个回复
906051999
906051999 楼主

在我的心里 :grinning_face:

:heart:1
TOPIC OWNER
↓ 跳到帖子
N1ght
N1ght
#147

exit node可以自己配置流量出口吗?比如我想排除掉内网段的流量走exit node

:heart:1
1个回复
906051999
906051999 楼主

我觉得应该不适合做这么复杂的行为,不过看到回复里有捞直接把 clash 的端口做成 exit node,或许就是你要的用法,你可以看看记录

:heart:1
TOPIC OWNER
↓ 跳到帖子
906051999
906051999 楼主 ↶ @Denial3938
#148

我理解你说的和 NAT 不是一回事

虚拟组网后就是局域网,局域网怎么用就怎么用

如果你需要暴露某个端口,那是内网穿透+nginx 反代

:heart:1
1个回复
Denial3938

我手头有几个pt站点 是不是比较依赖nat打洞

:heart:1
↓ 跳到帖子
TOPIC OWNER
906051999
906051999 楼主 ↶ @jinjinx
#149

在我的心里 :grinning_face:

:heart:1
TOPIC OWNER
906051999
906051999 楼主 ↶ @N1ght
#150

我觉得应该不适合做这么复杂的行为,不过看到回复里有捞直接把 clash 的端口做成 exit node,或许就是你要的用法,你可以看看记录

:heart:1
TOPIC OWNER
Denial3938 ↶ @906051999
#151

我手头有几个pt站点 是不是比较依赖nat打洞

:heart:1
1个回复
906051999
906051999 楼主

就看你能不能正常下种了,反正我这边下种没问题,做种就基本没啥速度

TOPIC OWNER
↓ 跳到帖子
906051999
906051999 楼主 ↶ @Denial3938
#152

就看你能不能正常下种了,反正我这边下种没问题,做种就基本没啥速度

TOPIC OWNER
Li66Disccoo69
Li66Disccoo69
#153

有一台国内的vps,可以拿来做tailscale中继吗

:heart:1