Post

Configurando VPN Site to Site com AWS e MikroTik [CLI-Only]

Fala galera! Seis tão baum?

Há algum tempo escrevi um artigo sobre como configurar uma VPN Site-to-Site entre o Azure e um MikroTik totalmente via linha de comando. Foi um baita aprendizado prático, principalmente porque o MikroTik não é oficialmente suportado como dispositivo de VPN no Azure — o que nos obriga a entender bem os detalhes técnicos.

Agora, nesta nova etapa de estudos e trabalho com AWS Provider, resolvi revisitar o tema VPN Site-to-Site, mas desta vez com a Amazon Web Services (AWS). E adivinha? A AWS fornece templates de configuração específicos para MikroTik, o que já facilita bastante a vida — mesmo que ainda não seja um vendor oficialmente homologado como Cisco ou Juniper.

Então, bora para mais um hands-on técnico usando MikroTik + AWS, tudo via CLI, como gostamos!

Objetivo

Implantar uma VPN Site-to-Site com AWS e MikroTik RouterOS usando IKEv2, garantindo conectividade segura entre nuvem e rede on-premises.

Cenário proposto

  • AWS (Cloud)
    • VPC: 10.10.0.0/24
    • Tunnel IP AWS: 35.172.99.11 e 44.212.169.18
    • Gateway: vgw-aws-to-mikrotik
  • On-Premises (Homelab)
    • Rede local: 172.16.0.0/24
    • Public IP MikroTik: 203.0.113.1
    • RouterOS: 6.49.2+

Criando a infraestrutura na AWS via AWS CLI

Você precisa ter o AWS CLI instalado e configurado com uma conta com permissões de VPC, EC2 e VPN.

1. Criar a VPC

1
2
3
aws ec2 create-vpc \
  --cidr-block 10.10.0.0/24 \
  --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=vpc-aws-mikrotik}]'

2. Criar a subnet e o internet gateway

1
2
3
4
aws ec2 create-subnet \
  --vpc-id vpc-xxxxxxxxxxxxxxxxx \
  --cidr-block 10.10.0.0/24 \
  --availability-zone us-east-1a
1
2
3
4
aws ec2 create-internet-gateway
aws ec2 attach-internet-gateway \
  --internet-gateway-id igw-xxxxxxxxxxxxxxxxx \
  --vpc-id vpc-xxxxxxxxxxxxxxxxx

3. Criar a tabela de rotas e associar à subnet

1
2
3
aws ec2 create-route-table \
  --vpc-id vpc-xxxxxxxxxxxxxxxxx \
  --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=rtb-aws-mikrotik}]'
1
2
3
aws ec2 associate-route-table \
  --subnet-id subnet-xxxxxxxxxxxxxxxxx \
  --route-table-id rtb-xxxxxxxxxxxxxxxxx
1
2
3
4
aws ec2 create-route \
  --route-table-id rtb-xxxxxxxxxxxxxxxxx \
  --destination-cidr-block 0.0.0.0/0 \
  --gateway-id igw-xxxxxxxxxxxxxxxxx

4. Criar o Virtual Private Gateway (VGW)

1
2
3
4
aws ec2 create-vpn-gateway \
  --type ipsec.1 \
  --amazon-side-asn 65001 \
  --tag-specifications 'ResourceType=vpn-gateway,Tags=[{Key=Name,Value=vgw-aws-to-mikrotik}]'
1
2
3
aws ec2 attach-vpn-gateway \
  --vpn-gateway-id vgw-xxxxxxxxxxxxxxxxx \
  --vpc-id vpc-xxxxxxxxxxxxxxxxx

5. Criar o Customer Gateway (CGW)

1
2
3
4
5
aws ec2 create-customer-gateway \
  --type ipsec.1 \
  --public-ip 203.0.113.1 \
  --bgp-asn 65000 \
  --tag-specifications 'ResourceType=customer-gateway,Tags=[{Key=Name,Value=cgw-mikrotik}]'

6. Criar a VPN Connection

1
2
3
4
5
6
aws ec2 create-vpn-connection \
  --type ipsec.1 \
  --customer-gateway-id cgw-xxxxxxxxxxxxxxxxx \
  --vpn-gateway-id vgw-xxxxxxxxxxxxxxxxx \
  --options StaticRoutesOnly=true \
  --tag-specifications 'ResourceType=vpn-connection,Tags=[{Key=Name,Value=vpn-aws-to-mikrotik}]'

7. Associar rota estática (para rede on-prem)

1
2
3
aws ec2 create-vpn-connection-route \
  --destination-cidr-block 172.16.0.0/24 \
  --vpn-connection-id vpn-xxxxxxxxxxxxxxxxx

8. Obter as configurações da VPN

Você pode extrair a PSK (pre-shared key) usando:

1
2
aws ec2 describe-vpn-connections --vpn-connection-ids vpn-xxxxxxxxxxxxxxxxx \
  --query 'VpnConnections[0].CustomerGatewayConfiguration' --output text

Ou obter o modelo completo para MikroTik:

1
2
3
4
aws ec2 get-vpn-connection-device-sample-configuration \
  --vpn-connection-id vpn-xxxxxxxxxxxxxxxxx \
  --vpn-connection-device-type-id mikrotik \
  --internet-key-exchange-version ikev1

A PSK estará visível como Secret: nesse output.

Configurando VPN Site-to-Site no MikroTik RouterOS

Atenção: Testado em MikroTik hAP Ac2 com RouterOS 6.49.2+. IKEv2 é obrigatório — presente a partir da v6.38.

2.1 IPSEC Profile

1
2
/ip ipsec profile
set [ find default=yes ] dh-group=modp1024 enc-algorithm=aes-256,aes-128,3des nat-traversal=no

2.2 IPSEC Peer

1
2
3
/ip ipsec peer
add address=35.172.99.11/32 comment="AWS VPN Peer" exchange-mode=ike2 \
    local-address=203.0.113.1 name=mikrotik-to-aws

2.3 IPSEC Identity

1
2
/ip ipsec identity
add peer=mikrotik-to-aws secret=CHANGEME_SECRET_HERE comment="AWS VPN PSK"

2.4 IPSEC Proposal

1
2
/ip ipsec proposal
set [ find default=yes ] enc-algorithms=aes-256-cbc,aes-128-cbc lifetime=7h30m

2.5 IPSEC Policy

1
2
/ip ipsec policy
add dst-address=10.10.0.0/24 peer=mikrotik-to-aws src-address=172.16.0.0/24 tunnel=yes comment="VPN to AWS"

2.6 Regras de NAT

1
2
3
/ip firewall filter
add chain=input protocol=ipsec-esp action=accept comment="Allow IPsec ESP"
add chain=input protocol=udp port=500,4500 action=accept comment="Allow IKE"

2.7 [Extra] Tabela RAW (Bypass conntrack)

1
2
3
/ip firewall raw
add action=notrack chain=prerouting dst-address=10.10.0.0/24 src-address=172.16.0.0/24
add action=notrack chain=prerouting dst-address=172.16.0.0/24 src-address=10.10.0.0/24

Por que usar RAW com notrack?

“Essa regra serve para bypassar o connection tracking do MikroTik. Quando pacotes de VPN passam por esse módulo, podem ocorrer inconsistências como falha em ping, problemas com NAT e uso excessivo de CPU. O notrack garante que o roteador apenas encaminhe o pacote sem tentar “entender” a conexão — ideal para túneis IPsec, que já carregam seu próprio estado.”

2.8 [Extra] Ajuste de TCP MSS

1
2
/ip firewall mangle
add chain=forward protocol=tcp tcp-flags=syn dst-address=10.10.0.0/24 action=change-mss new-mss=1360 comment="Ajuste MSS VPN AWS"

Por que ajustar o TCP MSS?

“O cabeçalho adicional introduzido por túneis IPsec reduz o tamanho do MTU. Sem esse ajuste, conexões TCP maiores podem ser fragmentadas ou até descartadas. Ao forçar um MSS menor, evitamos fragmentação e melhoramos a estabilidade da VPN, especialmente com serviços web e SSH.”

Validando a conexão VPN

1
2
aws ec2 describe-vpn-connections --vpn-connection-ids vpn-xxxxxxxxxxxxxxxxx \
  --query 'VpnConnections[0].VgwTelemetry'

Saída esperada:

1
2
3
4
5
6
7
8
[
  {
    "Status": "UP",
    "OutsideIpAddress": "200.140.15.YY",
    "LastStatusChange": "...",
    "AcceptedRouteCount": 1
  }
]

Encerrando e apagando recursos (opcional)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Substitua os valores com os IDs usados no seu ambiente
VPN_CONNECTION_ID="vpn-06f280a7985d5f7bc"
CUSTOMER_GATEWAY_ID="cgw-0d549fed432c06bd4"
VIRTUAL_GATEWAY_ID="vgw-08501e239e713c294"

# Exclui a conexão VPN
aws ec2 delete-vpn-connection --vpn-connection-id $VPN_CONNECTION_ID

# Exclui o Customer Gateway
aws ec2 delete-customer-gateway --customer-gateway-id $CUSTOMER_GATEWAY_ID

# Desanexa o Virtual Private Gateway (se estiver anexado a uma VPC)
VPC_ID=$(aws ec2 describe-vpn-gateways --vpn-gateway-ids $VIRTUAL_GATEWAY_ID --query "VpnGateways[0].VpcAttachments[0].VpcId" --output text)
aws ec2 detach-vpn-gateway --vpn-gateway-id $VIRTUAL_GATEWAY_ID --vpc-id $VPC_ID

# Exclui o Virtual Private Gateway
aws ec2 delete-vpn-gateway --vpn-gateway-id $VIRTUAL_GATEWAY_ID

Conclusão

Mais uma vez conseguimos integrar nosso querido MikroTik com um ambiente cloud — agora com a poderosa AWS!

  • Tudo via linha de comando
  • Configuração segura com IKEv2
  • Ótima base para estudar BGP, failover e automações com Terraform

É isso, galera! Se você gostou do artigo, comenta ou mande pra galera que também quer aprender um pouco sobre AWS!

Se você tiver alguma dúvida ou comentário, sinta-se à vontade para compartilhá-los conosco na seção de comentários abaixo!

Forte abraço a todos!

Este post está licenciado sob CC BY 4.0 e pelo autor.