Skip to main content

此版本的 GitHub Enterprise Server 将于以下日期停止服务 2026-08-25. 已停止发布的版本不受支持。 即使针对重大安全问题,也不会发布补丁。 若要获得更好的性能、改进的安全性和 GitHub Enterprise Server 中的新功能,请参阅升级过程的 Overview。 如需升级帮助,请联系 GitHub Enterprise 支持。

使用 WireGuard 创建网络覆盖层

可以在运行器与专用网络中的服务之间创建覆盖网络。

使用 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 地址
  • 私钥作为 GitHub Actions 机密存储在 WIREGUARD_PRIVATE_KEY
name: WireGuard example

on:
  workflow_dispatch:

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

      - run: echo "${{ secrets.WIREGUARD_PRIVATE_KEY }}" > 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 的快速入门”以及“在 GitHub Actions 中使用机密”以了解如何安全地存储密钥。

使用 Tailscale 创建一个网络覆盖层

Tailscale 是基于 WireGuard 构建的商业产品。 此选项与 WireGuard 非常相似,但 Tailscale 提供的是一个更完整的产品体验,而不是一个开源组件。

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

但是,与 WireGuard 相比,它也有一些优势:NAT 遍历是内置的,因此无需向公共 Internet 公开端口。 在这些选项中,这无疑是最快完成部署并投入使用的一种,因为 Tailscale 提供了一个只需一步即可连接到覆盖网络的 GitHub Actions 工作流。

有关详细信息,请参阅 Tailscale GitHub Action,以及 在 GitHub Actions 中使用机密,了解如何安全地存储密钥。