外网访问群晖的新方案Tailscale
WireGuard 是什么?
WireGuard 是由 Jason A. Donenfeld 开发的开源 VPN 程序及协议,基于 Linux 核心实现,利用 Curve25519 进行秘钥交换,ChaCha20 用于加密,Poly1305 用于资料认证,BLAKE2 用于杂凑函数运算,支持 IPv4 和 IPv6 的第3层。
零信任网络是什么?
“零信任”是一个安全术语也是一个安全概念,它将网络防御的边界缩小到单个或更小的资源组,其中心思想是企业不应自动信任内部或外部的任何人/事/物、不应该根据物理或网络位置对系统授予完全可信的权限,应在授权前对任何试图接入企业系统的人/事/物进行验证、对数据资源的访问只有当资源需要的时候才授予。简单来说,“零信任”的策略就是不相信任何人。除非网络明确知道接入者的身份,否则任谁都无法接入到网络。
Tailscale 是什么?
Tailscale 是基于 WireGuard 的网状 VPN 替代产品,可将您的计算机,数据库和服务安全地连接在一起,而无需任何代理。
简介
Tailscale 是一家自称为新型虚拟隐私网络 (VPN) 的初创公司,成立于2019年,是由一群前谷歌软件工程师创立的初创公司,该公司完全是远程办公,其产品 Tailscale 正式推出之际,正值许多公司不得不适应远程办公。
其技术基于谷歌的零信任 BeyondCorp 架构,并使用 WireGuard 协议构建,使用 OAuth2(SSO),OpenID 或 SAML 进行身份验证,并在客户端和服务器之间创建点对点的完全加密连接。
传统的 VPN 技术使用预共享密钥(PSK)对用户进行身份验证。而 Tailscale 的技术不需要硬件或基础设施,对协调服务器的身份验证使用的是已经存在的服务,无论是组织自己的 OAuth2 服务还是 Google Apps 或 Office 365 之类的第三方服务。这种与现有身份提供商的紧密集成意味着不需要维护单独的授权用户列表,而且新员工和新员工团队成员或添加双因素身份验证比传统的 VPN 产品更简单。
目前主要的 Mesh VPN 解决方案:
- Tinc
- Zerotier
- Nebula
- Tailscale
之前我用过 zerotier ,感觉 Tailscale 设置上比 zerotier 更简单一些,免费版和 zerotier 一样,支持 100 台设备。
但是似乎免费版只能用 Google 账号和 Microsoft 账号登录。
客户端
Tailscale 是一个开源项目,客户端基本上覆盖了主流平台
但对于我们来说,最主要的是要在外网访问家里的群晖,所以首先需要解决的是有没有能在群晖上运行的版本。
群晖套件
官方没有相应的版本,所以只能使用第三方的套件 https://github.com/nirev/synology-tailscale
如果在这张报表里找不到您的设备
可以在 https://www.synology.com/zh-cn/knowledgebase/DSM/tutorial/Compatibility_Peripherals/What_kind_of_CPU_does_my_NAS_have 查找对应的 CPU 类型。
比如 DS3617xs
其实也不用这么麻烦,只要搞清楚自己的 CPU 是 x86 还是 arm ,是 32 位还是 64 位就可以了,反正就4个版本,直接下载了 x86 的 64位 的版本。
如果下错了版本,会显示不兼容,比如我安装 32 位的版本
手动安装
再次检查
安装完成后,需要SSH登录到群晖。执行 sudo tailscale up
复制红框内的内容,在浏览器中打开,用你的账号登录
其他nas
可以到这里看看 https://tailscale.com/kb/1074/connect-to-your-nas
MacOS
直接在 APP Store 里搜索 Tailscale
,支持 MacOS 10.13 及之后的系统版本。
运行
允许添加 VPN 配置
Windows
需要说明的是只支持 windows 7 之后的系统版本。
安装虚拟网卡的驱动
如果安装了360,需要同意而不是阻止
点 Log in
跳转到浏览器中登录验证
Android
Android 客户端的下载比较费周折,官方只提供了 Google Play 这里就不细说了。
有一点需要说明,群晖上使用 1.1.335
版本时,我的 Android 手机怎么也连不上,但是群晖升级到 1.1.540
版本后,Android 就能正常访问群晖了。
目前
1.1.540
的版本还是 unstable 的,如果没遇到问题不建议安装这个版本。https://github.com/nirev/synology-tailscale/pull/32
Centos
尝试在 vps 上安装的
- 安装 Yum repository manager
1 | sudo yum install yum-utils |
- 添加 Tailscale 库并安装
1 | sudo yum-config-manager --add-repo https://pkgs.tailscale.com/stable/centos/7/tailscale.repo |
- 使用
systemctl
启用和启动服务
1 | sudo systemctl enable --now tailscaled |
- 验证登录到你的 Tailscale 网络
1 | sudo tailscale up |
复制红框内的内容,在浏览器中打开,用你的账号登录。
进入
admin console
可以看到新加入的设备IP获取您的 Tailscale IP 地址,当然在后台也能看到
1 | ip addr show tailscale0 |
- 为了避免失效总需要验证,建议开启
Disable Key Expiry
对于验证不方便的群晖、Linux 和 Android 手机,我都启用了
Disable Key Expiry
。
测试
所有设备的 IP,可以在 Admin console
中查到
比如在设备列表中的群晖主机
默认情况下,每个设备都会收到 100.xyz 范围内的 IP 地址。该 IP 地址是根据设备和授权凭证自动分配的,无法手动更改。这个是和 zerotier 不一样的。
从外网 ping 群晖在 Tailscale 中的 IP,偶有丢包
有时也会存在连续性的丢包
利用之前安装的测速软件 Speedtest
来测个速度
测速服务器搭建请参考 『自建Speedtest网络测速服务器』
- 输入 frp 映射的域名,测速结果
- 输入后台获取到的 Tailscale 的 IP 地址 + 端口,测速结果
smb 协议映射到群晖的共享目录,然后拷贝
如果这样不够直观的话,用网页下载方式
和 Speedtest
的测试结果非常接近,显然比通过 frp 服务做的内网穿透强多了,虽然腾讯的 vps 也跑满了带宽,但是毕竟只是 1Mb/s 的小水管, 差了 30 倍左右,当然这不是 frp 的问题,是因为做 frps 的 vps 带宽太小了,如果要提升到 3Mb/s ,每年要多花300多,要想达到 30Mb/s,一年估计起码多出1~2万。
当然效果还需要持续观察,毕竟 zerotier 偶尔也是可以打洞成功的,只是 zerotier 大部分时间需要走服务器中转,即便搭建了 moon 服务器也是一样,这也是我一直关注新的替代产品的主要原因。
我个人觉得 Mesh VPN 比 frp、nps 等内网穿透软件更简单,也更安全。因为我是给自己用,又不是对外提供服务,唯一的不便也就是要安装客户端,但节省了公网架设服务器的费用和带宽费用,还是很值得尝试的。
因为群晖的 Tailscale 版本暂时还不支持子网,所以这次我们暂时没有讨论其他不能安装 Tailscale 客户端的设备。
参考文档
Tailscale 主页
地址:https://tailscale.com/Tailscale 代码
地址:https://github.com/tailscalenirev/synology-tailscale: 群晖版代码
地址:https://github.com/nirev/synology-tailscaleHow Tailscale works · Tailscale Blog
地址:https://tailscale.com/blog/how-tailscale-works/Rethinking VPN: Tailscale startup packages Wireguard with network security • The Register
地址:https://www.theregister.com/2020/04/02/rethinking_vpn_tailscale_startup_packages/Digging unconventional and mesh VPNs
地址:https://undisclosed.blog/mesh-vpn/A programmer’s note | Tailscale:不一样的VPN
地址:https://blog.shukebeta.com/2020/05/15/tailscale%EF%BC%9A%E4%B8%8D%E4%B8%80%E6%A0%B7%E7%9A%84vpn/TAILSCALE种子轮融资300万加元 – North America Incubator
地址:https://www.naincubator.com/2304.html