简介
一、Tailscale 到底是什么?
你可以把它理解成一个**“为你所有设备打造的、私人的、加密的虚拟局域网”**。
- 传统的VPN:像是在你家(局域网)和公司(另一个局域网)之间挖了一条秘密隧道。
- Tailscale:更像是给你的每一台设备(NAS、电脑、手机、平板)都穿上了一件“隐身衣”,并给它们一个秘密的联络暗号。无论这些设备身处世界何地,只要它们都穿着这件“隐身衣”(安装了 Tailscale 客户端并用同一账号登录),它们就能互相看见、互相通信,仿佛就在同一个房间里。
这个“虚拟局域网”是建立在互联网之上的,但它又是完全隔离和加密的,外界无法窥探。
二、它如何解决你的 NAS 外链问题?
Tailscale 通过以下几个核心功能来解决你的问题:
- 稳定的虚拟 IP 地址:一旦你的 NAS 加入了 Tailscale 网络,它会被分配一个
100.x.x.x
开头的、独一无二且固定的 IP 地址。你再也不用关心家里宽带的公网 IP 是不是变了。 - 零配置穿透 (Zero-config NAT traversal):你不需要在路由器上做任何端口转发。Tailscale 会自动想办法在你的设备之间“打洞”,建立点对点(P2P)的加密连接。这意味着数据传输速度很快,因为大部分时间数据是直连的,不经过第三方服务器中转。
- 极高的安全性:它基于目前最先进的 VPN 协议 WireGuard® 构建,所有通信都是端到端加密的。因为你没有在路由器上开放任何端口,所以你的 NAS 不会暴露在公网上,大大降低了被黑客扫描和攻击的风险。
- 设备间的无缝访问:只要你的电脑或手机也安装并登录了 Tailscale,你就可以在任何地方,直接通过 NAS 的那个
100.x.x.x
虚拟 IP 来访问它的管理页面、File Station 等所有服务,体验和在家里一模一样。
部署
部署方式一:使用 docker run
命令(单次部署)
这是最直接的方式,适合快速启动。
步骤 1:准备持久化目录
为了让 Tailscale 的状态(主要是它的身份密钥)在容器重启后不丢失,我们需要在主机上创建一个目录来持久化存储它。
1 | # 通过 SSH 登录到你的 NAS 或服务器 |
步骤 2:运行 Docker 容器
复制并执行以下命令。这条命令已经包含了运行 Tailscale 所需的所有关键配置。
1 | docker run -d \ |
命令参数详解:
docker run -d
: 在后台(detached mode)运行容器。--name=tailscaled
: 给容器起一个好记的名字,方便管理。-v /path/to/your/appdata/tailscale:/var/lib/tailscale
: 【核心】 将主机上的目录挂载到容器内,用于保存 Tailscale 的状态。务必替换为你自己的路径。-v /dev/net/tun:/dev/net/tun
: 将主机的 TUN 设备挂载到容器内,这是 Tailscale 创建虚拟网卡所必需的。--network=host
: 【核心】 让容器直接使用主机的网络,这是最简单且功能最全的模式。容器可以轻松访问主机的所有端口,也方便将主机作为子网路由(Subnet Router)。--cap-add=NET_ADMIN --cap-add=NET_RAW
: 授予容器操作网络接口所需的 Linux Capabilities 权限。--restart unless-stopped
: 设置容器的重启策略,除非手动停止,否则 Docker 重启时会自动启动该容器。tailscale/tailscale
: 指定要使用的官方 Docker 镜像。
步骤 3:将 NAS 加入你的 Tailscale 网络
容器已经在运行了,但它还不知道自己是谁。我们需要执行一条命令来让它登录。
-
执行以下命令,启动 Tailscale 并获取登录链接:
1
docker exec tailscaled tailscale up
-
命令执行后,终端会输出一个登录 URL,看起来像这样:
1
2
3To authenticate, visit:
https://login.tailscale.com/a/123456789ABC -
复制这个 URL,在你的电脑浏览器中打开,用你的 Tailscale 账户登录并授权这台新设备。
-
授权成功后,回到你的 Tailscale Admin Console 后台,你就能看到这台新设备已经加入了你的网络。
至此,你的 NAS 已经成功通过 Docker 加入了 Tailscale 网络! 你可以在任何其他已登录 Tailscale 的设备上,通过分配的 100.x.x.x
IP 地址来访问你的 NAS。
部署方式二:使用 docker-compose
(推荐,便于管理)
如果你需要管理多个容器,或者希望将配置以文件形式保存下来,docker-compose
是更好的选择。
步骤 1:创建 docker-compose.yml
文件
在你喜欢的位置(例如 /volume1/docker/tailscale
)创建一个名为 docker-compose.yml
的文件,并将以下内容粘贴进去:
1 | version: "3.7" |
注意:
hostname
: 你可以自定义一个名字,这样在 Tailscale 后台一眼就能认出是哪台设备。volumes
:- ./data:/var/lib/tailscale
这种相对路径的写法表示将状态文件保存在docker-compose.yml
文件同级的data
文件夹内,非常方便。
步骤 2:启动服务
在 docker-compose.yml
文件所在的目录中,执行以下命令:
1 | docker-compose up -d |
步骤 3:登录和授权
这一步和 docker run
方式完全一样:
1 | docker-compose exec tailscaled tailscale up |
然后复制输出的 URL 到浏览器完成授权。
高级功能:如何生成外链和访问内网?
部署成功后,你可以利用 Tailscale 的高级功能来实现最初的目标。
1. 将 NAS 作为子网路由 (Subnet Router)
场景:你想通过手机(已连接 Tailscale)访问你家里的其他设备,比如打印机 (192.168.1.100
)。
-
修改启动命令,使其“宣告”它可以路由的内网网段。在执行
tailscale up
时加入--advertise-routes
参数。- 你需要先
down
再up
:1
2
3
4docker exec tailscaled tailscale down
docker exec tailscaled tailscale up --advertise-routes=192.168.1.0/24
# !!! 将 192.168.1.0/24 替换为你自己的局域网网段 !!!
docker exec tailscaled tailscale up --advertise-routes=192.168.10.0/24 -accept-dns=false
- 你需要先
-
在 Tailscale Admin Console 后台,找到你的 NAS 设备,点击右侧的 “…”,选择 “Edit route settings…”。
-
勾选并启用你刚刚宣告的子网路由。
现在,你任何连接了 Tailscale 的设备,都可以直接访问 192.168.1.x
网段的所有设备了,就像在家一样。
2. 使用 Tailscale Funnel 生成外链
场景:你想临时分享 NAS 上的一个文件给没有安装 Tailscale 的朋友。
-
确保你的 Docker 容器已经通过
tailscale up
成功连接。 -
假设你想分享的服务在主机的
8080
端口上(比如一个临时的文件服务器)。- 由于我们使用了
--network=host
,容器可以直接访问到主机的8080
端口。
- 由于我们使用了
-
执行 Funnel 命令:
1
docker exec tailscaled tailscale funnel 8080
-
命令会输出一个公网可访问的 HTTPS 链接,形如
https://your-nas-hostname.ts.net
。将这个链接发给你的朋友即可。 -
分享完毕后,按
Ctrl+C
停止 Funnel,外链即刻失效,非常安全。如果想在后台运行,可以加上--bg
参数。
总结:如何使用部署后的服务
你的需求 | 使用的功能 | 具体操作 |
---|---|---|
在外面用 | Tailscale 核心连接 + MagicDNS | 在你的电脑/手机上安装并登录 Tailscale,然后像在家里一样,用 http://设备名:端口 的方式访问 NAS 的各项服务。 |
映射为电脑硬盘 | SMB/AFP over Tailscale | 在电脑的“映射网络驱动器”或“连接服务器”功能中,使用 \\设备名 或 smb://设备名 作为地址。 |
分享文件给别人 | Tailscale Funnel | 在 NAS 上用 Python 或其他方式启动一个临时 Web 服务器,然后用 tailscale funnel <端口号> 命令生成一个临时的公网下载链接。 |
访问家里其他设备 | 子网路由 (Subnet Router) | 在部署 Tailscale 时宣告内网网段,并在管理后台启用。之后就能直接通过内网 IP 访问家里所有设备。 |