跳至主要内容

使用 WireGuard 创建网络覆盖

您可以在您的运行器和私有网络中的服务之间创建覆盖网络。

使用 WireGuard 创建网络覆盖

如果您不想维护单独的 API 网关基础设施,可以通过在两个地方运行 WireGuard,在您的运行器和私有网络中的服务之间创建覆盖网络。

这种方法有各种缺点

  • 要访问运行在您的私有服务上的 WireGuard,您将需要一个您的工作流可以引用的知名 IP 地址和端口:这可以是公共 IP 地址和端口,网络网关上的端口映射,或者动态更新 DNS 的服务。
  • WireGuard 不开箱即用地处理 NAT 穿越,因此您需要找到一种提供此服务的方法。
  • 此连接是一对一的,因此如果您需要高可用性或高吞吐量,您需要在 WireGuard 之上构建它。
  • 您需要为运行器和私有服务生成并安全存储密钥。WireGuard 使用 UDP,因此您的网络必须支持 UDP 流量。

也有一些优势,例如,您可以在现有服务器上运行 WireGuard,因此您无需维护单独的基础设施,并且它在 GitHub 托管的运行器上得到了很好的支持。

示例:配置 WireGuard

此示例工作流程配置 WireGuard 连接到私有服务。

在此示例中,在私有网络中运行的 WireGuard 实例具有以下配置

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

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

  • 覆盖网络 IP 地址为 192.168.1.2
  • 私钥存储为 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 穿越是内置的,因此您无需将端口公开到公共互联网。它是这些选项中最快的,因为它提供了一个 GitHub Actions 工作流程,只需一步即可连接到覆盖网络。

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