Создание наложения сети с помощью 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 для безопасного хранения ключей.