Skip to main content

Создание наложения сети с помощью 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...

Экземпляр WireGuard в средстве выполнения тестов GitHub Actions имеет следующую конфигурацию:

  • 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, а также в AUTOTITLE о том, как безопасно хранить ключи.

Использование Tailscale для создания наложения сети

Tailscale — это коммерческий продукт на базе WireGuard. Данный вариант очень похож на WireGuard, за исключением того, что Tailscale является более полноценным продуктом, а не компонентом с открытым кодом.

Его недостатки похожи на WireGuard: подключение одно к одному, поэтому может потребоваться выполнить дополнительную работу для обеспечения высокой доступности или высокой пропускной способности. Вам по-прежнему придется создавать ключи и безопасно хранить их. Протокол по-прежнему UDP, поэтому ваша сеть должна поддерживать трафик UDP.

Тем не менее, есть некоторые преимущества по сравнению с WireGuard: функция обхода NAT является встроенной, поэтому вам не нужно предоставлять порт для подключения к общедоступному Интернету. На сегодняшний день это самый быстрый из обсуждаемых вариантов, поскольку Tailscale предоставляет рабочий процесс GitHub Actions с одним шагом для подключения к сети наложения.

Дополнительные сведения см. в разделе Tailscale GitHub Action, а также Использование секретов в GitHub Actions для безопасного хранения ключей.