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