Neste post iremos discutir um cenário muito comum (e pouco documentado), que é utilizar um túnel GRE protegido com IPSec entre um roteador Cisco IOS ASR1002 e um Roteador Huawei NE40.

A topologia deste exemplo é descrita abaixo. Ela foi mantida simples para que possamos discutir os detalhes do GRE+IPSEC, sem entrar nos demais pontos da rede.

Nela temos o roteador Cisco com endereço IP público 198.51.100.2 e o roteador Huawei NE40 com o IP público 203.0.113.66. Ambos estão conectados a Internet, e com conectividade entre si. Precisamos estabelecer um túnel GRE entre os roteadores e protegê-lo através do IPSec no modo tunnel. O endereçamento do túnel é 172.31.31.0/30.

Nas próximas linhas abaixo iremos falar sobre o GRE e IPSec. O objetivo não é detalhar completamente estes protocolos, mas dar um overview e principalmente, uma base para o restante do artigo. Não seja apressado, há informações bem relevantes ali no meio.

GRE

O Generic Routing Encapsulation (GRE) é um protocolo de tunelamento que consegue encapsular uma variedade de protocolos de rede (ex: ATM, IPX, IPv6 e até mesmo IPv4) dentro de pacotes IPv4. Estes pacotes então podem ser transmitidos através das redes IPv4 comuns (ex Internet).

Alguns casos de uso do GRE:
interligar redes internas desconectadas entre si
interligar redes IPv6 isoladas por meio de redes IPv4
estabelecer comunicação Matriz x Filial pela Internet
links de mitigação
com VPNs quando necessários protocolos de roteamento


IPSEC

O IPSec é um framework de segurança desenvolvido pelo IETF que busca resolver problemas de segurança que o protocolo IPv4 não conseguiu tratar, como por exemplo encriptação, integridade de dados, validação de origem e anti-replay.
Na realidade o IPSec não é um único protocolo, e sim uma combinação de protocolos e algoritmos. Os principais são o IKEv1, IKEv2, ESP e o AH.

O IPSec é usado amplamente nas VPNs, sejam elas de remote-access e também nas site-to-site.

No ciclo de vida de um túnel, temos 5 etapas bem definidas:

  1. Definição do tráfego interessante
    O tráfego interessante é o gatilho que faz com que o túnel seja estabelecido. O roteador ou firewall, ao notar um tráfego interessante, inicia as próximas etapas da negociação do IPSec.
    O tráfego interessante geralmente é configurado na forma de ACLs, ou policies de tráfego.

  2. IKE fase 1
    Na fase 1 o protocolo estabelece um canal seguro de comunicação com o peer remoto. Uma vez estabelecido este canal seguro, as trocas de mensagens da fase 2 são permitidas.
    É na fase 1 que são protegidos os peers, autenticados, e as policies de ISAKMP são comparadas (e precisam casar). Existem dois modos, main e aggressive.

    Termos que você vai ver sobre a fase 1: ike, isakmp, DH group, pre-shared-key, integrity, isakmp policy

  3. IKE fase 2
    Nesta fase, já com o túnel seguro protegido estabelecido na fase 1, podemos negociar o que chamamos de IPSec SAs, que nada mais são os “contratos” do tipo de tráfego que serão protegidos pelo túnel IPSec, negociados dinamicamente. Um exemplo pode ser “vou proteger o tráfego da rede 192.168.1.0/24 quando o destino for 192.168.2.0/24 usando o algorítimo de encriptação X e de autenticação Y”, e o peer remoto faz a regra no sentido inverso.

    Outra função da fase 2 é manter os SAs, assim como expirar as chaves e as sessões caso algum parâmetro seja alcançado (ex: expire os SAs e negocie novos a cada x horas, ou a cada N kilobytes).

    Termos que vamos ver sobre a fase 2: ipsec, ipsec sa, crypto acl, transform set, mode tunnel, authentication, encryption, ipsec policy

  4. Transferência de dados
    Nesta fase é a transferência de dados em si. Assim que o tráfego interessante chega no roteador, e as fases 1 e 2 são completas, os pacotes são enviados de acordo com os contratos estabelecidos nos IPSec SA, sendo transmitidos até o peer remoto.

  5. Encerramento do túnel
    O encerramento do túnel acontece por processo manual, ou quando algum parâmetro do IPSec expira ou chega ao seu limite. Neste caso, todas as chaves são descartadas, os contratos desfeitos e se o tráfego precisar ser encaminhado, um novo túnel IPSec precisa ser estabelecido.

Para mais detalhes do GRE e IPSEC, consulte as referências citadas no final do artigo.

 

As configurações de GRE e IPSEC acordadas entre as partes

O exemplo abaixo é de como as informações de VPN são acordadas. Geralmente são formulários que são preenchidos com as informações sobre o túnel.

VPN Device

Site A VPN Device

Site B VPN Device

 

VPN Peer IP Address *

198.51.100.2

203.0.113.66

 

Device *

Cisco ASR 1004

Huawei NE40-M2K

 

Version *

V3.0.6

<COLOCAR_VERSAO>

 
    
    

Tunnel Properties

Site A VPN Device

Site B VPN Device

Phase 1

Authentication Method

<Pre-Shared Key> 

UmaSenhaBemS3gur@

<Pre-Shared Key>

UmaSenhaBemS3gur@

IKE version

IKEv2

IKEv2

Diffie-Hellman Group

group 14

group 14

Encryption Algorithm *

AES 256 

AES 256 

Hashing Algorithm *

SHA-1

SHA-1

Main or Aggressive Mode *

Main mode

Main mode

SA Lifetime * (for renegotiation) with no kbytes rekeying

86400 seconds

86400 seconds

Phase 2

Encapsulation * (ESP or AH)

ESP

ESP

Encryption Algorithm *

AES 256 

AES 256 

Authentication Algorithm *

SHA-1

SHA-1

Perfect Forward Secrecy for rekeying *

Disabled

Disabled

Diffie-Hellman Group *

group 14

group 14

SA Lifetime * (for renegotiation) ) with no kbytes rekeying

3600 seconds

3600 seconds

GRE

Addressing

172.31.31.1/30

172.31.31.2/30

Keepalives

Disabled

Disabled

MTU

1400

1400

Adjust MSS

1360

1360

Informações importantes sobre licença/módulos

Veja com o fabricante dos seus equipamentos se não é necessário algum tipo de placa de serviços, ou licença.

No caso dos equipamentos deste laboratório, o roteador NE40-M2K não precisou de módulo físico adicional, apenas a licença de IPSec. No roteador Cisco também não foi necessário licença, pois o IOS dele já estava no ADVIPSERVICES-K9 (que contém toda a base para o Ipsec).

*informação útil*: se quiser rodar IKEv1, no roteador Huawei você precisa de um módulo de software para IKEv1 (que você consegue com o fornecedor Huawei).

Configurações do Cisco IOS XE

Vamos lá então configurar o roteador Cisco para estabelecer a VPN. Não vou entrar em detalhes das interfaces físicas, somente da VPN. No final do artigo tem um bloco com a conf pertinente delas.

Configurações de fase 1, de acordo com a tabela acima:

# PROPOSAL PARA fase 1
crypto ikev2 proposal ikev2proposal
 encryption aes-cbc-256
 integrity sha1
 group 14

# policy de fase 1
crypto ikev2 policy ikev2policy
 match fvrf any
 proposal ikev2proposal


# chaveiro com as PSK
crypto ikev2 keyring keys
 peer site_b
  address 203.0.113.66
  pre-shared-key UmaSenhaBemS3gur@
 !

# profile com o PEER
crypto ikev2 profile ikev2profile
 match identity remote address 203.0.113.66 255.255.255.255
 authentication remote pre-share
 authentication local pre-share
 keyring local keys

Tudo o que estiver acima é relativo a Fase 1. Então quando estiver diagnosticando problemas, e ele for desta fase, já sabe onde mudar 🙂.

Agora, configurando a fase 2:

# confs da fase 2
crypto ipsec transform-set TS esp-aes 256 esp-sha-hmac
 mode tunnel

Simples demais no Cisco! Vamos agora combinar as duas fases em um profile:

# Profile a ser usado na VPN (combina as confs de fase1 e fase2)
crypto ipsec profile VPN-IKEv2-IPsec-Profile
 set transform-set TS
 set ikev2-profile ikev2profile

Criando o túnel GRE e adicionando a proteção IPSec:

# cria o tunnel GRE e aplica a protecao
interface Tunnel299
 description Tunnel Test Rafael
 bandwidth 10000
 ip address 172.31.31.1 255.255.255.252
 ip mtu 1400
 ip tcp adjust-mss 1360
 tunnel source Port-channel1.536
 tunnel destination 203.0.113.66
 tunnel protection ipsec profile VPN-IKEv2-IPsec-Profile
end

Configurações do Huawei

Vamos lá então configurar o roteador Huawei para estabelecer a VPN. Assim como do Cisco, não vou entrar em detalhes das interfaces físicas, somente da VPN. No final do artigo tem um bloco com a conf pertinente delas.

A configuração no roteador Huawei é um pouco mais complexa, pois ele cria um túnel para o protocolo GRE, e um túnel para o IPSec. Além disso, queremos usar o mesmo IP para ambos os túneis, sendo necessária uma VRF. 😮

Criando o service instance para uso da VPN (aplicavel somente no NE40):

# Cria o service-instance-group (somente NE40)
service-location 1
 location slot 1
 commit

service-instance-group group1
 service-location 1

Subindo a nova VRF (vpn-instance):

ip vpn-instance vpna
 ipv4-family
  route-distinguisher 100:1
  apply-label per-instance
  vpn-target 111:1 export-extcommunity
  vpn-target 111:1 import-extcommunity

Criando as duas interfaces Loopback com o mesmo IP (magias da VRF). A looback com o túnel IPSec ficará na tabela de roteamento pública, enquanto que a com o túnel GRE ficará na tabela VPNA.

# Lo da tabela global, para uso do IPSec
interface LoopBack1
ip address 203.0.113.66 255.255.255.255
binding tunnel ipsec

# Lo atrelada a vrf, para uso no GRE do mesmo IP.
interface LoopBack10
 ip binding vpn-instance vpna
 ip address 203.0.113.66 255.255.255.255
 binding tunnel gre

Agora sim chegamos ao IPSec. 

A ACL de tráfego interessante define o tráfego que será protegido pelo IPSec. No caso então, teremos o tráfego GRE entre os IPs do site A e site B. Perceba que só faço a comunicação em um sentido – o sentido do roteador protegendo o tráfego dele). 

# ACL de tráfego interessante
acl number 3000
 rule 0 permit gre vpn-instance vpna source 203.0.113.66 0
 destination 198.51.100.2 0

A ACL acima pode ser lida assim:

“Proteja os dados do protocolo GRE, vindo da VRF vpna entre a origem 203.0.113.66 e o destino 198.51.100.2”

Partimos agora criar a fase 1 (lembra que no cisco já até começa com ela, muito mais simples). No meio dela tem algumas configurações de binding de VPN-Instance, por conta da VRF criada.

# PROPOSAL PARA fase 1
ike proposal 1
 encryption-algorithm aes-cbc 256
 dh group14
 authentication-algorithm sha1
 integrity-algorithm hmac-sha1-96

# chaveiro com as PSK e peer
ike peer teste
 pre-shared-key UmaSenhaBemS3gur@adriano
 ike-proposal 1
 remote-address 198.51.100.2
 sa binding vpn-instance vpna

Tudo o que estiver acima é relativo a Fase 1. Então quando estiver diagnosticando problemas, e ele for desta fase, já sabe onde mudar 🙂.

Seguimos para a fase 2:

# confs da fase 2
ipsec proposal comfone
 encapsulation-mode tunnel
 transform esp
 esp authentication-algorithm sha1
 esp encryption-algorithm aes 256

Vamos agora combinar as duas fases em um profile:

# policy combinando ambas as fases
ipsec policy teste 1 isakmp
 ipsec df-bit clear
 security acl 3000
 ike-peer teste
 proposal comfone
 log enable

Criando os túneis GRE e IPSEC. Vamos lá para não confundir:

Tunnel 900 – é um túnel GRE, operando por dentro da vpna.

Tunnel 10 – é um túnel IPSec, operando na tabela global

A ideia na Huawei é de que exista um túnel IPSec rodando por fora, e um segundo túnel GRE por dentro, um encapsulado no outro. Mas o engraçado é que o túnel GRE roda fora da VRF, e o ipsec dentro. Baguncinha ne?

# Tunel GRE (dentro da VRF)
interface Tunnel900
 bandwidth 10000
 mtu 1400
 ip address 172.31.31.2 255.255.255.252
 clear ip df
 tunnel-protocol gre
 source LoopBack10
 destination vpn-instance vpna 198.51.100.2

# Tunel IPsec
interface Tunnel10
 ip address unnumbered interface LoopBack1
 tunnel-protocol ipsec
 ipsec policy teste service-instance-group group1

Então o tunnel900 que é o GRE (e que recebe os IPs do /30) usa um destino que vai por dentro da VPNA. E dentro da VPNA o destino é alcançado pelo túnel IPSec. Também observe que a policy de IPsec foi associada ao tunnel 10, utilizando o profile que foi criado.

Por fim, e não menos importante, uma rota que tem uma certa complexidade em si mesma: dentro da instancia VPNA, eu digo que para chegar ao peer remoto, eu utilizo a interface de IPSec recem criada, com o next-hop o próprio peer.

# Rota para o peer na VPN-Instance para usar o Tunnel
ip route-static vpn-instance vpna 198.51.100.2 255.255.255.255
 Tunnel10 198.51.100.2

E assim configuramos o roteador Huawei. Vamos ver se subiu agora.

Validação do funcionamento

No processo de validação do túnel, devemos sempre lembrar que cada fase e etapa depende do estabelecimento completo da outra, logo, não adianta querer ter conectividade se a fase 1 ainda não estabeleceu a comunicação.

Em ambos os roteadores, vamos validar em sequência:

  • conectividade
  • fase1
  • fase2
  • conectividade GRE
  • status das interfaces

Vamos lá para os testes.

Checagem Cisco

Validando a conectividade via ICMP ping

RT-CISCO-ASR1004#ping 203.0.113.66
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 203.0.113.66, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 22/24/27 ms
RT-CISCO-ASR1004#

Checando se o IKEv2 estabeleceu na Fase 1:

RT-CISCO-ASR1004#show crypto ikev2 sa
 IPv4 Crypto IKEv2  SA

Tunnel-id Local                 Remote                fvrf/ivrf            Status
1         198.51.100.2/500    203.0.113.66/500    none/none            READY
      Encr: AES-CBC, keysize: 256, PRF: SHA1, Hash: SHA96, DH Grp:14, Auth sign:
 PSK, Auth verify: PSK
      Life/Active Time: 86400/17 sec

Quando não aparecer nada na saída, ou ele não estiver em ready, quer dizer que alguns dos parâmetros da Fase 1 não casaram. Confira em ambos os lados se eles estão de acordo.

Continuamos a validação na Fase 2:

RT-CISCO-ASR1004#show crypto ipsec sa

interface: Tunnel299
    Crypto map tag: Tunnel299-head-0, local addr 198.51.100.2
   protected vrf: (none)
   local  ident (addr/mask/prot/port): (198.51.100.2/255.255.255.255/47/0)
   remote ident (addr/mask/prot/port): (203.0.113.66/255.255.255.255/47/0)
   current_peer 203.0.113.66 port 500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 2, #pkts encrypt: 2, #pkts digest: 2
    #pkts decaps: 2, #pkts decrypt: 2, #pkts verify: 2 
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0
    #send errors 0, #recv errors 0

     local crypto endpt.: 198.51.100.2, remote crypto endpt.: 203.0.113.66
     plaintext mtu 1438, path mtu 1500, ip mtu 1500, ip mtu idb Port-channel1.535
     current outbound spi: 0x2E41D7D5(776067029)
     PFS (Y/N): N, DH group: none

     inbound esp sas:
      spi: 0x27487883(659060867)
        transform: esp-256-aes esp-sha-hmac ,
        in use settings ={Tunnel, }
        conn id: 2010, flow_id: HW:10, sibling_flags FFFFFFFF80000048, crypto map: Tunnel299-head-0
        sa timing: remaining key lifetime (k/sec): (4607999/3508)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:
      spi: 0x2E41D7D5(776067029)
        transform: esp-256-aes esp-sha-hmac ,
        in use settings ={Tunnel, }
        conn id: 2009, flow_id: HW:9, sibling_flags FFFFFFFF80000048, crypto map: Tunnel299-head-0
        sa timing: remaining key lifetime (k/sec): (4607999/3508)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     outbound ah sas:

     outbound pcp sas:

Na saída acima, vemos que os roteadores trocaram o contrato de “tráfego interessante”. Cada lado se comprometeu a proteger um sentido da comunicação GRE.

Em sequência ainda na Fase 2, existem alguns contadores muito importantes que se referem a pacotes enviados/recebidos/encapsulados/encryptados/verificados. Ele fica na saída do comando “show crypto ipsec sa”.  Vamos ver eles.

RT-CISCO-ASR1004#show crypto ipsec sa  | inc pkts
    #pkts encaps: 2, #pkts encrypt: 2, #pkts digest: 2
    #pkts decaps: 2, #pkts decrypt: 2, #pkts verify: 2
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0
RT-CISCO-ASR1004#ping 172.31.31.2 repeat 2
Type escape sequence to abort.
Sending 2, 100-byte ICMP Echos to 172.31.31.2, timeout is 2 seconds:
!!
Success rate is 100 percent (2/2), round-trip min/avg/max = 22/22/22 ms
RT-CISCO-ASR1004#show crypto ipsec sa  | inc pkts
    #pkts encaps: 4, #pkts encrypt: 4, #pkts digest: 4
    #pkts decaps: 4, #pkts decrypt: 4, #pkts verify: 4
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0

Quando estes contadores não estão incrementando, ou ainda incrementando falhas, é porque alguma configuração da Fase 2 não está casando.  

Um bom exemplo seria somente o contador de encaps/encrypt ser incrementado, e enquanto o decaps/decrypt ficando zerado. Isto vai ser um problema da ACL de tráfego interessante que está divergindo em ambos os lados. Ou bloqueio da comunicação na rede de transporte ou ainda outros fatores que não vamos tratar aqui. Se precisar de ajuda, não deixe de nos contactar.

Por fim, vamos validar a conectividade em si! Mas agora por dentro do túnel já protegido!

RT-CISCO-ASR1004#ping 172.31.31.2 repeat 100
Type escape sequence to abort.
Sending 100, 100-byte ICMP Echos to 172.31.31.2, timeout is 2 seconds:!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (100/100), round-trip min/avg/max = 21/21/23 ms
RT-CISCO-ASR1004#

E a interface túnel se apresenta up, e funcional:

# interface UP
RT-CISCO-ASR1004#sh int tun299
Tunnel299 is up, line protocol is up
  Hardware is Tunnel
  Description: Tunnel Test Rafael
  Internet address is 172.31.31.1/30
  MTU 9914 bytes, BW 10000 Kbit/sec, DLY 50000 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation TUNNEL, loopback not set
  Keepalive not set
  Tunnel linestate evaluation up
  Tunnel source 198.51.100.2 (Port-channel1.536), destination 203.0.113.66
   Tunnel Subblocks:
      src-track:
         Tunnel299 source tracking subblock associated with Port-channel1.536
          Set of tunnels with source Port-channel1.536, 1 member (includes iterators), on interface <OK>
  Tunnel protocol/transport GRE/IP
    Key disabled, sequencing disabled
    Checksumming of packets disabled
  Tunnel TTL 255, Fast tunneling enabled
  Tunnel transport MTU 1414 bytes
  Tunnel transmit bandwidth 8000 (kbps)
  Tunnel receive bandwidth 8000 (kbps)
  Tunnel protection via IPSec (profile "VPN-IKEv2-IPsec-Profile")
  Last input never, output never, output hang never
  Last clearing of "show interface" counters 19:14:47
  Input queue: 0/375/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: fifo
  Output queue: 0/0 (size/max)
  5 minute input rate 1000 bits/sec, 1 packets/sec
  5 minute output rate 1000 bits/sec, 1 packets/sec
     253 packets input, 22764 bytes, 0 no buffer
     Received 0 broadcasts (0 IP multicasts)
     0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
     13497 packets output, 659844 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 unknown protocol drops
     0 output buffer failures, 0 output buffers swapped out

Checagem Huawei

Para validar o funcionamento no roteador Huawei NE40, a abordagem é a mesma do Cisco. 

Validando a conectividade via ICMP ping (lembrar de usar a origem loopback)

<~RT-HUAWEI-NE40> ping -a 203.0.113.66 198.51.100.2
  PING 198.51.100.2: 56  data bytes, press CTRL_C to break
    Reply from 198.51.100.2: bytes=56 Sequence=1 ttl=62 time=1 ms
    Reply from 198.51.100.2: bytes=56 Sequence=2 ttl=62 time=1 ms
    Reply from 198.51.100.2: bytes=56 Sequence=3 ttl=62 time=1 ms
    Reply from 198.51.100.2: bytes=56 Sequence=4 ttl=62 time=1 ms
    Reply from 198.51.100.2: bytes=56 Sequence=5 ttl=62 time=2 ms

  --- 198.51.100.2 ping statistics ---
    5 packet(s) transmitted
    5 packet(s) received
    0.00% packet loss
    round-trip min/avg/max = 1/1/2 ms

Checando se o IKEv2 estabeleceu na Fase 1:

[~RT-HUAWEI-NE40]dis ike sa
Slot 3, IKE SA Information:
Current IKE SA number: 2
-----------------------------------------------------------------------------
conn-id    peer                    flag                phase   ext    vpn
-----------------------------------------------------------------------------
1212       198.51.100.2          RD                  v2:2    -      vpna
1211       198.51.100.2          RD                  v2:1    -      vpna

[~RT-HUAWEI-NE40]dis ike sa verbose remote 198.51.100.2
Slot 3, IKE SA Verbose Information:
  ----------------------------
  Establish Time : 2022-12-03 09:49:43
  PortCfg Name   : Tunnel10
  IKE Peer Name  : teste
  Connection Id  : 1211
  Version        : v2
  Flow VPN       : vpna
  Peer VPN       : -
  Instance ID    : 0
  -----------------------------------------------
    Initiator Cookie        : 0xefaf822684f391e7
    Responder Cookie        : 0xdac01cc355e9c8ad
    Local Address           : 203.0.113.66
    Remote Address          : 198.51.100.2
    Peer Identity           : ip, 198.51.100.2
    Authentication Method   : PRE_SHARED
    Diffie-Hellman Group    : MODP_2048
    Encryption Algorithm    : AES256_CBC
    Authentication Algorithm: SHA1
    Integrity Algorithm     : SHA1_96
    Send/Receive Message_id : 0/2
    Remaining Duration      : 85680
    Reference Counter       : 2
    Flags                   : RD
    Is Backuped             : 0
    InBound SpeedLimit      : -
    OutBound SpeedLimit     : -
  -----------------------------------------------

Quando não aparecer nada na saída, ou ele não estiver em ready (RD), quer dizer que alguns dos parâmetros da Fase 1 não casaram. Confira em ambos os lados se eles estão de acordo.

Continuamos a validação na Fase 2:

[~RT-HUAWEI-NE40]  dis ipsec sa

IKE IP Security Association :
==================================
IPsec SA Information for Slot : 3
==================================

===============================
Interface: Tunnel10
===============================

  -----------------------------
  IPsec policy name: "teste"
  sequence number: 1
  instance id: 0
  mode: isakmp
  vpn: vpna
  ext: -
  -----------------------------
    connection id: 1212
    rule number: 0
    encapsulation mode: tunnel
    tunnel local: 203.0.113.66    tunnel remote: 198.51.100.2
    flow      source: 203.0.113.66/255.255.255.255 0-65535 47 0xFF
    flow destination: 198.51.100.2/255.255.255.255 0-65535 47 0xFF
    input/output security packets: 104/104
    input/output security kilobytes: 18/18
    input/output bandwidth limit drop packets: 0/0
    input/output bandwidth limit drop kilobytes: 0/0

    [inbound ESP SAs]
      establish: 2022-12-03 09:49:43
      spi: 776067029 (0x2e41d7d5)
      vpn: vpna said: 53
      proposal: ESP-ENCRYPT-256-AES ESP-AUTH-SHA1
      sa remaining key duration (kilobytes/sec): 1843182/2862
      max received sequence-number: 104
      udp encapsulation used for nat traversal: N

    [outbound ESP SAs]
      establish: 2022-12-03 09:49:43
      spi: 659060867 (0x27487883)
      vpn: vpna said: 54
      proposal: ESP-ENCRYPT-256-AES ESP-AUTH-SHA1
      sa remaining key duration (kilobytes/sec): 1843182/2862
      max sent sequence-number: 104
      udp encapsulation used for nat traversal: N

Por fim, vamos validar a conectividade em si, conferindo os contadores de tráfego! Mas agora por dentro do túnel já protegido!

[~RT-HUAWEI-NE40]dis inter Tunnel 900 | i packets
Info: It will take a long time if the content you search is too much or the string you input is too long, you can press CTRL_C to break.
Checksumming of packets disabled
    300 seconds input rate 64 bits/sec, 1 packets/sec
    300 seconds output rate 0 bits/sec, 0 packets/sec
    0 seconds input rate 0 bits/sec, 0 packets/sec
    0 seconds output rate 0 bits/sec, 0 packets/sec
    223 packets input,  22712 bytes
    227 packets output,  29534 bytes
      Unicast: 223 packets, Multicast: 0 packets
      Unicast: 227 packets, Multicast: 0 packets
[~RT-HUAWEI-NE40]ping -a 172.31.31.2 172.31.31.1
  PING 172.31.31.1: 56  data bytes, press CTRL_C to break
    Reply from 172.31.31.1: bytes=56 Sequence=1 ttl=255 time=22 ms
    Reply from 172.31.31.1: bytes=56 Sequence=2 ttl=255 time=22 ms
    Reply from 172.31.31.1: bytes=56 Sequence=3 ttl=255 time=22 ms
    Reply from 172.31.31.1: bytes=56 Sequence=4 ttl=255 time=22 ms
    Reply from 172.31.31.1: bytes=56 Sequence=5 ttl=255 time=21 ms

  --- 172.31.31.1 ping statistics ---
    5 packet(s) transmitted
    5 packet(s) received
    0.00% packet loss
    round-trip min/avg/max = 21/21/22 ms

[~RT-HUAWEI-NE40]dis inter Tunnel 900 | i packets
Info: It will take a long time if the content you search is too much or the string you input is too long, you can press CTRL_C to break.
Checksumming of packets disabled
    300 seconds input rate 64 bits/sec, 1 packets/sec
    300 seconds output rate 0 bits/sec, 0 packets/sec
    0 seconds input rate 0 bits/sec, 0 packets/sec
    0 seconds output rate 0 bits/sec, 0 packets/sec
    228 packets input,  23152 bytes
    232 packets output,  30074 bytes
      Unicast: 228 packets, Multicast: 0 packets
      Unicast: 232 packets, Multicast: 0 packets
[~RT-HUAWEI-NE40]

E a interface túnel se apresenta up, e funcional:

[~RT-HUAWEI-NE40]dis inter Tunnel 900 extensive
Tunnel900 current state : UP (ifindex: 112)
Line protocol current state : UP
Last line protocol up time : 2022-12-03 09:39:38
Description:
Route Port,The Maximum Transmit Unit is 1400
Internet Address is 172.31.31.2/30
Encapsulation is TUNNEL, loopback not set
Tunnel source 203.0.113.66 (LoopBack10), destination vrf vpna 198.51.100.2
Tunnel protocol/transport GRE/IP, key disabled
keepalive disabled
Checksumming of packets disabled
Current system time: 2022-12-03 10:03:48
    300 seconds input rate 64 bits/sec, 1 packets/sec
    300 seconds output rate 0 bits/sec, 0 packets/sec
    0 seconds input rate 0 bits/sec, 0 packets/sec
    0 seconds output rate 0 bits/sec, 0 packets/sec
    228 packets input,  23152 bytes
    0 input error
    232 packets output,  30074 bytes
    0 output error
    Input:
      Unicast: 228 packets, Multicast: 0 packets
    Output:
      Unicast: 232 packets, Multicast: 0 packets
    Input bandwidth utilization  :    0%
    Output bandwidth utilization :    0%

Com isto chegamos ao túnel estabelecido e funcionando entre o roteador Cisco IOS XE e o Huawei NE40! 

Configuração completa do Cisco

# interface WAN
interface Port-channel1.536
 description WAN-If
 encapsulation dot1Q 536
 ip address 198.51.100.2 255.255.255.252
 no shutdown

# PROPOSAL PARA fase 1
crypto ikev2 proposal ikev2proposal
 encryption aes-cbc-256
 integrity sha1
 group 14

# policy de fase 1
crypto ikev2 policy ikev2policy
 match fvrf any
 proposal ikev2proposal


# chaveiro com as PSK
crypto ikev2 keyring keys
 peer site_b
  address 203.0.113.66
  pre-shared-key UmaSenhaBemS3gur@
 !

# profile com o PEER
crypto ikev2 profile ikev2profile
 match identity remote address 203.0.113.66 255.255.255.255
 authentication remote pre-share
 authentication local pre-share
 keyring local keys

# confs da fase 2
crypto ipsec transform-set TS esp-aes 256 esp-sha-hmac
 mode tunnel

# Profile a ser usado na VPN (combina as confs de fase1 e fase2)
crypto ipsec profile VPN-IKEv2-IPsec-Profile
 set transform-set TS
 set ikev2-profile ikev2profile


# cria o tunnel GRE e aplica a protecao
interface Tunnel299
 description Tunnel Test Rafael
 bandwidth 10000
 ip address 172.31.31.1 255.255.255.252
 ip mtu 1400
 ip tcp adjust-mss 1360
 tunnel source Port-channel1.536
 tunnel destination 203.0.113.66
 tunnel protection ipsec profile VPN-IKEv2-IPsec-Profile
end

Configuração completa do Huawei

# Cria o service-instance-group (somente NE40)
service-location 1
 location slot 1
 commit

service-instance-group group1
 service-location 1

# PROPOSAL PARA fase 1
ike proposal 1
 encryption-algorithm aes-cbc 256
 dh group14
 authentication-algorithm sha1
 integrity-algorithm hmac-sha1-96

# ACL de tráfego interessante
acl number 3000
 rule 0 permit gre vpn-instance vpna source 203.0.113.66 0 destination 198.51.100.2 0


# policy de fase 1
ipsec policy teste 1 isakmp
 ipsec df-bit clear
 security acl 3000
 ike-peer teste
 proposal comfone
 log enable


# chaveiro com as PSK e peer
ike peer teste
 pre-shared-key <senha>
 ike-proposal 1
 remote-address 198.51.100.2
 sa binding vpn-instance vpna


# confs da fase 2
ipsec proposal comfone
 encapsulation-mode tunnel
 transform esp
 esp authentication-algorithm sha1
 esp encryption-algorithm aes 256


# Para uso de Gre over IPSEC com o local address sendo compartilhado, para não haver conflito, será necessario criar uma vrf.
ip vpn-instance vpna
 ipv4-family
  route-distinguisher 100:1
  apply-label per-instance
  vpn-target 111:1 export-extcommunity
  vpn-target 111:1 import-extcommunity

# Neste cenario o IP de saida será uma lo (atentar que a config bindando o tunel ipsec, será feita quando atrelar o tunel a esta interface)

interface LoopBack1
 ip address 203.0.113.66 255.255.255.255
 binding tunnel ipsec

# Lo atrelada a vrf, para uso no GRE do mesmo IP.
interface LoopBack10
 ip binding vpn-instance vpna
 ip address 203.0.113.66 255.255.255.255
 binding tunnel gre
 
 # Tunel GRE do Teste
interface Tunnel900
 bandwidth 10000
 mtu 1400
 ip address 172.31.31.2 255.255.255.252
 clear ip df
 tunnel-protocol gre
 source LoopBack10
 destination vpn-instance vpna 198.51.100.2


# Tunel IPsec do teste
interface Tunnel10
ip address unnumbered interface LoopBack1
tunnel-protocol ipsec
ipsec policy teste service-instance-group group1

# Rota para o peer na VPN-Instance para usar o Tunnel
ip route-static vpn-instance vpna 198.51.100.2 255.255.255.255 Tunnel10 198.51.100.2

Autores

Rafael Ganascim

Julian Eble

Referências

[1] Overview of GRE. NE40E-M2 Huawei.   https://support.huawei.com/hedex/hdx.do?docid=EDOC1100277532&id=EN-US_CONCEPT_0172355906&ui=1