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 |
- Abra IAM → Roles e clique em Create role.
- Escolha AWS service → EC2 → Next.
- Pesquise
AmazonSSMManagedInstanceCore, marque a policy e clique em Next. - Em Role name, escreva
discord-vpn-ec2-ssme clique em Create role.
-
Abra EC2 → Instances e clique em Launch instances.
-
Use:
Campo Valor Name discord-vpnAMI Amazon Linux 2023 Instance type t3.microou outro pequeno -
Em Key pair (login), clique em Create new key pair, escolha RSA e .pem, e guarde o download.
-
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.
-
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 51820Anywhere-IPv4 ( 0.0.0.0/0)SSH 22My IP -
Em Advanced details → IAM instance profile, selecione
discord-vpn-ec2-ssm. -
Clique em Launch instance, espere Running e Status checks: 2/2 passed, e copie o Instance ID.
- Abra EC2 → Elastic IP addresses.
- Clique em Allocate Elastic IP address → Allocate.
- Marque o IP criado e clique em Actions → Associate Elastic IP address.
- Em Resource type, selecione Instance; em Instance, escolha a EC2
discord-vpn. - Deixe Private IP address automático, deixe Allow reassociation desmarcado e clique em Associate.
- Na lista, confirme que Associated instance ID mostra sua EC2. Copie Elastic IP address como
<ELASTIC_IP>— é só o IPv4, sem:51820e sem o Allocation ID.
- Em EC2 → Instances, marque sua EC2 e abra Actions → Networking → Change source/destination check.
- Selecione Stop e clique em Save. Isso só desliga a verificação; não para a EC2.
- Abra Systems Manager → Managed nodes e espere o Ping status da EC2 ficar Online.
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 showVocê 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.
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-
Abra Lambda → Functions e clique em Create function → Author from scratch.
-
Use o nome
discord-vpn-register-peer, escolha Python 3.12 e deixe Create a new role with basic Lambda permissions marcado. -
Clique em Create function.
-
Na aba Code, abra
aws/lambda_function.py, copie tudo para o editor da AWS e clique em Deploy. -
Em Code → Runtime settings → Edit, deixe o handler como
lambda_function.lambda_handlere salve. -
Em Configuration → General configuration → Edit, coloque Timeout: 1 min 0 sec e salve.
-
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.
-
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": "*"
}
]
}- Clique em Next, chame a policy de
discord-vpn-ssme clique em Create policy. - De volta na Lambda, abra Configuration → Function URL → Create function URL, escolha Auth type: NONE, salve e copie a URL como
<FUNCTION_URL>.
| 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.
| 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 |