Funcionalidad NAT/BINAT (Network Overlapping) para IPSEC en pfSense

Versión de pfSense:

A partir de la versión 2.1, pfSense estrenó una nueva funcionalidad muy solicitada por los usuarios de la comunidad, que permite el nateo en origen de las redes presentadas en el dominio de encripción de las VPN IPsec.

Esta funcionalidad resuelve algunos issues con respecto al solapamiento (OverLapping) de redes en VPN IPsec, cuando se quieren vincular dos redes que utilizan la misma numeración, lo que generaría problemas de ruteo.

Para aclarar algunas dudas con respecto al funcionamiento de este feature, es importante señalar que el mismo, lo que permite es presentar la red al peer remoto, con otra numeración; pero no permite el nateo de una red que recibamos de otro peer. Entonces, si nuestra red es 192.168.0.0/24, al igual que la del otro extremo, lo que podemos hacer es presentar la red al peer remoto con el segmento que queramos, por ejempo 10.0.0.0/24, entonces en el otro extremo, para acceder al host 192.168.0.24, deberá hacerlo al host 10.0.0.24.

Hay ciertos vendors (como Cisco) que mejoran aún más esta funcionalidad y permiten que aunque el otro extremo no nos mande la red nateada, podamos hacerlo al recibirla; esta funcionalidad aún no está soportada en pfSense.

Igualmente es más que interesante aprovechar estas configuración, para poder hacer funcionar una VPN donde las numeraciónes se superpongan y no sea posible un readdressing.

Escenarios Válidos:

  • Nuestra Red es 192.168.0.0/24 y queremos conectar con 2 clientes que tienen la misma numeración en los que tenemos instalados pfSense. Podemos configurar los dos pfSense de los clientes para que nos presenten las redes vía IPSEC con numeraciones diferentes por ejemplo 192.168.1.0/24 y 190.168.2.0/24. Desde nuestra Red accederemos a dichos clientes utilizando la numeración nateada, y si queremos que los clientes accedan a nuestra red, presentaremos nuestro segmento también nateado.

  • Queremos que un cliente acceda a nuestra Red que es 192.168.0.0/24, pero el tiene el mismo segmento de red configurado en su lado; sin embargo no tenemos control de su firewall. Podemos presentar nuestra red nateada a otro segmento e indicar que pueden acceder utilizando dicho segmento. Nosotros no podremos acceder a su red.

Escenarios NO Validos:

  • Queremos acceder a la Red de un cliente que tiene nuestra misma numeración, sin embargo no podemos solicitarle que nos natee su Red (porque no sabe hacerlo, o porque su firewall no lo soporta), y claro, no tenemos gestión de su Terminador de Túneles. En este caso, la funcionalidad de pfSense nos permitirá enlazar la VPN, pero no tendremos acceso desde nuestra Red a sus hosts, ya que sus hosts tiene la misma numeración que los nuestros. Sin embargo, ellos si podrán acceder a nuestros hosts utilizando la numeración que definimos en la configuración de NAT/BINAT en el sentido contrario.

Configuración de pfSense para NAT/BINAT:

Vamos a mostrar un escenario en el que queremos configurar una VPN entre dos pfSense, los cuales cada uno tienen una interface LAN con la red 192.168.0.0/24 (misma red en ambos extremos), y su otra interface WAN donde manejan el addressing público.

RED1 < PFSENSE1 < WAN > PFSENSE2 > RED2

RED 1 y RED 2 originalmente son 192.168.0.0/24.

Las redes Nateadas serán:

RED 1 –> 172.16.1.0/24
RED 2 –> 172.16.2.0/24

Este escenario sería el que mayor configuración en ambos extremos requiere, ya que deberemos natear ambos para que funcione, en casos más sencillos donde sólo haya que natear un sólo extremo (porque el acceso que necesitamos es únicamente de un lado hacia el otro) esta configuración también servirá, configurando sólo el extremo necesario.

Configuración en PFSENSE1

En el Menú de VPN, vamos a IPSec, y luego al simbolito + para agregar un tunel.

En primer lugar se setean lo parámetros de la FASE 1.

Configuramos la interface outside del pfsense para levantar la VPN (la que mira a internet) y el peer remoto (ip pública o url) y si queremos una descripción:

Luego siguen las opciones de Autenticación de Fase 1. Esta configuración debe ser igual en ambos extremos, no ahondaremos en este post sobre las más seguras o más eficientes configuraciones, simplemente recordar que deben ser exactamente iguales para que funcione:

Y por último las opciones avanzandas según nuestras necesidades. Para conectar 2 pfSense, la siguiente configuración es óptima y es recomendable que también sea igual en ambos extremos:

En la configuración de la FASE 2, es donde se configuran los parámetros de numeración y correspondiente NAT/BINAT:

Para hacerlas, una vez creada la Fase 1, expandimos las configuraciones de Fase 2 y vamos al + correspondiente:


La primer parte de la configuración es la más relevante y es donde se configura el dominio de encripción, el nateo y la red remota.

A Saber:

Local Network –> Es la red que vamos a tunelizar, la red real, que queremos que el otro extremo tenga acceso. En nuestro caso es la RED1 (192.168.0.0/24).

Podríamos tener más de una red configuradas en nuestro firewall (más de una interface), por lo que debemos elegir la que nos interese encapsular, o podríamos presentar únicamente una parte de nuestra red, por ejemplo una única /25 de nuestra /24, o únicamente 1 host. Podemos escribir la red en formato Network, en formato Host, o seleccionar la subnet correspondiente a la Interface que vamos a configurar. En este caso vamos a Seleccionar “LAN Subnet” ya que así se llama en nuestro pfSense, que sería el equivalente a escribir 192.168.0.0/24. Es lo mismo escribirla a mano o seleccionarla con el nombre de la interface, pero para mi gusto queda más prolijo y claro seleccionarla.

In case you need NAT/BINAT on this network specify the address to be translated –> Esta configuración hace el Nateo en origen. La red anteriormente especficada (192.168.0.0/24), se presentará al otro Peer como la que definamos aca.

Es importante que si en Local Network escribimos un host, aca escribamos otro host, y si lo escribimos una red, la que setiemos acá sea del mismo tamaño ya que sino habrá problemas. (salvo que queramos presentar toda una red como un sólo host, pero esto no permitirá la comunicación bidireccional, y no es a lo que apuntamos en este post.). Por lo tanto, en este parámetro, setearemos otra red el mismo tamaño (/24), que en este caso será 172.16.1.0/24.

Remote Network –> Acá especificaremos la red que nos está presentando el otro extremo. En nuestro escenario, la red remota es 192.168.0.0/24; sin embargo, como en PFSENSE2 la vamos a presentar nateada también, la que vamos a configurar aca, es la red Nateada que en este caso es 172.16.2.0/24.

Estas 3 configuraciones son los que harán funcionar la VPN de manera correcta. En el caso de que estemos configurando una VPN sin NAT/BINAT, el segundo parámetro no lo configuraremos, y en Remote Network, configuraremos la Red Original, que no deberá solaparse con nuestra Red.

Siguen las opciones de Seguridad (SA/Key Exchange). Lo único que diremos en este Post es que deben ser exactamente iguales en cada uno de los extremos. La opción de ping host, si la necesitamos, mantiene la VPN activa aunque no haya tráfico, pingeando un host específico automáticamente que debe ser accesible por el túnel:

Configuración en PFSENSE2

PFSENSE2 se debe configurar en el otro extremo de igual manera en cuanto a Fase 1 (con el peer remoto como la WAN de PFSENSE1) y Fase 2 con las opciones de Red invertidas para que la VPN levante de manera correcta.

Local Network: 192.168.0.0/24
NAT/BINAT: 172.16.2.0/24
Remote Network: 172.16.1.0/24

Una vez establecida la VPN, se podrá acceder desde la RED1 a la RED2 mediante la Red Nateada 172.16.1.0/24 y viceversa, de la RED2 a la RED1 mediante la Red Nateada 172.16.2.0/24. Esta configuración permite el diálogo bidireccional sin ningún problema.

El nateo de RED a RED, es correlativo, entonces, por ejemplo, los hosts serán:

192.168.0.1 > 172.16.1.1
192.168.0.2 > 172.16.1.2
192.168.0.3 > 172.16.1.3
192.168.0.4 > 172.16.1.4
etc…

Recordar que es necesario además la configuración de los permisos (ACLS) correspondientes para permitir el paso del tráfico que requiramos, o sea, se debe configurar en Firewall -> Rules -> IPSec, las reglas que queramos (o un any), siempre recordando que dicha configuración se aplica en la interface de origen, por lo tanto en PFSENSE1 configuraremos reglas con origen 192.168.0.0/24 y destino 172.16.1.0/24, y en PFSENSE2, reglas con origen 192.168.0.0/24 y destino 172.16.2.0/24.

Links Relacionados:

Gabriel Soltz

Read more