Uso de WireGuard para crear una superposición de red
Si no quieres mantener una infraestructura independiente para una puerta de enlace de API, puedes crear una red superpuesta entre el ejecutor y un servicio en la red privada ejecutando WireGuard en ambos lugares.
Existen varias desventajas con este enfoque:
- Para lograr que WireGuard se ejecute en el servicio privado, necesitarás una dirección IP y un puerto conocidos a los que puede hacer referencia el flujo de trabajo: esto puede ser una IP pública y un puerto, una asignación de puertos en una puerta de enlace de red o un servicio que actualice DNS de forma dinámica.
- WireGuard no controla el NAT transversal de fábrica, por lo que deberás identificar una manera de proporcionar este servicio.
- Esta conexión es uno a uno, por lo que si necesitas alta disponibilidad o alto rendimiento, deberás basarte en WireGuard.
- Deberás generar y almacenar claves de forma segura para el ejecutor y el servicio privado. WireGuard usa UDP, por lo que la red debe admitir el tráfico UDP.
También cuenta con algunas ventajas, ya que puedes ejecutar WireGuard en un servidor existente, por lo que no tienes que mantener una infraestructura independiente y se admite en ejecutores hospedados de GitHub.
Ejemplo: Configuración de WireGuard
En este flujo de trabajo de ejemplo se configura WireGuard para conectarse a un servicio privado.
En este ejemplo, la instancia de WireGuard que se ejecuta en la red privada tiene esta configuración:
- Dirección IP de red de superposición de
192.168.1.1
- IP pública y puerto de
1.2.3.4:56789
- Clave pública
examplepubkey1234...
La instancia de WireGuard en el ejecutor de GitHub Actions tiene esta configuración:
- Dirección IP de red de superposición de
192.168.1.2
- Almacenes de claves privadas como un secreto de GitHub Actions en
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
Para obtener más información, consulta Inicio rápido de WireGuard, así como "Uso de secretos en Acciones de GitHub" para obtener información sobre cómo almacenar claves de forma segura.
Uso de Tailscale para crear una superposición de red
Tailscale es un producto comercial basado en WireGuard. Esta opción es muy similar a WireGuard, salvo que Tailscale es más una experiencia de producto completa en lugar de un componente de código abierto.
Las desventajas son similares a las de WireGuard: la conexión es uno a uno, por lo que es posible que tengas que realizar un trabajo adicional para lograr una alta disponibilidad o un alto rendimiento. Todavía es necesario generar y almacenar claves de forma segura. El protocolo sigue siendo UDP, por lo que la red debe admitir el tráfico UDP.
Pero cuenta con algunas ventajas con respecto a WireGuard: el NAT transversal está integrado, por lo que no es necesario exponer un puerto a la red pública de Internet. De entre estas opciones es, de lejos, la más rápida para ponerse en marcha, ya que Tailscale proporciona un flujo de trabajo de GitHub Actions con un solo paso para conectarse a la red de superposición.
Para obtener más información, consulta la Acción de GitHub de Tailscale, así como "Uso de secretos en Acciones de GitHub" para obtener información sobre cómo almacenar claves de forma segura.