Skip to content

Latest commit

 

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Vai anotando esses valores enquanto segue o guia:

Valor Onde pegar
<REGION> seletor de região no canto superior direito da AWS
<ACCOUNT_ID> menu da conta no canto superior direito → Account ID
<INSTANCE_ID> EC2 → Instances → coluna Instance ID
<ELASTIC_IP> EC2 → Elastic IP addresses → coluna Elastic IP address
<TOKEN> resultado do comando da seção Lambda
<FUNCTION_URL> Lambda → sua função → Configuration → Function URL

1. Criar a AWS

Role da EC2

  1. Abra IAM → Roles e clique em Create role.
  2. Escolha AWS service → EC2 → Next.
  3. Pesquise AmazonSSMManagedInstanceCore, marque a policy e clique em Next.
  4. Em Role name, escreva discord-vpn-ec2-ssm e clique em Create role.

EC2

  1. Abra EC2 → Instances e clique em Launch instances.

  2. Use:

    Campo Valor
    Name discord-vpn
    AMI Amazon Linux 2023
    Instance type t3.micro ou outro pequeno
  3. Em Key pair (login), clique em Create new key pair, escolha RSA e .pem, e guarde o download.

  4. Em Network settings → Edit, escolha a VPC/subnet padrão. Se não houver VPC padrão, escolha uma subnet pública com rota para um Internet Gateway.

  5. Em Firewall (security groups), escolha Create security group. Mantenha SSH em My IP e clique em Add security group rule para incluir:

    Tipo Porta Origem
    Custom UDP 51820 Anywhere-IPv4 (0.0.0.0/0)
    SSH 22 My IP
  6. Em Advanced details → IAM instance profile, selecione discord-vpn-ec2-ssm.

  7. Clique em Launch instance, espere Running e Status checks: 2/2 passed, e copie o Instance ID.

Elastic IP

  1. Abra EC2 → Elastic IP addresses.
  2. Clique em Allocate Elastic IP address → Allocate.
  3. Marque o IP criado e clique em Actions → Associate Elastic IP address.
  4. Em Resource type, selecione Instance; em Instance, escolha a EC2 discord-vpn.
  5. Deixe Private IP address automático, deixe Allow reassociation desmarcado e clique em Associate.
  6. Na lista, confirme que Associated instance ID mostra sua EC2. Copie Elastic IP address como <ELASTIC_IP> — é só o IPv4, sem :51820 e sem o Allocation ID.

Roteamento e SSM

  1. Em EC2 → Instances, marque sua EC2 e abra Actions → Networking → Change source/destination check.
  2. Selecione Stop e clique em Save. Isso só desliga a verificação; não para a EC2.
  3. Abra Systems Manager → Managed nodes e espere o Ping status da EC2 ficar Online.

2. Colocar o WireGuard na EC2

Copie a pasta aws/server inteira para a EC2; não edite nada lá dentro.

No Windows, abra PowerShell na pasta do projeto:

scp -i "C:\caminho\sua-chave.pem" -r ".\aws\server" ec2-user@<ELASTIC_IP>:/home/ec2-user/discord-vpn-server
ssh -i "C:\caminho\sua-chave.pem" ec2-user@<ELASTIC_IP>

No macOS ou Linux:

chmod 400 ~/Downloads/sua-chave.pem
scp -i ~/Downloads/sua-chave.pem -r ./aws/server ec2-user@<ELASTIC_IP>:~/discord-vpn-server
ssh -i ~/Downloads/sua-chave.pem ec2-user@<ELASTIC_IP>

Já dentro da EC2:

sudo bash ~/discord-vpn-server/bootstrap.sh
sudo wg show

Você deve ver interface: wg0 e listening port: 51820. Depois, remova a regra SSH: EC2 → Security Groups → seu Security Group → Inbound rules → Edit inbound rules → excluir SSH 22 / My IP → Save rules.

3. Criar a Lambda

Gere um token aleatório no terminal do seu sistema e guarde o resultado:

# Windows PowerShell
$bytes = New-Object byte[] 32
$rng = [System.Security.Cryptography.RandomNumberGenerator]::Create()
$rng.GetBytes($bytes)
$rng.Dispose()
-join ($bytes | ForEach-Object { $_.ToString('x2') })
# macOS ou Linux
openssl rand -hex 32
  1. Abra Lambda → Functions e clique em Create function → Author from scratch.

  2. Use o nome discord-vpn-register-peer, escolha Python 3.12 e deixe Create a new role with basic Lambda permissions marcado.

  3. Clique em Create function.

  4. Na aba Code, abra aws/lambda_function.py, copie tudo para o editor da AWS e clique em Deploy.

  5. Em Code → Runtime settings → Edit, deixe o handler como lambda_function.lambda_handler e salve.

  6. Em Configuration → General configuration → Edit, coloque Timeout: 1 min 0 sec e salve.

  7. Em Configuration → Environment variables → Edit, clique em Add environment variable três vezes:

    Nome Valor
    TOKEN <TOKEN>
    INSTANCE_ID <INSTANCE_ID>
    ELASTIC_IP <ELASTIC_IP>

    Clique em Save.

  8. Em Configuration → Permissions, clique na Execution role. No IAM, abra Add permissions → Create inline policy → JSON e cole isto, trocando os três valores entre < >:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ssm:SendCommand",
      "Resource": [
        "arn:aws:ssm:<REGION>::document/AWS-RunShellScript",
        "arn:aws:ec2:<REGION>:<ACCOUNT_ID>:instance/<INSTANCE_ID>"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "ssm:GetCommandInvocation",
      "Resource": "*"
    }
  ]
}
  1. Clique em Next, chame a policy de discord-vpn-ssm e clique em Create policy.
  2. De volta na Lambda, abra Configuration → Function URL → Create function URL, escolha Auth type: NONE, salve e copie a URL como <FUNCTION_URL>.

4. Preparar e mandar o script

Sistema Arquivo WireGuard
Windows discord.bat Download oficial
Linux discord_linux.sh sudo apt update && sudo apt install -y wireguard resolvconf curl
macOS discord_macos.sh brew install wireguard-tools

Antes de mandar o arquivo, preencha:

AUTH_URL="<FUNCTION_URL>"
AUTH_TOKEN="<TOKEN>"

No Windows, as duas linhas começam com set . No Linux/macOS, substitua apenas o texto entre < >. Mande a URL pura da Lambda, sem link em Markdown e sem colocar o token dentro dela.

Para rodar:

Sistema Como abrir
Windows dois cliques em discord.bat e aceite o UAC
Linux chmod +x discord_linux.sh && ./discord_linux.sh
macOS chmod +x discord_macos.sh && ./discord_macos.sh

Cada computador cria sua própria chave. Não copie a chave de um amigo para outro.

Se algo der errado

Erro O que conferir
Não autorizado O token no script precisa ser igual ao TOKEN da Lambda.
EC2 não aparece no SSM Role discord-vpn-ec2-ssm, subnet com internet e Ping status: Online.
Não sai pelo Elastic IP Associação do Elastic IP, UDP 51820 e source/destination check desligado.
Linux pede resolvconf Instale resolvconf ou openresolv.
Túnel preso no Windows No PowerShell como administrador: & "C:\Program Files\WireGuard\wireguard.exe" /uninstalltunnelservice discord-vpn

About

VPN Self-Hosted para restaurar a transmissão de tela do Discord.

Topics

Resources

Stars

5 stars

Watchers

1 watching

Forks

Contributors

Languages