Skip to content

利用 Tailscale 将 GitHub Actions 工作流接入虚拟局域网 ​

前言 ​

前段时间整理了一下博客,把不太适合公开的笔记之类的独立出去,打算单独部署到本地方便自己看,这就有一个问题——怎么让 GitHub Actions 构建完上传到我本地的 PVE 中?

无论是自建 Runner 还是把本地的 SSH 端口暴露出去(没有公网 IP)都挺麻烦的,突发奇想能不能给 GitHub Actions 也组个虚拟局域网,搜了一下还真可以,Tailscale 官方就有提供 Tailscale GitHub Action,可以在工作流运行时创建一个临时节点来访问 Tailscale 的网络,最后工作流完成就会把临时节点自动移除,仿佛什么都没发生过。

准备工作 ​

开始之前,我们需要了解一下 Tailscale 的访问控制规则,以前是 ACLs,现在新的叫 grants。

默认情况下,加入到 Tailscale 的节点都归属于你的账号,所有节点都可以互相访问。但是 Tailscale GitHub Action 创建的临时节点必须要添加标签,节点一旦添加了标签,就不再归属账号,也就无法和其他节点互相访问。

随着虚拟局域网中的设备越来越多、越来越杂,为了让整个网络更加的安全,最好是全部添加上标签,再配置合理的访问规则。

创建标签 ​

在上面的导航栏中找到 “Access controls”,然后再点击左侧的 “Tags”,就能看到所有的标签。

标签
标签

点击右上角的 “Create tag” 来创建标签,我是比较简单的分成了 3 个标签,tag:home tag:vps tag:ci 分别对应的就是家庭设备、服务器和 GitHub Actions,标签的拥有者选自己账号。

创建标签
创建标签

最后返回节点列表,给每个节点选择对应的标签就好了。

警告

添加了标签之后,节点就不再归属你的账号了,也无法移除所有标签。

如果想要恢复成原来那样,必须在节点上重新验证加入 Tailscale。

选择标签
选择标签

配置 grants ​

所有的节点都添加上标签后,你可能发现节点间不能访问了,这是正常现象,我们只需要配置一下访问控制权限,现在的 grants 比较友好,可以直接可视化操作。下面是我的三条配置:

  1. 家庭设备可以访问所有设备
  2. 所有 VPS 之间可以互相访问
  3. VPS 与 GitHub Actions 可以访问 100.64.0.1 这一台设备的所有端口
访问控制
访问控制

对于 Tailscale GitHub Action 而言,其实只需要添加以下这一条规则,让标签为 ci 的可以访问 100.64.0.1 的 22 端口,就可以实现 SCP 上传构建好的文件了。

添加规则
添加规则

信任凭证 ​

Tailscale GitHub Action 肯定不能像其他设备一样手动打开 login.tailscale.com 授权登录,我们需要创建一个信任凭证,给予 auth_keys 权限,这样临时节点就可以通过 Auth keys 的方式加入进来了。

找到上方的 “Settings”,点击左侧的 “Trust credentials”

信任凭证
信任凭证

然后点击 “Credential”,选择 OAuth

OAuth
OAuth

这里只需要给 Auth Keys 的权限,标签选择 tag:ci

Auth Keys
Auth Keys

最后把 client_id 和 secret 都记录下来备用。

添加工作流 ​

使用的时候,只需要在工作流中加上 tailscale/github-action@v4,就能直接使用 Tailscale 分配的 IP 来访问设备了。

yaml
jobs:
    steps:
      - name: Tailscale
        uses: tailscale/github-action@v4
        with:
          oauth-client-id: ${{ secrets.TS_OAUTH_CLIENT_ID }}
          oauth-secret: ${{ secrets.TS_OAUTH_SECRET }}
          tags: tag:ci
          ping: ${{ secrets.HOST }}

其中的 TS_OAUTH_CLIENT_ID 与 TS_OAUTH_SECRET 通过 Actions secrets 的方式添加进来

添加密钥
添加密钥

效果演示 ​

查看构建日志,能看到 Tailscale is running and connected 就证明已经成功将 GitHub Actions 接入到 Tailscale 的虚拟局域网了!

提示

只有工作流运行期间可以在 Tailscale 的面板上看到这个临时节点,结束后会自动移除。

效果演示
效果演示

Last updated:

Evoxt:Evoxt:
最便宜的亚太优化线路 —— 马来西亚 电信 GIA / 联通 9929 仅需 $3.32 起!
95 折优惠码AFF2377-DEV
🎉银河录像局:
Netflix / Spotify/ ChatGPT / Claude 等 AI 流媒体一站式合租平台!
95 折优惠码zhichao
关注微信公众号
优化线路
Evoxt

Evoxt

最便宜的亚太优化线路

马来西亚 电信 GIA / 联通 9929
优惠码:AFF2377-DEV

1C / 512MB / 5GB SSD / 150GB 流量

$3.32/月
优化线路
搬瓦工

搬瓦工

15 个机房自由切换

洛杉矶 DC6 机房
电信 / 联通 GIA + 移动 CMIN2

2C / 2GB / 40GB SSD / 1TB 流量

$49.99/季