top of page

GRE over IPSEC with IKEv2 and BGP: Fortigate vs Mikrotik

Actualizado: 20 mar 2020


Hace unos días tuve que realizar un túnel VPN contra un cliente, el cual debido a diversos motivos, me propuso hacerlo mediante un túnel gre-over-ipsec. Ya sé que este tipo de túneles no son de uso común, han sido reemplazados por los túneles IPSEC sobre interfaces, pero vamos a aprovecharlo para a ver cómo funcionan y que nos ofrecen.

ree

EL GRE (Generic Encapsulation Protocol) es un protocolo para generar túneles VPN que se utiliza para encapsular una amplia variedad de protocolos dentro de túneles IP. Normalmente se utilizar con IPSEC para encriptar los datos que transporta, todo esto produce un incremente de las cabeceras de datos y por tanto hay que tener cuidado con el MTU de los interfaces.


Caracteristicas del protocolo GRE:


- Protocolo desarrollado por CISCO, se usa para transportar paquetes de una red a otra dentro de un túnel

- Sigue el estándar IETF (RFC 2784) y usa el protocolo 47 cuando se encapsula en IP

- GRE tiene autenticación básica (por eso se suele usar junto a IPSEC)

- GRE no tiene ningún control de flujo

- Transporta otros protocolos no IP como Nettbios, Multicast y Broadcast, etc

- Incremente 24 bytes el tamaño del paquete( 20 bytes de cabecera IP y 4 bytes de cabecera GRE)

- Permiten que viajen dentro del túnel protocolos de enrutamiento


Caracteristicas del protocolo GRE over IPSEC:


- Ofrece la seguridad que no ofrece GRE: cifrado, autentificación e integridad

- Incrementa aún más el tamaño del paquete al utilizar encapsulado ESP, dependiendo de los algoritmos a usar el tamaño de las cabeceras es mayor o menor.

- ESP se encapsula usando 2 modos: tunnel y transport.




ree
Imagen ofrecida por CISCO SYSTEMS



Desarrollaremos el siguiente diagrama



- FORTIGATE


-Interfaces

config system interface
    edit "wan1"
        set vdom "root"
        set ip 1.1.1.1 255.255.255.252
        set allowaccess ping https ssh snmp
        set vlanforward enable
        set type physical
        set alias "WAN"
        set role wan
   edit "internal1"
        set vdom "root"
        set ip 192.168.1.1 255.255.255.0
        set allowaccess ping https ssh snmp
        set device-identification enable
        set lldp-transmission enable
        set role lan
end

- Túnel Ipsec

config vpn ipsec phase1-interface
  edit "VPN-Ipsec1"
        set interface "wan1"
        set ike-version 2
        set local-gw 1.1.1.1
        set peertype any
        set net-device disable
        set proposal aes256-sha256
        set nattraversal disable
        set remote-gw 2.2.2.2
        set psksecret greoveripsecpresharedkey
    next
end
config vpn ipsec phase2-interface
edit "VPN-Ipsec1"
        set phase1name "VPN-Ipsec1"
        set proposal aes256-sha256
        set pfs disable
        set replay disable
        set auto-negotiate enable
        set encapsulation tunnel-mode(default)/transport-mode 
        set protocol 47
        set src-subnet 1.1.1.1 255.255.255.255
        set dst-subnet 2.2.2.2 255.255.255.255
    next
end

- Interface Gre

config system gre-tunnel
    edit "gre1-over-ipsec"
        set interface "VPN-Ipsec1"
        set remote-gw 2.2.2.2
        set local-gw 1.1.1.1
    next
end

- Interface Túneles

config system interface
edit "gre1-over-ipsec"
        set vdom "root"
        set ip 10.199.199.1 255.255.255.255
        set allowaccess ping
        set type tunnel
        set remote-ip 10.199.199.2 255.255.255.252
        set interface "VPN-Ipsec1"
    next
end
 edit "VPN-Ipsec1"
        set vdom "root"
        set ip 1.1.1.1 255.255.255.255
        set allowaccess ping
        set type tunnel
        set remote-ip 2.2.2.2 255.255.255.255
        set interface "wan1"
    next
end

- Policies

Esta política se usa para que el tunel ipsec se ponga UP. En fortigate si no hay un politica creada el tunel no se pone UP.


config firewall policy
    edit 1
        set srcintf "VPN-Ipsec1"
        set dstintf "VPN-Ipsec1" 
        set srcaddr "all"
        set dstaddr "all"
        set action accept
        set schedule "always"
        set service "ALL"
    next
end
    

Estas son las políticas para permitir el tráfico entre la lan y el túnel y viceversa

  edit 2
        set srcintf "internal1"
        set dstintf "gre1-over-ipsec"
        set srcaddr "all"
        set dstaddr "all"
        set action accept
        set schedule "always"
        set service "ALL"
        set nat disable
    next
  end
 edit 3
        set srcintf "gre1-over-ipsec"
        set dstintf "internal1"
        set srcaddr "all"
        set dstaddr "all"
        set action accept
        set schedule "always"
        set service "ALL"
        set nat disable
    next

-Rutas estáticas

config router static
  edit 1
        set gateway 1.1.1.2
        set device "wan1"
    next
 edit 2
        set dst 2.2.2.2 255.255.255.255
        set device "VPN-Ipsec1"
    next

-BGP sobre el tunel GRE

config router bgp
    set as 65060
    set router-id 10.199.199.1   
     config neighbor
        edit "10.199.199.2"
            set activate6 disable
            set remote-as 65061
            set send-community6 disable
        next
    end
config redistribute "connected"
        set status enable
    end
 config redistribute "static"
        set status enable
    end
end

- MIKROTIK


-Interfaces


/ip address
add address=192.168.2.1/24 interface=ether5 
add address=2.2.2.2/29 interface=ether1 
add address=10.199.199.2/30 interface=gre2-over-ipsec

-Túnel Ipsec

/ip ipsec peer
add address=1.1.1.1/32 exchange-mode=ike2 local-address=2.2.2.2
name=VPN-IPSEC2
/ip ipsec profile
set [ find default=yes ] dh-group=modp2048,modp1536 enc-algorithm=aes-256 hash-algorithm=sha256
/ip ipsec proposal
set [ find default=yes ] auth-algorithms=sha256 enc-algorithms=aes-256-cbc pfs-group=none
/ip ipsec identity
add peer=VPN-IPSEC2 secret=greoveripsecpresharedkey
/ip ipsec policy
add dst-address=212.81.209.10/32 peer=VPN-IPSEC2 protocol=gre sa-dst-address=212.81.209.10 sa-src-address=212.81.221.163 srcaddress=212.81.221.163/32 tunnel=yes(default)/tunnel=no(transport)

-Interface Gre

/interface gre
add allow-fast-path=no !keepalive local-address=2.2.2.2 name=gre2-over-ipsec remote-address=1.1.1.1

-Rutas estáticas

/ip route
add distance=1 gateway=2.2.2.1
add distance=1 dst-address=1.1.1.1/32 gateway=2.2.2.1

-BGP

/routing bgp instance
set default as=65061 redistribute-connected=yes redistribute-static=yes router-id=10.199.199.2

/routing bgp peer
add name=gre remote-address=10.199.199.1 remote-as=65060 ttl=default

- TROUBLESHOOTING


- MTU


Los equipos negocian el MTU de interface GRE dependiendo del modo del túnel ESP y de los algoritmos que se usan para negociar el túnel. Como podemos ver en el ejemplo de en los ejemplos, cuando cambiamos de modo "tunnel" a modo "transport".

Podemos ajustar manualmente el tamaño del MTU en el túnel GRE en Mikrotik, sin embargo, en Fortigate solo se puede modificar el MTU sobre el interface físicos.


MTU Fortigate GRE - Encapsulation transport-mode

FG61E# diag netlink interface list | grep if=gre1-over-ipsec
if=gre1-over-ipsec family=00 type=778 index=65 mtu=1430 link=0 master=0

MTU Mikrotik GRE - Encapsulation transport-mode

[prueba@mikrotik]> interface gre print
Flags: X - disabled, R - running 
 0  R name="gre2-over-ipsec2" mtu=auto actual-mtu=1422 local-address=212.81.221.163 remote-address=212.81.209.10 dscp=inherit clamp-tcp-mss=yes dont-fragment=no allow-fast-path=no 

MTU Fortigate GRE - Encapsulation Tunnel-mode

FG61E# diag netlink interface list | grep if=gre1-over-ipsec
if=gre1-over-ipsec family=00 type=778 index=65 mtu=1414 link=0 master=0


MTU Mikrotik GRE - Encapsulation Tunnel-mode

[prueba@mikrotik] > interface gre print
Flags: X - disabled, R - running 
 0  R name="gre-tunnel1" mtu=auto actual-mtu=1414 local-address=212.81.221.163 remote-address=212.81.209.10 dscp=inherit clamp-tcp-mss=yes dont-fragment=no allow-fast-path=no 

- BGP


Comprobamos que el BGP se ha establecido y que importamos y exportamos las rutas del vecino en cada caso.


- MIKROTIK


[prueba@mikrotik] > ip route print
Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, 
b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit 
 #      DST-ADDRESS        PREF-SRC        GATEWAY     DISTANCE
 0 A S  0.0.0.0/0                          2.2.2.1         1
 2 ADC  10.199.199.0/30    10.199.199.2  gre2-over-ipsec   0
 4  Db  10.199.199.0/30                   10.199.199.1     20
 5 ADb  10.199.199.1/32                   10.199.199.1     20
9 A S  1.1.1.1/32                           2.2.2.1       1
10 ADb  192.168.1.0/24                      10.199.199.1   20
11 ADC  192.168.2.0/24     192.168.2.1     ether5          0
12 ADC  2.2.2.0/30           2.2.2.2        ether1         0
[prueba@mikrotik] routing bgp peer print
Flags: X - disabled, E - established 
 #   INSTANCE             REMOTE-ADDRESS         REMOTE-AS      
 1 E default              10.199.199.1           65060                                  

- FORTIGATE

FG61E# get router info bgp summary 
BGP router identifier 10.199.199.1 local AS number 65060
BGP table version is 4
3 BGP AS-PATH entries
0 BGP community entries

Neighbor      V AS MsRcvd MsSent TblVe rInQ OutQ Up/Down St/Rfrc
10.199.199.2  4 65061  239  236   3    0  00:24:01        3

Total number of neighbors 1
FG61E # get router info routing-table all
Routing table for VRF=0
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
       O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
       * - candidate default

S*      0.0.0.0/0 [10/0] via 1.1.1.2, wan1
C       10.199.199.0/30 is directly connected, gre1-over-ipsec
C       10.199.199.1/32 is directly connected, gre1-over-ipsec
S       10.199.199.2/32 [10/0] via 10.199.199.2, gre1-over-ipsec
B       192.168.2.0/24 [20/0] via 10.199.199.2 (recursive via 10.199.199.2), 00:24:01
C       192.168.1.0/24 is directly connected, internal1
C       1.1.1.1/30 is directly connected, wan1
C       2.2.2.2/32 is directly connected, vpn-ipsec1

En futuros articulos veremos la diferencia con los túneles IPSEC over GRE.


 
 
 

Comentarios


Publicar: Blog2_Post

Formulario de suscripción

¡Gracias por tu mensaje!

  • Twitter

©2020 por SecuriBlog. Creada por i.urrutxi@gmail.com

bottom of page