使用 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 中使用密钥",了解如何安全地存储密钥。