与 2014 年从事基础设施工程的大多数人一样,我非常喜欢 Google 的BeyondCorp 白皮书。我最重要的个人兴趣是基于这样一个事实,即 Uber 的同期安全实施不包括 VPN,因此看到一个关于在不过度依赖员工设备强化网络的情况下促进安全的深思熟虑的描述是很有趣的。我还有第二个长期的个人兴趣,那就是再也不必与同事争论为什么他们需要在访问安全资源之前登录 VPN。
出于这两个原因,我一直很感兴趣地关注Tailscale ,并留出一些时间来设置个人 Tailscale 环境,包括设置他们的 Golink 工具来感受它。这些是我从那次经历中得到的笔记。
最初设定
我在定价页面上点击“使用 Tailscale”按钮后注册,使用免费的个人计划。那时,我必须选择一个身份提供商,我选择了谷歌。
接下来,我被要求为我的计算机下载 OS X 客户端,这将我带到 App Store 来处理安装,这是快速和直观的。然后我在手机上打开了注册邮件,它链接了一个移动客户端的下载页面,我也能够快速安装它。
设置手机后,网站会自动刷新以显示第二台设备,并提示我发送 ping。
非常令人兴奋,这确实有效!这是一次真正令人愉快的设置体验。几分钟之内,我已经能够私下连接两台设备,几乎不需要任何设置。
通过 VPN 公开本地端口
现在我已经有了基本的运行,我想测试通过 VPN 连接到我的博客的本地实例。首先,快速确认这不起作用。
curl 100.80.28.56:1313 curl: (7) Failed to connect to 100.80.28.56 port 1313 after 3 ms: Connection refused
好的,这是有道理的,因为博客绑定到本地主机而不是外部可访问的以太网接口。让我们尝试改变它,从
hugo -D serve
改为跑步
hugo -D --bind 0.0.0.0 serve Web Server is available at http://localhost:1313/ (bind address 0.0.0.0)
现在我将再次尝试卷曲:
curl 100.80.28.56:1313 | head -n2 <!DOCTYPE html> <html lang="en-us">
它有效!我们还要验证我们可以从我的手机访问它,这可能是更有趣的测试:它也有效!虽然 Hugo 本身的所有链接都不起作用,因为它们使用本地主机的绝对 URL,但这是一个 Hugo 问题(我想是一两分钟的谷歌搜索来解决),而不是 Tailscale 问题。很简约!
我可以获得更友好的 DNS 吗?
输入100.80.28.56
有点烦人,所以我很好奇我是否可以获得更友好的 DNS 名称。事实证明这已经奏效了,例如some-macbook-pro:1313
已经通过我的笔记本电脑访问了我的博客(尽管我尝试了几次才让移动 Safari 相信它不是搜索查询)。 (我认为这是“ MagicDNS ”功能?)
链接
好的,所以在这一点上,我的基础知识工作得很好,下一个任务是设置他们的私有go 链接服务。我遵循了 tailscale/golink 存储库中的说明。
首先,我克隆了他们的 github 存储库(顺便说一句,快速插入让1Password 运行你的 ssh-agent的乐趣,特别是如果你的键盘支持 Touch ID):
git clone [email protected]:tailscale/golink.git
然后我在本地构建它以验证它是否有效:
go run ./cmd/golink -dev-listen :8080
失败是因为我忘记实际cd
进入golink
目录。然后我从正确的位置重新运行它,它起作用了。
为了尝试一下,我在write
和 Google 文档之间创建了一个链接,我在其中保留了一个我想写的主题列表,然后通过转到localhost:8080/write
验证它是否有效,这按预期重定向了我。
下一步是让这个东西也暴露在我的手机上,首先创建一个授权密钥。
好的,在创建密钥之前,我需要创建一个ACL 标签,在随机点击了一下之后,我不确定该怎么做,所以我想我必须阅读支持文章。哦不,我必须手动编辑我的策略才能完成此操作,这有点令人担忧。
嗯,这似乎奏效了!所以现在回到创建授权密钥。添加新的tag:golink
标签很简单。我不太明白的唯一一件事是如何按照说我应该消除密钥过期的说明进行操作(UI 强制执行 1 到 90 设置),但没关系,只需通过那个即可。
现在我有了我的密钥,我使用重新启动服务
TS_AUTHKEY="tskey-auth-<key>" go run ./cmd/golink -sqlitedb golink.db
服务器干净地启动,然后最后的测试是在我的浏览器中转到go/
并查看它是否有效。
它确实有效,可以通过我的笔记本电脑和手机访问。任务完成!
作为旁注,当我返回“ Machines
”选项卡时,似乎确实禁用了此服务的密钥过期,但我不知道为什么它被禁用,可能是因为我添加了一个标签?
![禁用标签和密钥过期的 Tailscale 机器列表中机器的屏幕截图]((/static/blog/2023/tailscale-expiry.png)
无论如何都不是一个交易破坏者,我相信我可以深入挖掘一下来弄清楚,但它确实是我经历过非成功者的两个地方之一。
什么令人困惑?
我发现的所有令人困惑的问题都很小,并且反映了我是一个全新的用户。此外,我能够在不寻求帮助的情况下快速解决它们,这突出表明 Tailscale 总体上组合得非常好。尽管如此,为了完整起见,我将列出它们:
- 为什么在我的 golinks 服务上禁用过期?是因为我添加了标签吗?如果是这样,为什么过期 UI 仍然显示为已启用,如果那里的值被忽略了?
- 当我想向我的新授权密钥添加标签时,它并没有将我引向可以创建标签的资源。确实,它确实将我引向了关于该主题的知识库文章,这没关系,但我很乐意被引向政策编辑
- 我发现授权密钥发布 UI 的放置有点违反直觉(设置、个人设置、密钥)。我期待从
Access Controls
选项卡到颁发密钥的链接。
什么是好的?
总的来说,我认为 Tailscale 是一种令人愉快的体验。它安装快速,用户界面直观,正确的文档几乎总是单击一下即可。最重要的是,与让大多数公司 VPN 设置和运行相比,我自己开始工作更容易,同时与我现有的 SSO 提供商很好地合作。
总的来说,如果我要为自己或小型企业设置个人 VPN,我无法想象使用 Tailscale以外的东西,它简直太棒了。同样,如果我在 2023 年构建新的开发人员或基础设施产品,这是值得借鉴的入门(和整体)体验。 (我怀疑一旦你开始管理一个真正的政策文件,它就会变得更有趣,但我会把它留到改天!)
到目前为止,Tailscale 似乎在通过与现有用户一起成长来扩大市场份额方面做得非常出色,但我希望看到更多来自 Tailscale 的推动,即公司如何使用 Tailscale 来简化其安全性和合规性控制(SOC2 、HITRUST 等)。找出一个明确的价值主张来改进其中一个维度是他们提高企业采用率的最可能途径,我认为这对他们的长期增长很重要。 (你当然可以争辩说价格是他们可以与现有供应商竞争的另一种方式,但是呃,我认为你不想在 VPN 市场上进行价格竞争。)