PfSense 2.5.2 Paquete Wireguard Configurar VPN Usuarios Moviles Full Tunnel y Split Tunnel.

Que tal, aqui regresando con Wireguard en Pfsense, como sabran muchos, esta aplicacion esta dando mucho de que hablar por su simplicidad y pocas lineas de codigo lo cual lo hace que su auditoria sea muy sencilla.

Por estas razones se habla de que supera en desempeño a OpenVPN y sus miles de lineas que es lo que ellos recalcan mucho e IPSEC por sus complejidades para configurar.

Tiempo atras, aqui lo hable en mi blog por que yo mismo agrege en mi canal de youtube 2 videos sobre como crear VPN’s con Wireguard tanto PTP como para usuarios moviles, los cuales aqui dejo los links, ya que ahi hablo mucho de como funciona Wireguard desde mi punto de vista.

Lo mas curioso fue que al poco tiempo el equipo de Netgate quien esta dando soporte a Pfsense por el lado comercial envia una nota donde sacaban a Wireguard de Pfsense hasta nuevo aviso por ciertas comentarios del creador de Wireguard, se hizo una novela buena ahi.

Bueno ya es algo del pasado, posterior a esto, muchos nos quedamos con la boca abierta ya que fue algo asi como de ,hoy existes, mañana no, muchos teniamos ya VPN’s levantas con Wireguard por su simplicidad para hacerlo, es como levantar una conexion ssh realmente.

Despues de toda esa novela que traian, una persona de nombre “Christian McDonald” tomo el codigo y lo empezo a trabajar hasta el punto de poder crear un paquete, instalarlo en Pfsense, empezar a probar e ir mejorando el codigo, tratando de crear un buena implementacion de Wireguard, aqui esta su canal por si gustan revisar sus videos.

Christian McDonald

Posterior a esta evolucion, Netgate volteo y lo cobijo, formando hoy parte de su equipo para que siga trabajando en esta nueva version de Wireguard, toda la buena vibra para Christian desde la Baja norte de Mexico.

Si no han visto mis videos cuando Wireguard formaba parte del kernel y eramos felices, aqui se los dejo, si tiene oportunidad veanlos, ya que habra informacion general de Wireguard que no a cambiado en cuanto a su funcionamiento, donde existen los cambios es en como se esta llevando esta nueva version dentro del GUI, cambia algo pero nada extremo, les recomiendo los videos para que se empapen de informacion.

Wireguard VPN P2P Video YouTube

Wireguard VPN Usuarios Moviles Video

Ahora , si no ven los videos no hay problema, ya que aqui les dire el paso a paso, iniciamos.

Antes de continuar, los requisitos si usan los mismo sistemas:

PfSense 2.5.2+

1 Equipo con Windows 10

1 Telefono Android

Los equipos de prueba deben estar fuera de la red de Pfsense que sera quien administrara Wireguard, recuerden que con esta aplicacion ya no existe para ellos el modelo cliente-servidor, en su documentacion hablan de 2 equipos o nodos que desean intercambiar informacion, asi de simple, aqui seran 2 sistemas fuera de la red tipo home office, que requieren comunicarse con la red de la sucursal matriz que en este caso esta protegida por PfSense, si nos vamos a la analogia clasica tipo Cliente-Servidor como la presentan IPSEC o OpenVPN, PfSenses es el servidor y tanto Windows 10 como Android los equipos remotos son los clientes asi sera mas sencilla entenderlo.

Veamos la siguiente imagen con la cual vamos a trabajar.

Figura 1.

Si observamos la imagen anterior, los equipos de la derecha que estan fuera de la red matriz, una vez que se establezcan las VPN’s, podran acceder a los recursos detras de Pfsense, ese equipo Windows10 de la sucursal matriz, tiene el Servicio de Remote Desktop y tiene directorios compartidos habilitado, asi que vamos a conectarnos a el por el tunel con Wireguard.

Full Tunnel vs Split Tunnel.

Si ponen atencion en la figura 1 podran observar que el equipo remoto Windows 10 localizado en San Ignacio BajaSur tiene una etiqueta que dice “Full Tunnel” y tiene como red del tunel 10.10.90.0/25.

Cuando se habilita un equipo con esta funcion, todo el trafico que genere el equipo se enviara por la VPN, de esta manera podemos controlar esa comunicacion, eso si tiene su penalizacion, ya que al mover todo trafico por la VPN, llamese leer correos, estatus facebook, youtube y los recursos que deseamos acceder en la sucursal matriz se movera por el tunel, quien recibira ese impacto de ancho de banda sera la pipa de Pfsense.

Ahora el equipo Android es “Split Tunnel” con la red asignada 10.10.100.0/25, aqui es todo lo contrario, solo el trafico que se requiera para acceder a los recursos de la red de la sucursal matriz usaran el tunel, por ejemplo, se deseamos acceder a el remote desktop del equipo windows10(192.168.10.99) de la sede, cruzara por el tunel, si el usuario accede a YouTube desde su celular usara el ancho de banda de su provedor de Internet o su compañia celular, no gastara el ancho de banda de la VPN, si notan la diferencia?

Tunel #1 Full Tunnel todo cruza por la VPN

Tunel #2 Split Tunnel solo cruza por la VPN lo que acceda a la red(es) privada(s) del otro lado del tunel.

Estas 2 configuraciones en las VPN tradicionales llamese IPSEC u OpenVPN existen, entonces Wireguard no es la excepcion.

Ahora si, vamos a iniciar la configuracion.

Paso 1) Instalar Wireguard en Pfsense.

Esto es lo mas sencillo de todo, hacemos lo siguiente:

Menu => System=>Package Manager.

Buscamos Wireguard, una vez localizado lo instalamos.

Figura 2.

Figura 3.
Figura 4.

Ya con esto tenemos el paquete listo para usarse dentro de Pfsense.

Figura 5

Paso 2) Generar Llaves de Servidor y Clientes para Full Tunel

Como les mencione anteriormente, Wireguard usa la analogia de una comunicacion SSH PKI o sea de llave publica, donde se generan un par de llaves( privada y publica), cuando un cliente1 se quiere comunicar con cliente2, el 2do registra la llave publica del 1ro, asi cuando el cliente1 desea acceder a el 2do, cliente1 lo valida con su llave privada y si todo en orden se inicia la comunicacion.

Esta es la parte mas tediosa de todo esto y sera en base a cuantos nodos desean dar de alta(Peers), cada uno debe tener su par de llaves y por favor no usen la misma para todos por que no tiene caso hacerlo, se pierde la garantia de antenticidad de la comuncacion.

Wireguard dentro de Pfsense tiene opciones para crear estas llaves, sin embargo para mi se me hace mas sencillo usar paginas como https://www.wireguardconfig.com/ para crear todas las llaves requeridas y crear mis archivos de configuracion.

Ustedes en su momento tendran la oportunidad de hacerlo a su manera, aqui va usando mi proceso.

a) Accedemos al sitio https://www.wireguardconfig.com/

b) Capturamos los datos acorde a nuestra red.

Ingresamos los datos para generar tantas llaves necesitemos, en mi caso solo 1 cliente y en base a la figura 1, la red que vamos a usar para los tuneles que es la 10.10.99.0/25 suficiente, mi WAN es ip dinamico, tengo habilitado DynDns con el provedor NO-IP lo agrego tambien, vean la siguiente imagen y adaptenla a su infraestructura.

Figura 6.

En la parte baja de la pagina es donde viene la informacion generada. Veamos una parte del todo.

Figura 7.

Si observan la imagen 7, ahi viene su par de llaves del servidor(Pfsense), abajo las llaves publicas de los nodos junton con su llave compartida.

Y si se mueven mas abajo de la pagina, la misma informacion pero de cada cliente(nodo) lista para empezar a usarse en su configuracion.

Una vez descargado el archivo, los descomprimimos y nos vamos hasta donde estas los archivos de configuracion y tendremos algo como esto:

Figura 8.

Veamos la config del cliente1 que es nuestro Windows10 en San Ignacio BCS y el servidor(Pfsense), de lado a lado.

Figura 9.

Como pueden observar en la imagen 9, indique los pares de llaves de cada cliente. A la izquierda nodo San Ignacio BCS su llave privada y como el servidor(pfsense) tiene su llave publica, y vicercersa el cliente tiene la llave publica de pfsense y ademas su llave compartida para generar mas ruido en la comunicacion.

Ademas podran notar el campo: AllowedIPs = 0.0.0.0/0, asi como esta ese parametro de lado del cliente le estamos indicando que es un Full-Tunnel, cuando lleguemos a la 2da configuracion van a observar que es todo lo que cambia para comportarse como Split-Tunnel.

Espero no se estresen, ya vamos ir viendo como darle forma a todo esto y vean como se configura y asi ustedes puedan hacerlo lo mismo, recuerden que la practica hace al maestro y todo esto es las tedioso como lo mencione anteriormente.

Este archivo se lo entregaremos a nuestro cliente Windows 10.

Paso 3) Configurar Tunel en Nodo Servidor(PfSense).

Es momento de crear el 1er tunel, para hacemos lo siguiente:

Menu => Pfsense => VPN => WireGuard.

Sigan los siguientes pasos.

Figura 10.
Figura 11.

Como lo mencione, las llaves ya las generamos anteriormente, no hay necesidad de volver a generarlas usando este metodo.

Al momento de copear y pegar la llave privada que le corresponde a Pfsense(servidor) el descifra la publica.

Figura 12.
Figura 13.

Hasta aqui ya tenemos el tunel listo, nuestra interface asignada es tun_wg0, internamente wireguard maneja sus propias tablas de ruteo atraves de esta interface asi que pfsense sabe como mover los paquetes que por ahi entren o salgan.

Paso 4) Habilitar reglas en el firewall para tunel Full-Tunnel.

Como es un ejemplo y deseamos ver los tuneles comunicando, 1 sola regla para que los equipos moviles puedan comunicarse con cualquier red tanto local como publica, por ser un Full-Tunnel recuerden que todo se movera por la VPN asi debemos abrir ese trafico, ya en produccion uno puede definir cuales puertos deseamos habilitar sin problema, como recomendacion.

Asi que sigamos los siguientes pasos.

Menu => Firewall => Rules => Wireguard.

Figura 14.

Como toda interfaz no hay reglas, asi que si establecen el tunel no habra comunicacion, asi que sobre la interfaz Wireguard vamos a agregar las reglas.

Asi que agreguemos nuestra regla dandole click en el boton ‘Add’, la dejamos como sigue, al final salvamos(Save) y aplicamos cambio no se les pase(Apply Changes).

Figura 15.
Figura 16.
Figura 17.

Listo, ya con esto cuando el nodo establezca el tunel, podra comunicarse con todas las redes tanto publicas como detras de Pfsense.

Paso 5) Habilitar NAT Outbound.

Como el modo Full-Tunnel el usuario remoto debe poder salir a Internet atraves del tunel, pfsense no tiene la regla de enmascarado, no sabe que existe esa red para salir por su wan, debemos indicarselo, entonces hacemos lo siguiente.

Menu => Firewall => NAT => Outbound.

Figura 18.
Figura 19.

Ahora le indicamos el mapeo.

Figura 20.
Figura 21.
Figura 21.
Figura 22.

Paso 6) Abrir regla para que el trafico de los clientes remotos llegue a nuestra WAN.

La WAN recuerden de fabrica no permite el trafico externo, asi que debemos abrir el puerto UDP 51820 en la WAN para que nuestros clientes puedan acceder a el servicio de Wireguard y este haga su trabajo.

Asi que hacemos lo siguiente:

Menu => Firewall => WAN.

Figura 23.
Figura 24.
Figura 25.

Listo, ya nuestros usuarios externos Full-Tunnel podran establecer las VPN’s con nuestro Pfsense.

Paso 7) Agregar en Dashboard el objeto de WireGuard.

Esta esto aparece apartir de la version 0.1.5.

Figura 26.
Figura 27.

Ya cuando empiecen a comunicarse los nodos, este modulo nos dara informacion rapida del estatus de WireGuard.

Hasta aqui ya configuramos el tunel, habilitamos el mapeo Outbound y abrimos la comunicacion para nuestros nodos remotos.

Ahora si pasamos a configurar los clientes que desean comunicarse con la sucursal matriz atraves de Wireguard.

Paso 8) Agregamos nodo Windows 10 en Servidor WireGuard(Pfsense)

Ya tenemos la informacion de ese nodo, sus llaves asi que procedemos a lo siguiente.

Nos vamos de nuevo a la configuracion de WireGuard y abrimos la configuracion del tunel creado para iniciar agregando los nodos, como lo muestro a continuacion.

Menu => VPN => Wireguard.

Figura 28.
Figura 29.

Recuerden que ya generamos toda esa info, ya solo es cuestion de como organizarnos para tener la informacion a la mano, ver figura 7.

Figura 30.
Figura 31.
Figura 32.

Ahora Wireguard nos dice que ya tenemos un nodo agregado.

NOTA: Observen la figura 29, la opcion “Dynamic EndPoint” habilitado, como son equipos que se pueden conectar de cualquier red externa, su IP puede cambiar no es fija, es imposible saberlo, por ello es un “Punto Dinamico” asi Pfsense ya sabe que debe acceptar esa comunicacion sin problema.

Ahora si pasamos a la configuracion de nuestro primero nodo remoto.

Paso 9) Configuracion de cliente(Nodo) Windows 10 Full Tunel.

Como lo mencione a el inicio, es un ‘Tunel Completo’ o “Full Tunnel”, una vez establecido la VPN, todo el trafico se enviara por el tunel, ademas que por esta razon voy a indicarle en la config que va a usar como DNS a Pfsense.

Entonces su configuracion queda asi.

Figura 33.

Este archivo se lo entregare a mi cliente para que lo importe una vez instalado el cliente WireGuard.

a) Instalar cliente WireGuard en equipo Windows 10.

Para esto nos vamos a la pagina oficial de WireGuard https://www.wireguard.com/, descargamos el cliente y lo instalamos.

Figura 34.
Figura 35.
Figura 36.
Figura 37.

Este no pierde el tiempo, es una aplicacion que se ejecuta rapidisimo y una vez que termina se abre el GUI el cual es bien sencillo.

b) Importar el archivo de configuracion.

Figura 38.
Figura 39.
Figura 40.

c) Lo activamos. Le damos click en el boton “Activate” y si siguieron mis pasos, deberan tener un tunel operando como lo muestra la siguiente imagen.

Figura 41.

Si observan la figura anterior, el recuadro rojo tenemos trafico entrante y saliente, entonces tenemos comunicacion con nuestro servidor.

Veamos que dice Pfsense en el dashboard.

Figura 42.

1 Nodo activo y tengo trafico entrante(RX) y saliente(TX) o sea que si se estan comunicando ambos.

Un poco mas detalles de Wireguard, para estos nos vamos a:

Menu => VPN = Wireguard => Status => Show Peers.

Figura 43.

El saludo de los amigos, ambos estan en acuerdo con la comunicacion, muy bien es lo que deseamos ver siempre.

Paso 10) Pruebas de Comunicacion con Cliente Windows.

1ra Prueba: En la red de la sucursal matriz tenemos un equipo Windows 10 con el IP 192.168.10.99, vamos a enviarle 5 pings y esperamos nos responda.

Figura 44.

Prueba superada.

Prueba 2: DNS, pfsense nos debe resolver las consultas para este cliente conectado a mas de 800 kms de distancia, usando el comando nslookup, veamos.

Figura 45.

Tenemos respuesta a nuestras consultas, prueba superada.

Prueba 3. El IP publico de este nodo debe ser el mismo que el de Pfsense el cual es:

Figura 46.
Figura 47.

Prueba superada, full tunnel funcionando.

Prueba 4. Acceso por Remote Desktop a Windows 10 de la sucursal IP 192.168.10.99.

Figura 48.

Prueba 5. Acceso a compartidos y transferencia de archivos entre ambos clientes usando el protocolo SMB.

El equipo de la sucursal tiene directorios compartidos, vamos a acceder a ellos y mover datos de un lado a otro.

Figura 49.
Figura 50.

Comunicacion bidireccional funcionando, prueba superada.

Como nota, si nosotros dejamos activado el cliente de Wireguard, cuando reiniciemos la computadora se conectara automaticamente cuando arranque Windows, si lo desactivamos sucede lo contrario, pero lo que si es un hecho es que es sencillo prender y apagar el tunel.

Ahora pasemos al cliente Android Split-Tunnel.

Vamos a repetir el proceso del paso 8 creando un nuevo tunel pero usando la info para el cliente Android, recuerden llave publica/privada para nodo Android, ya tenemos esta info, la figura 1 nos dice que para split tunnel vamos a usar la red:

Split-Tunnel => 10.10.100.0/25

Comezamos.

Paso 11) Generamos las llaves de servidor y cliente.

Vamos a repetir el paso ahora ingresando los datos de la red split-tunnel, para ello nos basamos en la figura 1.

Figura 51.

Descargamos de igual manera los archivo de configuracion para poder enviarle a nuestro cliente android la config tal cual lo hicimos con nuestro cliente windows en paso 9. Aqui por ejemplo las config se pueden enviar por correo.

Nos arroja las siguientes llaves para cada nodo.

Figura 52.

Continuamos con el siguiente paso.

Paso 12) Agregamos Tunel “Split-Tunnel” en Servidor WireGuard(Pfsense) .

Menu => VPN => WireGuard => Tunnels => Add Tunnel

Editamos el tunel para agregar nuevo nodo(Peer).

Figura 53.
Figura 54.
Figura 55.

NOTA: Observen la imagen anterior, este nuevo tunel esta configurado en el puerto 51821, para cuando se abra ese puerto en la WAN tomarlo en cuenta.

Paso 13) Habilitar reglas en el firewall para tunel Split-Tunnel.

Recordemos que estos usuarios solo pueden acceder a los recursos detras de Pfsense, no usan el tunel para ir a redes publicas, por lo tanto les vamos a permitir solo llegar a la LAN detras de Pfsense, no puede ir mas haya.

Entonces su regla quedaria asi:

Figura 56.

La 1er regla les permite acceder a la LAN.

La 2da solo a el IP de Pfsense para pingear y probar comunicacion.

Paso 14) Abrir regla para que el trafico de los clientes remotos llegue a nuestra WAN.

Abirmos trafico en la WAN puerto UDP 51821, quedando asi:

Figura 57.

Listo, ya nuestros clientes split-tunnel podran conectarse a nuestro servidor y establecer tuneles encriptados.

NOTA: Ya no se necesita la regla NAT Outboud?

No, por que estso clientes no usaran a Pfsense para salir a Internet, se limitan a la red que esta detras de Pfsense en este caso la LAN solamente, si tuvieramos VLANS u otros LAN’s de igual manera pudieran acceder a ellas solamente dando esos accesos en sus configuracion. Asi que no se requiere NAT Outbound, se tenian quede decir y lo dije.

Paso 15) Agregamos nodo(Peer)Android en Servidor WireGuard(Pfsense).

Vamos a repetir el paso 8 pero para este cliente android split-tunnel, ya tenemos sus datos pasamos al llenado quedanso asi:

Figura 58.
Figura 59.

Ahora si pasamos a la configuracion del cliente.

Paso 16). Configuramos Wireguard en Android.

a) Instalamos la app de WireGuard.

Figura 60.

b) Descargamos la configuracion, yo usare el correo para esta tarea.

Figura 61.

c) Importamos el archivo desde WireGuard y prendemos el tunel.

Figura 62.

La imagen anterior me dice que ya se levanto el tunel, y en la ultima imagen de la derecha tenemos ya datos entrando y saliendo, vamos a iniciar las pruebas de fuego.

Paso 17) Pruebas de Comunicacion con cliente Android.

1ra Prueba: En la red de la sucursal matriz tenemos un equipo Windows 10 con el IP 192.168.10.99, vamos a enviarle 5 pings y esperamos nos responda.

Figura 63.

5 enviados 5 recibidos, prueba superada.

Prueba 2: DNS, este es un Split-Tunnel por lo tanto los queries los debe resolver su dns local o el que le haya asignado su provedor de Internet.

Figura 64.

Excelente, el dns es otro IP no es Pfsense como el caso de nuestro cliente Windows :-), este trafico no usa los recursos de Pfsense, prueba superada.

Prueba 3. El IP publico de este nodo debe ser el de su provedor de Internet, pfsense tiene el IP:

Figura 65.
Figura 66.

Es correcto, split-tunnel funcionando, el IP publico de este equipo no es Pfsense, prueba superada.

Prueba 4. Acceso por Remote Desktop a Windows 10 de la sucursal IP 192.168.10.99.

Desde este smartphone vamos a acceder a el equipo windows via remote desktop, aqui si vamos a usar los recursos de la VPN como lo indica su tipo de configuracion.

Figura 67.

Ahi lo tenemos, remote desktop desde nuestro equipo movil a mas de 3000 kms de distancia.

Prueba superada.

La quinta prueba ya no la voy a llevar a cabo por que se pone un poco complicado desde el telefono, pero el resto de las pruebas fueron llevadas con exito.

Podmos decir que tanto el Full-Tunnel como Split-Tunnel estan operando.

Paso 18) Estatus de Wireguard.

Recuerden que Wireguard es un servicio bien silencioso que no esta constatemente validando la comunicacion de los nodos como lo hace OpenVPN o IPSEC que por ello sabemos en tiempo real cuantos equipos estan conectados.

Wireguard tiene otra filosofia, si los nodos no tiene nada que comunicar se corta esa comunicacion, se mantiene silcencioso hasta que unos de los 2 desea intercambiar datos, por ello su creador menciona que es mas eficiente.

Ahorita como ambos nodos remotos estan teniendo comunicacion con el servidor, el dashboard nos mostrara 2 clientes conectados, veamos.

Figura 68.

Hasta nos dice cuantos datos han estado entrando y saliendo en total por este tunel.

Ahora pasemos a ver que mas nos ofrece de informacion este paquete desde su menu en:

VPN=>WireGuard =>Status => Show Peers.

Figura 69.

Vemos mas detalle de cada nodo, si esta o no conectado, y el total de trafico que ha consumido.

Resumen.

Espero esta info les ayude para levantar sus tuneles con Wireguard, ya que lo hagan van a ver que es sencillo comparado con las otras opciones, ninguna es mejor que la otra, ya que cada una tiene sus fuerza y debilidad. Recuerden que Wireguard esta marcado como experimental, asi que es importante apoyen usandolo y comentando como les ha ido.

En este ejemplo preferi separar los tuneles, Full-Tunnel de Split-Tunnel, si se dan cuenta un solo parametro hace la diferencia, por que podemos tener por ejemplo solo Full-Tunnel y los clientes los configuramos split o full, todo la clave esta en un parametro.

Por ello separando los tuneles tendremos mas control de los acceso de cada usuario, ademas que podemos aplicar reglas a nivel de firewall para permitir solo los puertos necesarios como simpre lo recomiendo.

Cualquier duda de este manual en los comentarios para ayudarnos todos.

Lo que sigue es VPN’s Punto a Punto para unir redes con Wireguard, hasta pronto banda!!!

4 thoughts on “PfSense 2.5.2 Paquete Wireguard Configurar VPN Usuarios Moviles Full Tunnel y Split Tunnel.

  1. Hola, excelente aportación,tengo una duda, se supone que configure el wireguard, el primer peer funciona perfecto, lo creo y lo configuro en el cliente, entonces creo otro peer para conectar otro dispositivo y al momento de conectarlo, el primer peer deja de funcionar y el segundo trabaja sin problemas, entonces creo un tercer peer y funciona el ultimo menos los primeros dos, entonces hice algo mal, o cual sera mi error.

    Liked by 1 person

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s