Una de Cisco ASA, Google Cloud Platform y BGP

Israel Santana
Edosoft
4 min readMar 30, 2018

--

Hace poco, nos entró una solicitud interesante. Lo que nos estaban pidiendo, no era seguir un simple manual, aunque tampoco era inventar un cohete :-(. La considero interesante porque nos proponía un pequeño reto, y sobre todo aportaba valor a un cliente.

Nuestro punto de partida era el siguiente, teníamos un equipamiento Cisco ASA 5508 y conexión con GCP (Google Cloud Platform) mediante un túnel IPSEC. Todo funcionaba bastante bien, pero se había introducido un nuevo requisito. Nos estaban pidiendo, permitir acceder desde varias redes locales, mediante el túnel, a su infraestructura en GCP.

Análisis

Nuestra primera acción, fue consultar la documentación de google (https://cloud.google.com/vpn/docs/how-to/interop-guides), con el fin de verificar inter operatividad. Ahí, teníamos un ejemplo de un Cisco ASA 5505, el cual, sólo permitía túneles basado en políticas (policy based). El problema que nos encontramos, era que por una incompatibilidad con Cisco, no podíamos pasar más de una red a la hora de hacer la asociación. Esto nos bloqueaba, no dándonos ninguna opción. Podríamos hacer algún tipo de “cambalache” cambiando las máscaras de las redes, no siendo nada elegante, ni profesional.

Según la documentación oficial, tendríamos que haber cambiado de dispositivo en el lado del cliente. Eso hubiese ocasionado un gasto extra, además de retrasar tiempos, planificación, etc ….

Existía documentación de otros modelos de cisco, que permitía otros tipos de túneles. Tenía dos opciones con GCP:

  • Tunnel based (rutas estáticas)
  • BGP (rutas dinámicas)

Tenerlo de manera dinámica, sólo nos costaba un pequeño esfuerzo extra para montar un cloud router. Pero con ese pequeño esfuerzo, conseguíamos una serie de ventajas:

  • Poder cambiar las redes que atraviesan el túnel sin tener que borrar el túnel y volver a crearlo.
  • Disponer de una arquitectura, que esté preparada para tener backup de conexiones, en la cual, sus rutas, se configuren de forma automática.

Implementación

Primero comprobamos que el Cisco era capaz de trabajar con BGP. Al ver que era compatible, ya nos pusimos “manos a la obra”.

Voy a poner aquí la parte de la configuración referida al túnel con GCP. Suponemos que ya tenemos nuestro Cisco configurado, tiene comunicación con las dos redes internas y está configurado a internet con una ip pública (GCP no permite net-trasversal).

Nuestro punto de partida es:

Las dos redes internas son:

  • 192.168.1.0/24
  • 192.168.2.0/24

La red de GCP es:

  • 10.132.0.0/20

La ip de salida del Cisco es:

  • 193.143.23.12 (es totalmente inventada)

La ip del router de VPN de GCP es:

  • 204.23.43.56 (es totalmente inventada)

La clave compartida de ISPEC es:

  • EstaEsUnaClaveMala (que nunca deberías usar)

Para el BGP:

  • El identificador del router de GCP es 65001
  • Nuestro peer se compone de:
  • IP GCP: 169.254.0.5
  • IP Peer: 169.254.0.6
  • Identificador BGP peer: 65003

Creamos unos objetos de red, simplificando la configuración:

object-group network gcp-networks

network 10.132.0.0 255.255.240.0

exit

object-group network on-premise-networks

network 192.168.1.0 255.255.255.0

network 192.168.2.0 255.255.255.0

exit

Hacemos un access-list para permitir el tráfico desde GCP hacia esas redes (no he creado un access-list inverso, al no ser necesario en mi caso).

access-list gcp-filter extended permit ip object-group gcp-networks object-group on-premise-networks

De esta manera, nos hemos ahorrado tener que escribir 1 access-list, porque queremos acceder de 2 redes a 1, pero si el acceso fuese de 5 redes a 4 redes, tendríamos que escribir 20 access-list. ¿ Ves ahora la ventaja ? Además nuestra configuración se queda mucho más limpia para leerla, entenderla y mantenerla. Recuerda, una configuración se escribe una vez y se lee n veces.

Continuamos con la primera fase de IPSEC (outside es la interfaz de salida).

crypto ikev2 policy 100

encryption aes-256

integrity sha512

group 14

prf sha

lifetime seconds 86400

exit

crypto ipsec ikev2 ipsec-proposal gcp

protocol esp encryption aes-256

protocol esp integrity sha-1

exit

group-policy gcp internal

group-policy gcp attributes

vpn-filter value gcp-filter

vpn-tunnel-protocol ikev2

exit

tunnel-group 204.23.43.56 type ipsec-l2l

tunnel-group 204.23.43.56 general-attributes

default-group-policy gcp

exit

tunnel-group 204.23.43.56 ipsec-attributes

isakmp keepalive threshold 10 retry 3

ikev2 remote-authentication pre-shared-key EstaEsUnaClaveMala

ikev2 local-authentication pre-shared-key EstaEsUnaClaveMala

exit

no crypto isakmp nat-traversal

crypto ikev2 enable outside

De esta forma, ya podríamos hacer “show crypto ikev2 sa”, viendo la asociación (siempre y cuando tengas configurado la parte de GCP).

Ahora vamos con la segunda fase.

crypto ipsec profile profile-gcp

set ikev2 ipsec-proposal gcp

set pfs group14

set security-association lifetime seconds 10800

exit

interface Tunnel1

nameif TunGCP

ip address 169.254.0.6 255.255.255.252

tunnel source interface outside

tunnel destination 204.23.43.56

tunnel mode ipsec ipv4

tunnel protection ipsec profile profile-gcp

exit

En este punto, tenemos el túnel levantado, sin ninguna red enrutada, para eso, debemos hacer lo siguiente:

router bgp 65003

bgp log-neighbor-changes

timers bgp 10 30 0

address-family ipv4 unicast

neighbor 169.254.0.5 remote-as 65001

neighbor 169.254.0.5 description BGP session over Tunnel

neighbor 169.254.0.5 activate

network 192.168.1.0 mask 255.255.255.0

network 192.168.2.0 mask 255.255.255.0

no auto-summary

no synchronization

exit-address-family

En este momento, el túnel está 100% operativo y a nuestro cliente contento, que no olvidemos, es lo más importante.

A continuación, expongo un ejemplo completo de configuración. En este laboratorio, usé una fibra de telefónica, por eso uso PPoE, enrutando sólo una red.

Por favor, me gustaría oír tus comentarios, siempre estamos en un proceso de mejora continua.

Referencias:

--

--