Tailscale 跨平台组网全指北
- 虽然不需要公网ip但是可能需要一点点魔法上网
- 需要魔法环境
- 需要具有一点点的命令行基础
- 至少具有Google/微软outlook邮箱/Github/apple 账号*1
- The most significant thing is patience(放的什么洋P)
聊聊为什么是tailscale
我用tailscale已经一年多了,之前用的derp节点是有个博客扫描了一圈公网发出来的,猜测是用derp端口会返回构建成功的内容做特征,扫出来十几个能用的derp节点(很不道德),测试了几个防偷的节点,发现有几个不防偷,悄悄地改到自己的acl里开始用
magicdns:每个设备之间都可以用magicdns解析对方的ip,比如在我的电脑上我要访问nas,我不管怎么切换网络(热点、公司网、里网,纯v4、纯v6、双栈线路),只要连上之后在浏览器输入nas-fn:5666永远都是飞牛webui主页,这样就不用处理ip变化的问题。
exitnode: 这个安卓机器上是不能同时存在两个vpn软件,会冲突,这就导致我在访问国际互联网的时候没法同时用tailscale访问nas机器,当然可以用工作空间划分出来实现伪双开,但不够优雅,我的解决方案是把nas设置为exitnode,此时tailscale接管机器上的所有流量,访问国际互联网的流量先传回里,在从里机器的软路由上分流出去,最后走里返回来。这样就能同时访问国际互联网和内网资源了。
Subnet router: 那有些设备比如打印机,3D打印机、路由器这类产品,本身可以通过局域网访问,然而在外的时候没法用内网IP访问,这时候把这些设备设置为subnet router,子网路由,允许nas访问无法安装tailscale的设备。比如里的打印机是192.168.1.100,那么nas上设置subnet router,就能在公司的时候访问192.168.1.100也可以直接打印
几句话总结一下
- 同一个账号/登录方式下的所有设备默认互联
- 打洞要靠derp,官方默认的derp都在国外打洞成功率不高
- 先试试,能连上就别管了直接用,打洞慢再去看我改的免备案IPderp
使用教程
注册一个Tailscale账号
- 进入之后点击左上角开始注册

- Tailscale使用SSO登录,使用图中的这些方式登录。选择最常用的登录就可以了,登录后将看到如图的界面,任意选择几个选项,点底下的add next devices


添加NAS为第一个设备
来来来,这里说个坑哈:这个自动安装脚本一行搞定,但其原理其实是执行了这两个程序:第一个是 curl 下载,通过 |(管道)将获取到的脚本内容不落地保存在本地,而是直接传递给后面的 sh 解释器去运行。
那坑在哪儿呢?假如会自己开代理,比如 v2rayN 默认会给局域网开一个允许接入的 HTTP 端口(默认 10810),又恰好 NAS 和电脑在一个局域网里。会很轻易地想到:“欸,curl 有个 -x 参数可以指定代理,那简单啊,直接在 curl 后面加上 -x 电脑局域网IP:10810 不就能让安装快一点儿了”
结果会发现:脚本确实一瞬间下载好了,但在执行安装那一步时依然死死卡住,然后这玩意就不动了
因为加的 -x 参数,只对第一步的 curl 也就是“下载脚本文件本体”生效。而这个脚本本质上是一串很长的指令集,内部还需要调用系统底层包管理器(比如 apt 或者 dnf)去外网拉取好几十兆真正的 Tailscale 安装包。此时由于内部进程并不知道刚才附带了代理,
正确做法:给的 SSH 会话设置全局的临时代理环境变量后再执行。
只需把IP换成本机的真实局域网IP(如果是 clash/v2rayN 去设置里勾选允许局域网连接),像这样写:
export https_proxy=http://192.168.x.x:10810 http_proxy=http://192.168.x.x:10810
curl -fsSL https://tailscale.com/install.sh | sh
- 使用SSH工具连接到NAS主机 有各种不同的方式可以连接到 NAS 主机,如果不知道怎么连接,查看这里学习如何通过SSH连接
curl -fsSL https://tailscale.com/install.sh | sh
-
按ctrl+shift+v粘贴上方指令到终端中,看到下图红框中的"installation compolete"就安装好了,可能会很慢,具体看网络情况,如果有代理就按上面的走
-
接下来是登录Tailscale,使用这条命令
shell sudo tailscale up && sudo tailscale login
-
终端中会给出一个链接
-
复制链接到浏览器,点击sign in 将NAS设备连接到Tailscale网络中
-
此时在后台就已经可以看到的NAS主机了
Windows客户端配置
-
添加windows客户端,点击这里下载,正常安装好之后在任务栏找到tailscale的图标
-
点击Log in正常登录
-
接下来会自动跳转到控制台界面,这里就能看到Tailscale网络中的设备了,用浏览器访问对应主机名加NAS访问端口即可在公网环境下P2P穿回NAS主机。
比如说主机名是nas,NAS访问端口是5666,那么访问链接是nas:5666。

主机名在左侧的MACHINE下即可看到
安卓客户端配置
📱 Tailscale 安卓客户端
点击下载最新版本 Tailscale Android 应用程序(v1.80.0)
下载完成后,在安卓设备上安装Tailscale应用程序。
点击Login登录,会自动跳转到系统默认的浏览器进行登录连接操作。
这里需要使用之前创建的Tailscale账号登录一下
然后点击这的Connect
当看到这个下方界面的时候就连接成功了,此时可以关掉浏览器回到Tailscale的安卓端
这里点击左上角vpn开关之后就可以看到分配给NAS的虚拟局域网地址,记住这个地址

退出当前的登录方式,用分配到的虚拟内网地址重新登录
点击登录ip右侧的图标可快捷切换连接方式(公网/局域网/vpn/fnid)

使用tailscale接管互联
tailscale做了这样一件事,他为每个设备分配了一个100.x.x.x的ip,这是一个CGNAT保留网址,用户访问设备的时候,只需要访问这个ip即可,因为实际上可以写一个stun打洞的软件让多个设备通过isp的公网IP映射过来的端口互联,然而现实的网络条件是复杂多变的,在里可以走局域网,在公司需要走stun,旅行的时候又需要蜂窝网络,高效稳定不变的连接是一种奢侈品,tailscale向上提供一个固定IP,背后帮用户通过derp找到设备实现互联
MagicDNS设置
https://login.tailscale.com/admin/machines打开tailscaleweb管理页面,对每个设备的如下信息进行自定义:
| 参数 | 说明 |
|---|---|
machine name | magicdns映射使用 |
machine ipv4 | 虚拟内网IP |
key expiry | 密钥有效期 |
route setting | 路由设置 |

修改机器名称
首先关闭自动从hostname生成,删掉之后改一个短点的比如server或者nas,别写中文我求们了🤣,写完了记得点update name,打开浏览器,飞牛的话直接输改好的机器名称:5666,比如我改成了nas-fn,那么就是nas-fn:5666,这样就可以访问飞牛了。

开启 Subnet Router 子网路由
Subnet Router 子网路由 的作用是让的 Tailscale 设备能够直接访问那些无法安装 Tailscale 客户端的局域网内部设备。
比如:里的老式打印机、旁路由、光猫后台,或者因为系统限制没法装软件的智能居控制端。只要的 NAS(已安装 Tailscale)开启了子网路由功能,在外地就能直接输入里的局域网 IP(比如 192.168.1.100)访问到这些设备。
1. 开启主机的 IP 转发
因为 NAS 需要把 Tailscale 虚拟网络里的流量转发给里的真实局域网里,首先需要在 系统里开启 IP 转发功能。
打开 NAS 的 SSH 终端,逐行执行以下命令(飞牛系统或其他普通 Linux 机器均通用):
# 开启 IPv4 与 IPv6 转发
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
# 重新加载 sysctl 让配置立即生效
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
2. 宣告局域网网段
接下来,需要让 NAS 告诉 Tailscale 网络:“我可以作为去往某个网段的路由中转站”。
需要知道真正的局域网网段是什么(假设是 192.168.1.0/24,也就是里设备的 IP 都在 192.168.1.X 这个范围)。在终端执行以下命令重新启动 tailscale 进程:
sudo tailscale up --advertise-routes=192.168.1.0/24
(把 192.168.1.0/24 对应换成自己实际分配的局域网网段)
3. 去 控制台 批准路由
出于安全考虑,发布的路由默认是未激活的,别人或者自己的其他设备还用不了。最后一步需要去网页端控制台手动批准:

- 打开并登录 Tailscale 管理后台 Machines 页面
- 在列表里找到的 NAS 设备,点击它左下方的
Edit route settings点击设备最右侧的三个点...然后选择Edit route settings
- 在弹出的窗口中,找到 "Subnet routes" 这一栏,会看到刚才发布的网段(如
192.168.1.0/24)在那里待同意,将它前面的开关。
设置 Exit Node
Exit Node 能够让把远端设备的所有网络流量,强制代理到里的 NAS 设备上发出。
- 伪装 IP 与突破地域限制:比如在校外出差,连接上了作为 Exit Node 的 NAS 后,手机的对外公网 IP 就变成了校里的宽带 IP,欸这就能(比划)用IP定位的论文网站比如知网什么的(这东西还是别拿来当梯子用了)
- 安全上网:在外连接没有密码的免费公共 Wi-Fi 时,打开 Exit Node 就可以加密的所有流量,防止被人抓包窃取信息。可以把里的宽带作为最安全的堡垒机。
注:如果刚才已经开启了子网路由,那么系统底层的 IP转发功能 已经开好了,可以跳过第1步。
1. 开启 IP 转发
与 Subnet Router 的第一步一样,打开 NAS 的终端执行:
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
2. 在 NAS 宣告作为出口节点
在的 NAS 终端执行以下命令,告诉 Tailscale 可以把这台机器作为全局流量出口:
sudo tailscale up --advertise-exit-node
如果想同时宣告Subnet Router 并作为Exit Node,两个参数可以合并在一起执行,例如 sudo tailscale up --advertise-routes=192.168.1.0/24 --advertise-exit-node
3. 去控制台批准出口节点权限
和上面相似,出于安全限制,还需要去网页控制台手动放行:
- 登录 Tailscale 管理后台 Machines 页面
- 找到的 NAS,点击
Edit route settings - 在弹出的菜单中,找到 "Exit node" 相关的选项,勾选或打开 "Use as exit node"。
4. 在客户端上启用 Exit Node
现在 NAS 已经可以准备接管流量了。接下来就是在手机或电脑上按需切换:
- Windows 客户端:右键点击右下角的 Tailscale 托盘图标 -> 找到
Exit Node菜单项 -> 在展开的列表里勾选里的 NAS 名字。勾选后的电脑瞬间变回“用宽带体验”。想要关掉的话,在此处重新勾选None即可。 - 安卓/iOS 客户端:打开 App -> 在设备列表的右上部分或左上角菜单里找到
Use exit node...-> 选择里的 NAS -> 瞬间漫游回。不需要时再点进去选回None。