VPN IPSEC AWS e FORTIGATE BGP

Neste artigo irei configurar um VPN IPSec entre AWS e Fortigate com Roteamente BGP.

Vamos ao nosso cenário:

AWS – Sao Paulo

VPC
My-VPC-01 10.128.0.0/24

Subnet
my-subnet-01 10.128.0.0/26

Route table
my-routetable-01 (Subnet-01)

Security Group
my-sg-01

My EC2
my-ec2-01 (my-subnet-01)

Temos nosso “Costumer Gateway”

Abaixo as configurações com as nossas configurações (IP/ASN do Fortigate), um ponto bem importante aqui vamos utilizar o “ASN” “65010”, ele tem que ser único na sua rede.

Para maiores informações clique aqui

Após criado, ficará desta forma

Agora vamos para os nossos Virtual Private Gateway (VPG) – “my-vpg”

Agora aqui iremos utilizar o “ASN” “64530”este ASN será o ASN da AWS.

Após a criação ficará desta forma

Agora teremos que anexar nosso VPV (iremos anexar “my-vpc-01”, “Action” “Attach to VPC”

Agora temos nosso vpg com vpc attach

Agora vamos voltar para nossos arquivos de “Route Table”

Vamos selecionar “my-route-table-01”, depois em “Propagação de Rotas”, editar propagação de Rotas e Habilitar a propagação, repita esses passos para os outros dois aquivos de Route Table.

Agora vamos criar nossa conexão com nosso Fortigate

Se tudo correu bem, teremos essa tela

Agora vamos para nosso fortigate, mas antes disso precisamos pegar as configurações, clique em “fazer download da configuração”

Fornecedor “Fortinet”
Plataforma “Fortigate 40+ Series”
Software “FortiOS 6.4.4 + (GUI)
Ike Version “IKEv2”

Pronto, agora sim, vamos para nosso Fortigate

EM VPN, IPSec Wizard, Create New

Vamos utilzar este nome “TunnelAWS01” nos iremos criar dois tunneis para este exemplo.

Essas são as informações fornecidas para o Tunnel 01

New VPN Tunnel Window Appears (Here we configure the VPN settings):

Under “Network” Section:
a. IP Version:     IPv4
b. Remote Gateway: Static IP Address
c. IP address: 54.207.145.204
d. Local Interface: wan1
e. Local Gateway: Select Specify and enter WAN port IP (Public IP)
f. Dead Peer Detection: Enable by selecting On Idle/ On Demand
g. Authentication Method: Pre-shared Key
h. Pre-Shared Key: KUGQkdF1Y3_hKD1mI5azR2JwEQRE463n
i. IKE Version: 2
Phase 1 Proposal:
j.  Encryption: aes128
k. Authentication: sha1
l. DH group: 2     ! and deselect 5
m. Keylife: 28800 seconds

! NAT Traversal is enabled by default but if your FortiGate device is not behind a NAT/PAT device, please deselect NAT Traversal.

! --------------------------------------------------------------------------------
! #2: IPSec Configuration

Under Phase 2 Selectors --> New Phase 2
a.	Name:  vpn-04ec6648c35364924-0
b.	Local Address: LAN subnet behind Fortigate/0.0.0.0/0
c.	Remote Address: AWS Private Subnet/0.0.0.0/0

Under Advanced
d.	Encryption: aes128
e.	Authentication: sha1
f.	Select Enable Replay Detection
g.	Select Perfect Forward Secrecy
h.	DH Group: 2 ! and deselect 5
i.	Keylife: 3600 seconds
j.	Enable Auto-negotiate   ! Autokey Keep Alive is enabled automatically when Auto-negotiate is enabled
k.	Click Ok

Se tudo correu bem temos esta tela

Agora vamos criar mais um Tunnel, mas as informações do .txt, para o Tunnel 02

Temos as seguintes configurações para o Tunnel02

New VPN Tunnel Window Appears (Here we configure the VPN settings):

New VPN Tunnel Window Appears (Here we configure the VPN settings):

Under “Network” Section:
a. IP Version:     IPv4
b. Remote Gateway: Static IP Address
c. IP address: 54.232.159.40
d. Local Interface: wan1
e. Local Gateway: Select Specify and enter WAN port IP (Public IP)
f. Dead Peer Detection: Enable by selecting On Idle/ On Demand
g. Authentication Method: Pre-shared Key
h. Pre-Shared Key: AVxMUvS1A1GuxDVcJxm_K28O67CthcZU
i. IKE Version: 2
Phase 1 Proposal:
j.  Encryption: aes128
k. Authentication: sha1
l. DH group: 2     ! and deselect 5
m. Keylife: 28800 seconds

! NAT Traversal is enabled by default but if your FortiGate device is not behind a NAT/PAT device, please deselect NAT Traversal.

! --------------------------------------------------------------------------------
! #2: IPSec Configuration

Under Phase 2 Selectors --> New Phase 2
a.	Name:  vpn-04ec6648c35364924-1
b.	Local Address: LAN subnet behind Fortigate/0.0.0.0/0
c.	Remote Address: AWS Private Subnet/0.0.0.0/0

Under Advanced
d.	Encryption: aes128
e.	Authentication: sha1
f.	Select Enable Replay Detection
g.	Select Perfect Forward Secrecy
h.	DH Group: 2 ! and deselect 5
i.	Keylife: 3600 seconds
j.	Enable Auto-negotiate   ! Autokey Keep Alive is enabled automatically when Auto-negotiate is enabled
k.	Click Ok

Se tudo correu bem até aqui teremos esse resultado.

Agora vamos criar uma Zona chamada Trust-Cloud, em Network, Interfaces, Create new, Zone

Adicione os dois Tunneis para AWS

Se tudo correu bem teremos

Agora voltando em nosso .txt, vamos começar a configurar o BGP.

Nos temos essa configuração a fazer nas interfaces VPN que criamos


Go to Network Tab --> Interface --> wan1 and edit TunnelAWS01

a. IP : 169.254.92.86
b. Remote IP: 169.254.92.85/30
c. Select Ping
d. Administrative Status: Up
e. Select Ok.

## Vamos fazer a configuração da Interface via CLI do Fortigate
#Configurar interfaces para sessão BGP

config system interface
    edit TunnelAWS01
        set ip 169.254.92.86 255.255.255.255
        set remote-ip 169.254.92.85 255.255.255.252
    next

!You can set MTU and MSS on the tunnel by performing this from the CLI:
 
 config system interface
  edit "TunnelAWS01"
    set mtu-override enable
    set mtu 1427
    set tcp-mss 1379
   next
end

Resultado, edit a interface e habilite o ping (repita isso na segunta interface)

Configurando MTU (Repita isso na segunda interface)

Agora repita os passos para a segunda interface

Vamos utilizar as informações que constam no .txt que foi feito download

Go to Network Tab --> Interface --> wan1 and edit TunnelAWS02

a. IP : 169.254.31.218
b. Remote IP: 169.254.31.217/30
c. Select Ping
d. Administrative Status: Up
e. Select Ok.

#Configurar interfaces para sessão BGP

config system interface
    edit TunnelAWS02
        set ip 169.254.31.218 255.255.255.255
        set remote-ip 169.254.31.217 255.255.255.252
    next

!You can set MTU and MSS on the tunnel by performing this from the CLI:
 config global
 config system interface
  edit "vpn-08d53f64bc31f682f-1" ! This name will be the same as the VPN tunnel name
    set mtu-override enable
    set mtu 1427
    set tcp-mss 1379
   next
end

Edit a interface e habilite o ping

Se tudo correu bem até aqui, teremos esse resultado.

Agora vamos criar as regras de Firewall, aqui iremos fazer simples, Any –> AWS e Any –> OnPremises.

Vamos criar via CLI que é muito mais rapido

#Criar regras de firewall

config firewall policy
    edit 1
        set name allow-gcp-to-lan
        set srcintf Trust-Cloud
        set dstintf Trust
        set srcaddr all
        set dstaddr all
        set action accept
        set schedule always
        set service ALL
    next
    edit 2
        set name allow-lan-to-gcp
        set srcintf Trust
        set dstintf Trust-Cloud
        set srcaddr all
        set dstaddr all
        set action accept
        set schedule always
        set service ALL
end

Se tudo correu bem nos temos ida e volta

Agora nossos Tunneis devem estar UPs, vamos conferir

Agora vamos para nossa configuração BGP no Fortigate

Voltamos lá no nosso .txt que foi baixado com as configurações, lá nos temos todas as informações necessária para configurar o BGP.

#Vamos utlizar a informação que consta no .txt

Go to Network --> BGP

#Primeira interface

 a. Local-AS : 65010
 b. Router-ID: 191.232.210.141
 c. Click Apply
 d. Neighbor -> Create New:
      1. IP:  169.254.92.8
      2. Remote AS: 64530
      3. Click Add/Edit

#Segunda interface

Go to Network --> BGP

 d. Neighbor -> Create New:
      1. IP:  169.254.190.113
      2. Remote AS: 64530
      3. Click Add/Edit

Agora vamos declara nosso CIDR para o BGP

Se tudo correu bem até aqui, devemos ter esse

Agora que os dois Tuneis estão UPs

Agora vamos ver nosso roteamento
Vemos que nossa rota BGP aparece em nossa tabela (rede AWS)

Agora de volta a AWS, vamos verificar nossa tabela de routa e Security Group

Liberamos em nosso SG a rede 10.5.0.0/22

Agora vamos ver nossa tabela de rotas

Nossa rota foi propagada com sucesso, vamos testar a conectivdade

Em nossa rede 10.5.0.0/22 conseguimos chegar na rede 10.128.0.0/24

Agora vamos ver em nossa rede AWS 10.128.0.0/24 se conseguimos chegar na rede 10.5.0.0/22

Com isso concluimos este artigo, em um próximo artigo irei fazer a conexão utilizando “Transit Gateway” com redes em Sao Paulo e Virginia utilizando somente uma conexão VPN IPSec.

19 comentários

      1. config vpn ipsec phase2-interface
        edit “Morpheus_DSV_01”
        set phase1name “Morpheus_DSV_01”
        set proposal aes128-sha1
        set dhgrp 2
        set auto-negotiate enable
        set src-addr-type name
        set dst-addr-type name
        set keylifeseconds 3600
        set src-name “G_P2_CMP_LOCAL”
        set dst-name “G_P2_CMP_NUVEM”
        next
        end

        dentro desses grupos tem as redes de cada lado, mais o /30 do BGP…
        uma pergunta.. o peer da AWS é pingável? Não gosto de fazer troubleshooting tipo do BGP sem me certificar dos passos anteriores… mas como não tenho controle (nem acesso) do ambiente da nuvem (fica por contra de outros aqui na empresa) fico meio no escuro se a conectivida está ok, se o túnel está ok.. hoje vou meter rota estática para ver se estou alcançando as redes, antes de querer fazer o BGP funcionar.

        Curtir

      2. Tiago, pelo que estou vendo “G_P2_CMP_LOCAL” “G_P2_CMP_NUVEM” são objetos de rede criados em seu firewall, se for isso mesmo, a Phase2 deve ficar desta forma

        remote network 0.0.0.0/0
        local network 0.0.0.0/0

        Pois das redes serão anunciadas/aprendidas via BGP

        O /30 do BGP não entra nas regras do firewall nem da Phase2

        o /30 deve ser cadastrado nas interface (de cada tunnel VPN) em interfaces do Fortigate

        Curtir

      3. Opa.. então… eu até abri os proxy-id aí na fase 2 para 0.0.0.0/0 dos dois lados..
        Não estou conseguindo me expressar bem para você me ajudar…
        Está tudo configurado. O /30 precisaria estar na fase 2 também, mas agora como está 0.0.0.0/0, não precisa mais (pq ele já está compreendido aí).
        Os ips estão na interface túnel. E já aparecem as rotas diretamente conectadas na minha tabela de rotas.
        Eu não consigo pingar meu gateway..
        os endereços na Interface são:
        ip 169.254.254.26
        remote-ip 169.254.254.25/30
        aí na tabela de rotas aparece a rota pro /30 (169.254.254.24/30) corretamente apontando pro túnel.
        Mas eu não consigo pingar o remote-ip. Minha dúvida era… eu deveria pingar o remote-ip? Você consegue aí? Pq se conseguir, então eu tenho um problema anterior, ainda, que eu tenho que resolver. O problema (meu) é que não sou eu quem opera as nuvens.
        Consegui subir corretamente com a Google e Azure… essa é que tá me dando essa dor de cabeça.

        Curtir

      4. Sim, eu consigo pingar sim

        FGT-FGT # execute ping-options source 169.254.99.174

        FGT-FGT # execute ping 169.254.99.173
        PING 169.254.99.173 (169.254.99.173): 56 data bytes
        64 bytes from 169.254.99.173: icmp_seq=0 ttl=254 time=5.7 ms
        64 bytes from 169.254.99.173: icmp_seq=1 ttl=254 time=5.5 ms
        64 bytes from 169.254.99.173: icmp_seq=2 ttl=254 time=5.6 ms
        64 bytes from 169.254.99.173: icmp_seq=3 ttl=254 time=5.7 ms
        64 bytes from 169.254.99.173: icmp_seq=4 ttl=254 time=5.6 ms

        — 169.254.99.173 ping statistics —
        5 packets transmitted, 5 packets received, 0% packet loss
        round-trip min/avg/max = 5.5/5.6/5.7 ms

        FGT-FGT #

        Curtir

  1. Olá Charles, tudo bem?

    Estou tendo problemas de lentidão, eu fechei duas VPNs Site-to-Site, porém utilizando rotas estáticas, isso era para ser um problema?
    Configurando por BGP seria mais rápido?
    Não sei se vale, mas tento enviar um arquivo qualquer, não passa dos 300kb/s, muito lento!
    Se vou externo, diretamente pelo IP externo da máquina EC2, voa rsrs

    Curtir

    1. Alison,

      Não recomenda usar dois tuneis de forma estatica, pois eu alguma momento você terá problemas (do pacote ir por um tunel e voltar por outro), em relação a velocidade isso depende muito em qual região da AWS esta seu conector e a qualidade/velocidade do seu link de internet (Tenha em mente que VPN IPSec não é muito veloz mesmo).
      Eu recomendaria recriar a VPN utilizando rotas dinamicas (BGP), pois assim você ficaria com redundancia (mas para isso você precisa ter duas operadoras de internet)

      Curtir

      1. Sim, nós temos aqui duas operadoras.
        Vou ver de recriar usando o BGP, e ver se melhora a velocidade.
        A VPN esta em Virgínia, junto com as EC2. Mas indo externamente, sem a VPN a velocidade é 20x mais rápida que usando a VPN.
        Não deveria ser essa diferença toda, pelo menos na documentação da AWS, as conexões de VPN são de 1.2GB.
        Nossos links aqui são de 1GB

        Curtir

    2. https://aws.amazon.com/blogs/networking-and-content-delivery/aws-site-to-site-vpn-choosing-the-right-options-to-optimize-performance/

      If you’ve read the Site-to-Site VPN FAQ or quotas pages, then you may have seen a maximum performance of up to 1.25 gigabits per second (Gbps) and 140,000 packets per second (PPS) per tunnel. These are estimated maximums based on our experience, but the maximums are dependent on several factors. Certain cryptographic features on Site-to-Site VPN perform better than others. Additionally, certain network optimizations both inside and outside of the tunnel can also improve performance. This is also dependent on the specific application that is using the IPsec tunnel to communicate. Given this performance estimate is variable based on different factors, we highly recommend that you test baseline performance with your specific environment and workloads to understand what your maximum throughput will be.

      Curtir

      1. Olá Charles, tudo bem?

        No meio do processo de configuração surgiu uma dúvida.
        No BGP dentro do Fortigate, existe o Router ID, onde seria o meu IP da operadora, mas como serão duas, como ficaria?
        Mas mesmo assim tentamos configurar 1 operadora, para ver se funcionava.
        A VPN fecha mas a rota não propaga, e no Fortigate, nas rotas a rota não fica igual ao seu post, ela fica no Gateway IP mostrando o IP do Tunel, 169.x.x.x
        Não sei se pelo fato da rota não ter propagado la no painel da AWS

        Curtir

      2. Foi recriado, está como dinamico, porem como possuo dois links, eu criei 2.
        Ai fica essa dúvida, como configuro dois no Fortigate, sendo que consigo colocar apenas 1 Router ID.
        E mesmo configurando 1 dos VGW, ele não propaga a rota

        Curtir

      3. Obrigado Charles, entendi sobre o Transit Gateway.

        Mas sobre o BGP no Fortigate ainda ficou a dúvida.
        Como terei dois provedores, eu terei duas interfaces, e consequentemente 2 IPs.
        Coloco apenas 1 deles mesmo?

        Outro ponto, na AWS criei as 2 VPNs com o ASN BGP uma diferente da outra, crio igual?

        Curtir

Deixe um comentário

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.