En este post vamos a intentar de forma simplificada como configurar una Red Hub and Spoke con conexión a nuestro red On-Prem y no morir en el intento.

Requisitos
Para crear nuestra red Hub and Spoke necesitaremos unos requisitos previos para nuestro entorno como son los Firewall.
- Suscripción de Azure
- Pfsense en On-Prem
- Pfsense en Azure
Para la instalación de un PFsense en Azure sin coste adicional, tendremos que generar nuestra maquina virtual en un entorno de Hyper-V y luego subirlo a nuestra suscripción de Azure para ello podemos utilizar los siguientes post.
Mordor Blog – Instalar PFSense en Azure
Preparación Virtual Networks y Subnets
Lo primero sera crearnos los Resource Groups uno para la red Hub y otro para Spoke

Virtual Networks
Crearemos nuestras virtual networks y crearemos las distintas subnets que vamos a utilizar, en mi caso utilizare los siguientes rangos:
- 192.168.0.0/18 – Red On-Prem
- 192.168.248.0/21 – Red Hub
- 192.168.128.0/21 – Red Spoke
Subnets Hub
Para la red Hub necesitaremos de 3 a 4 subnets (segun el firewall que se utilice) necesitaremos las siguientes subnet:
- 192.168.251.0 – Externa o Untrust es la que esta conectada a internet.
- 192.168.250.0 – Interna o Trust es la que esta conectada a la red interna
- 192.168.254.0 – GatewaySubnet red para las conexion VPN con On-Prem
- xxx.xxx.xxx.xxx – Management red de administración para pfsense no hace falta
Para segun que tipo de Firewall, necesitaremos una red para la administración del Firewall. (por ejemplo cuando despliegas Palo Alto la maquina virtual lleva 3 vNics).
En el caso de Azure, todo el trafico interno pasa por una vNic y con enrutamientos, no se realiza como en los Firewall tradicionales con multiples Nics y cada una conectada a una red distinta.

Para las subnet podremos utilizar redes de mascara 29 nos quedaran libres 3 IPs, dependiendo de que servicio vallamos a utilizar balanceadores, multiples VPNs, …
Subnets Spoke
Para las Redes Spoke, crearemos tantas subnets como necesitemos segun nuestra segmentación.

Azure VPN S2S
Lo primero que haremos es crear nuestra conexion VPN Azure, para nuestro entorno usamos la Basic tiene una limitación de 100 Mb de ancho de banda, 10 tuneles S2S y 128 P2S el coste segun region son 23€/26$ mas la transferencia de datos a 0.07€/$ el Gb.
Virtual Network Gateway

Crearemos un resource de Virtual network Gateway.

Seleccionamos nuestra configuración:
- Name: Nombre del resource
- Region: Misma que el Resource Group
- Gateway type: VPN
- VPN type: Route based
- SKU: Basic
- Generation: Generation1
- Virtual network: La que creamos antes
- Gateway: Red para los Gateway.

Necesitaremos una nueva IP publica.
Crearemos nuestro Gateway este proceso puede tarda hasta 1 hora mucha paciencia.

Local network Gateway
Crearemos un recurso de local network Gateway, en este recurso se especificara la IP o FQDN de destino (IP publica de On-Prem) y la red de ON-Prem


Introducimos el Endpoint IP/FQDN lo que mejor nos venga.
En Address space, las redes de ON-Prem que vamos a enrutar.

Connection
Una vez que tengamos nuestro Virtual Gateway, necesitaremos crear el Connection y Local Network.
Dentro de nuestro Virtual Gateway, iremos a la opción de Connections en Settings y pulsamos en Add.


Rellenamos la información necesaria:
- Name, nombre de la connection.
- connection type, Site-to-site(IPsec)
- Local network gateway, seleccionamos el que hemos creado en el paso anterior.
- Shared key (PSK), nuestra password para la conexion que luego introduciremos en el Firewall.
- Lo demas no lo tocamos, con la VPN Basic solo podemos utilizar IKEv2.

PFSense VPN
Ahora toca configurar nuestro Firewall PFSense para que se conecte contra Azure, vamos al lio.
Abrimos nuestro Firewall On-Prem desplegamos VPN y pinchamos en IPsec

Fase 1
Primero haremos la Fase 1, pulsamos en “Add P1”.

En General Information:
Key Exchange version IKEv2, como comentamos anteriormente con Azure VPN Basic es la unica que soporta.
Interface, WAN la que tiene acceso a internet.
Remote Gateway, IP del Gateway de Azure.

En Phase 1 Proposal (Authentication):
Pre-Shared Key, la password igual que la de Azure.
En Phase 1 Proposal (Encription Algorithm):
- Algorithm: AES
- Key length: 256 bits
- Hash: SHA256
- DH Group 2(1024 bits)


En Expiration and Replacement:
Life Time, lo ponemos a 10800.
Salvamos los cambios.
Fase 2
Una vez tengamos la Fase 1, aparecera la opcion de “Show Phase 2 Entries” pulsamos en el + y pulsamos en “+ Add P2”


Empezamos por la primera Tabla “General Information”.
- Mode, Tunnel IPv4
- Local Network, Podemos seleccionar una de las Subnet del FW o seleccionamos Network e introducimos el rango de red para enrutar.
- Remote Network, el rango de red que tenemos en azure y que vamos a enrutar.

Siguiente Tabla “Phase 2 Proposal (SA/Key Exchange)”.
- Protocol: ESP
- Encryption Algorithms: AES – 256 bits
- Hash Algorithms: SHA1
- PFS key Group 2(1024 bits)

En “Expiration and Replacement”, ponemos “Life Time” a 3600

Repetiremos la Fase 2 para cada red que necesitemos enrutar.
Resultado
Nos debera quedar algo parecido a esto.

Picharemos en el desplegable de Status e IPsec, podremos ver si nuestra VPN se ha establecido.

Y en nuestro Gateway de Azure que aparezca “Connected”.


Peering Hub-Spoke
Vamos a conectar nuestra red de Hub y Spoke, para esto usaremos la opción de Peering/emparejamiento dentro de nuestras Virtual Networks.

Abrimos una de nuestras virtual network origen o destino, vamos a peering y “+ Add”

En la primera seccion “This virtual network”, especificamos el nombre del peering en esta red.
Permitimos el trafico.
VN gateway o Route Server a “None” el firewall se encarga de esto.

En la segunda seccion “Remote Virtual Network” misma configuración, pero tendremos que seleccionar la suscripcion y la Virtual Network de destino.
Repetiremos el proceso para tantas redes Spoke como necesitemos. Una vez configurado nos quedara creado el peering y en status Connected.


Route Table (RT)
Ahora llegamos al punto que da dolor de cabeza los enrutamientos de las redes pero vamos a ver si lo hacemos facil.
Por defecto, en Azure todas las redes que se crean estan todas enrutadas unas con otras y lo que tenemos que hacer es romper esos enrutamientos.
Necesitaremos crear un servicio de RT para cada Subnet que tengamos, 3 para Hub (Interna y externa, Gateway) 1 para cada subnet Spoke

Solo tendremos que especificar el Resource Group y el nombre de la route table.

Ver Rutas subnet
Para poder ver que rutas se aplican a la subnet que queremos modificar, podremos verlo en nuestra RT pinchando en “Effective Routes” (Sera necesario tener una maquina en la Subnet)
Podremos ver la lista que se nos aplican seran demasiadas, tiene muchas redes internas de azure y conexion a internet.

Asociar Subnet
Lo primero que haremos será asociar nuestra RT a la subnet, esta acción se realizar para cada RT igual.

Abriremos RT y pincharemos sobre “Subnets” y pincharemos en + Associate.

Seleccionaremos la Virtual Network y subnet a la que lo asociamos.
HUB – Route Table Externa
Ahora modificaremos la tabla de rutas que estan por defecto, para la red externa unicamente necesitaremos “DENEGAR” el enrutamiento a todas nuestra redes que estan detras del FW.

Pincharemos en Routes y “+ Add”.

Ponemos un nombre.
Introducir el rango de Red
En Next Hop type a None (Para Denegar)
Repetiremos el proceso para todas nuestra redes.

Si revisamos nuestra tabla de rutas, deberian aparecer duplicadas nuestra redes una de ella con INVALID que es la de Azure y otra Activa que es nuestra nueva ruta a None.

HUB – Route Table Interna
Para la red interna del FW cambia un poco, Denegaremos el acceso a la subnet externa y todo lo demas a la ip interna del FW.

Crearemos una ruta para denegar la red externa (en mi caso 192.168.251.0/24) con NONE igual que en la red externa.

Para enviar todo al FW haremos como en la foto:
Introducimos un nombre.
Red todas 0.0.0.0/0 (por defecto todo lo enviara a nuestro FW)
Type: Virtual Appliance.
Next hop: IP interna del FW 192.168.250.254
Nos deberia quedar una tabla de rutas pareceda ha esto, 0.0.0.0/0 hacia nuestro FW, tendremos la 192.168.248.0/21 que es la virtual network y por ultimo la denegación de la red externa.

Tambien podriamos denegar toda la virtual network 192.168.248.0/21 y crear una ruta para la virtual network 192.168.250.0/24, todo dependera de necesidades y gustos.


HUB – Route Table Gateway
Igual que en la Red interna tendremos que denegar el acceso a la red Externa y en esta ocasión agregaremos rutas para las redes de Spoke.

Spoke – Route Table
Para las redes de spoke el proceso sera parecido al de Red interna, lo primero deberemos redireccionar todo (0.0.0.0/0) a la IP interna del FW, redireccionamos la VNET hacia el FW para que las distintas redes de spoke pasen por el mismo, creamos la subnet del spoke como virtual network y denegaremos el acceso a la red externa.


Repetiremos la tabla de rutas para cada subnet de Spoke cambiando los rangos de red correspondiente.

PFSENSE Static Routes
En nuestro Pfsense de Azure, tendremos que decirle que las red de On-Prem, spokes, tendra que preguntar al gateway de Azure que sera la IP 1 de rango interno en mi caso 192.168.250.1.
Este paso es recomendable configurarlo antes de subir el FW a azure para no perder conexión, si no conseguis acceso se puede crear una maquina en la red interna para conectarnos a la consola.

FIN
Con esto deberiamos poder enrutar nuestras redes por el camino correcto, ahora solo queda probar y poner vuestra rutas como mejor convenga, o extender con multiples FW azure y distintas Zonas geograficas.
Enrutamiento a travez de los dos FW On-Prem y azure hasta la maquina.

Excelente articulo!!!! Muy util y muy bien explicados los pasos, para poder realizarlos fácilmente.