跳至主要内容

使用 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穿越功能,因此无需将端口暴露给公网。这是这些选项中最快速启动和运行的方式,因为Tailscale提供了一个只需一步即可连接到覆盖网络的GitHub Actions工作流程。

更多信息,请参阅Tailscale GitHub Action,以及关于如何在GitHub Actions中安全存储密钥的文档"在GitHub Actions中使用密钥"。