Skip to main content

Usar o WireGuard para criar uma sobreposição de rede

Você pode criar uma rede de sobreposição entre seu executor e um serviço em sua rede privada.

Usar o WireGuard para criar uma sobreposição de rede

Se você não quiser manter uma infraestrutura separada para um Gateway de API, poderá criar uma rede de sobreposição entre o executor e um serviço em sua rede privada, executando o WireGuard em ambos os locais.

Há várias desvantagens nessa abordagem:

  • Para acessar o WireGuard em execução em seu serviço privado, você precisará de um endereço IP conhecido e uma porta que seu fluxo de trabalho possa referenciar: isso pode ser um endereço IP público e uma porta, um mapeamento de porta em um gateway de rede ou um serviço que atualiza dinamicamente o DNS.
  • O WireGuard não lida com a passagem NAT pronta para uso. Portanto, você precisará identificar uma maneira de fornecer esse serviço.
  • Essa conexão é um para um. Por isso, se você precisar de alta disponibilidade ou alta taxa de transferência, precisará compilar isso em cima do WireGuard.
  • Você precisará gerar e armazenar chaves com segurança para o executor e seu serviço privado. O WireGuard usa UDP. Portanto, sua rede deve dar suporte ao tráfego UDP.

Também há algumas vantagens, pois você pode executar o WireGuard em um servidor existente para que não precise manter uma infraestrutura separada e ela tem suporte em executores hospedados no GitHub.

Exemplo: configurar o WireGuard

Este exemplo do fluxo de trabalho configura o WireGuard para se conectar a um serviço privado.

Para este exemplo, a instância do WireGuard em execução na rede privada tem essa configuração:

  • Sobreposição de endereço IP de rede do 192.168.1.1
  • Endereço IP público e porta do 1.2.3.4:56789
  • Chave pública examplepubkey1234...

A instância do WireGuard no executor do GitHub Actions tem esta configuração:

  • Sobreposição de endereço IP de rede do 192.168.1.2
  • Os armazenamentos de chave privada como um segredo do GitHub Actions em 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 obter mais informações, confira Início Rápido do WireGuard, bem como Usar segredos em ações do GitHub para saber como armazenar chaves com segurança.

Usar o Tailscale para criar uma sobreposição de rede

Tailscale é um produto comercial criado sobre o WireGuard. Esta opção é muito semelhante ao WireGuard, exceto que o Tailscale é mais uma experiência completa do produto em vez de um componente de código aberto.

As desvantagens dele são semelhantes às do WireGuard: a conexão é de um para um. Portanto, talvez seja necessário fazer um trabalho adicional para obter alta disponibilidade ou alta taxa de transferência. Você ainda precisa gerar e armazenar chaves com segurança. O protocolo ainda é UDP. Portanto, sua rede deve dar suporte ao tráfego UDP.

No entanto, há algumas vantagens sobre o WireGuard: a passagem NAT é interna. Por isso, você não precisa expor uma porta à Internet pública. É de longe a mais rápida dessas opções para começar a funcionar, já que o Tailscale fornece um fluxo de trabalho do GitHub Actions com uma única etapa para se conectar à rede de sobreposição.

Para obter mais informações, confira GitHub Actions no Tailscale, bem como Usar segredos em ações do GitHub para saber como armazenar chaves com segurança.