Skip to main content

WireGuard を使用してネットワーク オーバーレイを作成する

ランナーとプライベート ネットワーク内のサービスの間にオーバーレイ ネットワークを作成できます。

WireGuard を使用してネットワーク オーバーレイを作成する

API ゲートウェイのための別個のインフラストラクチャを維持することを望まない場合は、両方の場所で WireGuard を実行することで、ランナーとプライベート ネットワーク内のサービスの間にオーバーレイ ネットワークを作成できます。

このアプローチにはさまざまな欠点があります。

  • プライベート サービスで実行されている WireGuard に到達するには、ワークフローで参照できる既知の IP アドレスとポートが必要です。これは、パブリック IP アドレスとポート、ネットワーク ゲートウェイ上のポート マッピング、または DNS を動的に更新するサービスのいずれかです。
  • WireGuard は既定では NAT トラバーサルを処理しないため、このサービスを提供する方法を特定する必要があります。
  • この接続は 1 対 1 であるため、高可用性または高スループットが必要な場合は、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 に似ています。接続は 1 対 1 であるため、高可用性または高スループットのために追加の作業を行うことが必要な場合があります。 キーを生成して安全に保存する必要があります。 プロトコルはまだ UDP であるため、ネットワークで UDP トラフィックをサポートする必要があります。

ただし、WireGuard に勝るいくつかの利点があります。NAT トラバーサルが組み込まれているため、パブリック インターネットにポートを公開する必要はありません。 Tailscale では、オーバーレイ ネットワークに接続する 1 つのステップで GitHub Actions ワークフローが提供されるため、これらのオプションの中では最もすばやく起動して実行できます。

詳しくは、Tailscale GitHub アクションに関するページと、キーを安全に保存する方法についての「GitHub Actions でのシークレットの使用」をご覧ください。