Skip to main content
我们经常发布文档更新,此页面的翻译可能仍在进行中。 有关最新信息,请访问英语文档

此版本的 GitHub Enterprise 已停止服务 2023-03-15. 即使针对重大安全问题,也不会发布补丁。 为了获得更好的性能、更高的安全性和新功能,请升级到最新版本的 GitHub Enterprise。 如需升级帮助,请联系 GitHub Enterprise 支持

连接到专用网络

可以将 GitHub 托管的运行器连接到专用网络上的资源,包括包注册表、机密管理器和其他本地服务。

注意:GitHub Enterprise Server 目前不支持 GitHub 托管的运行器。 可以在 GitHub public roadmap 上查看有关未来支持计划的更多信息。

关于 GitHub 托管的运行器网络

默认情况下,GitHub 托管的运行器有权访问公共 Internet。 但是,你可能还希望这些运行器访问专用网络上的资源,例如包注册表、机密管理器或其他本地服务。

GitHub 托管的运行器在所有 GitHub 客户之间共享,因此,你需要一种方法,在运行器运行你的工作流时,将你的专用网络仅连接到它们。 可以采用几种不同的方法来配置此访问,每个方法都有不同的优缺点。

使用 WireGuard 创建网络覆盖

如果不想为 API 网关维护单独的基础结构,可以通过在专用网络的运行器和服务中运行 WireGuard,在这两者之间创建覆盖网络。

此方法有许多缺点:

  • 若要访问在专用服务上运行的 WireGuard,需要工作流可以引用的已知 IP 地址和端口:可以是公共 IP 地址和端口、网络网关上的端口映射,或者动态更新 DNS 的服务。
  • WireGuard 无法即时处理 NAT 遍历,因此需要确定一种提供此服务的方法。
  • 此连接是一对一的,因此如果需要高可用性或高吞吐量,则需要在 WireGuard 之上构建它。
  • 需要为运行器和专用服务生成并安全地存储密钥。 WireGuard 使用 UDP,因此网络必须支持 UDP 流量。

也有一些优点,由于可以在现有服务器上运行 WireGuard,因此不必维护单独的基础结构,并且它在 GitHub 托管的运行器上得到了很好的支持。

示例:配置 WireGuard

此示例工作流将 WireGuard 配置为连接到专用服务。

对于此示例,在专用网络中运行的 WireGuard 实例具有以下配置:

  • 192.168.1.1 的覆盖网络 IP 地址
  • 1.2.3.4:56789 的公共 IP 地址和端口
  • 公钥 examplepubkey1234...

GitHub Actions 运行器中的 WireGuard 实例具有以下配置:

  • 192.168.1.2 的覆盖网络 IP 地址
  • 私钥存储为 WIREGUARD_PRIVATE_KEY 下的 GitHub Actions 机密
name: WireGuard example

on:
  workflow_dispatch:

jobs:
  wireguard_example:
    runs-on: ubuntu-latest
    steps:
      - run: sudo apt install wireguard

      - run: echo "$" > privatekey

      - run: sudo ip link add dev wg0 type wireguard

      - run: sudo ip address add dev wg0 192.168.1.2 peer 192.168.1.1

      - run: sudo wg set wg0 listen-port 48123 private-key privatekey peer examplepubkey1234... allowed-ips 0.0.0.0/0 endpoint 1.2.3.4:56789

      - run: sudo ip link set up dev wg0

      - run: curl -vvv http://192.168.1.1

有关详细信息,请参阅 WireGuard 的快速入门,以及有关如何安全存储密钥的“加密机密”。

使用 Tailscale 创建网络覆盖

Tailscale 是基于 WireGuard 构建的商业产品。 此选项与 WireGuard 非常相似,不同之处在于 Tailscale 更多的是完整的产品体验,而不是开源组件。

它的缺点与 WireGuard 类似:连接是一对一的,因此可能需要执行额外的操作以实现高可用性或高吞吐量。 你仍然需要生成并安全地存储密钥。 协议仍然是 UDP,因此网络必须支持 UDP 流量。

但是,与 WireGuard 相比,它也有一些优势:NAT 遍历是内置的,因此无需向公共 Internet 公开端口。 这是迄今为止启动和运行最快的选项,因为 Tailscale 提供了一个 GitHub Actions 工作流,只需一步即可连接到覆盖网络。

有关详细信息,请参阅 Tailscale GitHub 操作以及“加密机密”以了解如何安全地存储密钥。