Tailscale实现外网访问

本文最后更新于:2023年10月3日

为了在校外访问 nas 和上面部署的服务如 jellyfin,笔者被安利了Tailscale。

Tailscale 是一种基于 WireGuard 的虚拟组网工具,更易用,有全平台客户端。免费版支持最多20个设备,对于普通用户来说绰绰有余。

如果你更喜欢开源软件,那你可以尝试 Headscale。

安装和初步使用很简单,此处不再赘述。

下面主要讲一下遇到的问题。

由于每个人的网络不尽相同,请勿照搬下文的配置

Jellyfin

首先可能无法访问 jellyfin,在 Tailscale 论坛搜到的解决办法是在 jellyfin的网络配置中LAN网络加上100.64.0.0/10,可能是因为 jellyfin 默认不监听 Tailscale 使用的 ip。

子网路由

虽然说解决了外网访问的问题,但是很不优雅:每次访问需要将校内使用的 ip 切换成 Tailscale 分配的 ip。

Tailscale提供了子网路由功能,更常见的使用场景是:需要访问某个局域网中的多个设备,但是将他们都加入组网太过麻烦并且不便于管理。

只需要在局域网内找到一个合适的设备(比如24小时开机),将其配置为Subnet Router。

1
tailscale up --advertise-routes [ip]/32 --reset

执行完上面的命令后还需要去网页端的管理界面手动打开路由选项。

因为笔者没有其他的设备需要访问,所以直接使用[ip]/32

一个很自然的问题是,如果我还有另一个局域网,里面的若干个设备也想直接访问该局域网,应该如何配置呢?

1
2
tailscale up --accept-routes=true --advertise-routes=192.168.1.0/24
tailscale up --accept-routes=true --advertise-routes=192.168.2.0/24

遗憾的是群晖上的 Tailscale 并不支持 accept-routes参数,所以上面的命令我并没有尝试(当然我也没这个需求),具体群晖上还有哪些限制请参考官方文档

exit-node

出于某些原因,我们可能希望流量可以选择其他的节点作为出口,比如在校外使用校园网访问一些网站。

Tailscale可以将网络中的任意节点作为出口(IOS 设备除外)。

1
tailscale up --advertise-exit-node

同样,去网页端的管理界面手动打开该选项,此时其他节点上的客户端可以选择use exit node

再也不用使用 EasyConnect这种软件了(EasierConnect也很好用)。