Desde hace más de un año, cuando hay partidos de fútbol de LaLiga los usuarios no pueden acceder a cientos de webs y servicios que están detrás de Cloudflare. La forma más fácil de evadir estos bloqueos es usar una VPN, ya sea de pago de los diferentes servicios, o bien una gratuita como la propia WARP de Cloudflare (la cual solamente se ha bloqueado una vez). Si instalas el cliente VPN en tu router, podrías enrutar el tráfico de ciertos clientes locales por dicha VPN, sin embargo, hoy os vamos a enseñar cómo puedes enrutar solamente el tráfico que va hacia Cloudflare por la VPN, para no tener que tunelizar todo el tráfico y afectar (en cuanto a mayor latencia y menos velocidad) a los clientes.
Os anticipamos que este tutorial es bastante avanzado, pero siguiendo todos los pasos podrás configurar adecuadamente tu router con el sistema operativo pfSense para realizar esta acción. Se requieren conocimientos previos en gestión de interfaces de red, reglas de firewall y conceptos de VPN en pfSense. Recomendamos realizar estos pasos en un entorno de pruebas antes de aplicarlos a una red en producción.
Un aspecto muy importante, es que no todos los firmwares o sistemas operativos de los routers son compatibles, ya que es necesario tener a nuestra disposición ciertas opciones avanzadas. Por ejemplo, routers populares y muy completos como los ASUS, FRITZ!Box, TP-Link o NETGEAR entre otros, no son compatibles porque no tienen las características necesarias. Solamente routers con sistemas operativos como pfSense, OPNsense o los Mikrotik serían compatibles con esta configuración.
¿Para qué sirve tunelizar el tráfico que va hacia Cloudflare?
Si instalamos una VPN en nuestro router y enrutamos el tráfico a través del túnel, tendremos que seleccionar uno, varios o todos los clientes que están conectados, para que salgan a Internet a través del servidor VPN configurado en el cliente. Esto significa que absolutamente todo el tráfico de esos clientes, saldrán a Internet mediante la VPN. Esto no es nada eficiente si solamente quieres evadir los bloqueos de Cloudflare, y así poder acceder a tus webs favoritas que se encuentran bloqueadas.
En este tutorial solamente tunelizaremos el tráfico que va hacia Cloudflare, el resto del tráfico irá por la conexión a Internet «normal». Los beneficios de esta estrategia son claros:
- Tendremos menor latencia de la conexión cuando estemos jugando, navegando por Internet o haciendo streaming de vídeo. Siempre y cuando el destino no sea la red de Cloudflare, todo funcionará con total normalidad.
- Tendremos la misma velocidad de siempre. Al configurar un cliente VPN siempre tendremos una pérdida de velocidad, ya que el proceso de cifrar y descifrar el tráfico hace que descienda la velocidad, sobre todo si tienes velocidades de fibra de 1Gbps simétrico o más.
Además, si usamos servicios que utilicen geolocalización como las apps de los bancos, no tendremos ningún problema por usar una VPN en otro país, ya que ese tráfico en concreto irá por la conexión normal, a no ser que ese servicio utilice Cloudflare para protegerse de ataques.
Requisitos
Este tutorial es bastante avanzado y no está al alcance de routers domésticos, por muy avanzados que tengan sus firmwares como los ASUS, FRITZ!Box, TP-Link o QNAP entre otras marcas, lo cierto es que solamente los más avanzados podrán realizar esta configuración.
Sistema operativo del router compatible
Nosotros hemos realizado esto en el sistema operativo pfSense CE 2.8.1, pero os confirmamos que también funciona en los siguientes sistemas operativos:
- pfSense Plus
- OPNsense
- Mikrotik también sería compatible, en esencia es hacer esto mismo, pero usando RouterOS.
Actualmente hay muchos appliances donde podemos instalar pfSense y OPNsense, y usarlo como router principal en nuestro hogar, con opciones muy avanzadas. Dependiendo de su hardware, tendremos mayor potencia para enrutar más tráfico vía VPN o menos. El siguiente mini PC de Slimbook es perfecto para este uso:
Otra opción muy buena es este Protectli si vas a instalar OPNSense.
Si tienes routers empresariales y avanzados, que tengan las siguientes opciones, también deberían ser compatibles:
- Cliente VPN con OpenVPN o WireGuard.
- Posibilidad de crear una interfaz virtual del túnel VPN.
- Posibilidad de crear aliases para dar de alta todos los rangos de IPs de Cloudflare.
- Opciones para «marcar» el tráfico y poder obligar a que este tráfico coincidente vaya por el gateway de la interfaz virtual del túnel VPN.
| Componente | Requisito mínimo | Recomendado |
|---|---|---|
| Procesador | CPU de 64 bits (x86-64/amd64) a 1 GHz | Intel Core i5 o superior con múltiples núcleos |
| Memoria RAM | 1 GB | 4 a 8 GB (especialmente con VPN/WireGuard) |
| Almacenamiento | 8 GB (SSD, HDD) | 128 GB SSD para mayor fiabilidad |
| Interfaces de red | 2 interfaces de red mínimo (WAN + LAN) | 3 o más para mayor flexibilidad (WAN, LAN, DMZ) |
| Tarjetas recomendadas | Intel a ser posible, para tener máxima compatibilidad. | |
| Instalación | Puerto USB booteable o unidad DVD para ISO |
En el caso de tener estas opciones, podrás realizar también este tutorial sin problemas. Como os hemos indicado anteriormente, este tutorial está hecho con pfSense.
Servicio de VPN con WireGuard
Una vez que cumplimos con el requisito del sistema operativo compatible, es fundamental contar con un servidor VPN que use WireGuard o bien OpenVPN. En este caso, tenemos varias opciones factibles:
- Puedes recurrir a servicios de VPN de pago como NordVPN, Surfshark, CyberGhost, PrivadoVPN y también PureVPN entre otros. Te registras, compras la suscripción, y te descargas el archivo de configuración para posteriormente importarlo en el router. Todos los proveedores disponen de tutoriales sobre cómo descargar el archivo de configuración, sin necesidad de usar sus aplicaciones, tendrás que elegir el modo «Router» y entonces te proporcionarán los datos necesarios.
- Otra opción es que uses el servicio de WARP de Cloudflare, aunque podría ser bloqueado por los operadores, así que usa este último con precaución. En RedesZone tenemos un tutorial sobre cómo descargar la configuración de WARP e importarla en un router.
- Contratar un VPS (servidor privado virtual) barato en diferentes plataformas como Kamatera, entre otros proveedores como OVH o Ginernet, y desplegar aquí un servidor VPN con WireGuard. Tienes un completo tutorial en RedesZone.
| Opción VPN | Protocolo recomendado | Coste estimado | Mejor para |
|---|---|---|---|
| VPN Comercial (NordVPN, Surfshark, etc.) | WireGuard | 5-10€ / mes | Usuarios que buscan simplicidad y servidores en múltiples países. |
| Cloudflare WARP | WireGuard | Gratuito | Pruebas rápidas y una solución sin coste, con el riesgo de futuros bloqueos. |
| VPS Propio (Kamatera, OVH, etc.) | WireGuard | 3-6€ / mes | Usuarios avanzados que desean control total sobre su servidor y máxima privacidad. |
Una vez que tengamos la configuración del cliente VPN, ya podemos empezar a importarla en nuestro sistema.
Configuración de pfSense
Hemos instalado pfSense con una instalación totalmente limpia, usando la WAN en modo DHCP y luego tenemos la LAN en la habitual dirección 192.168.1.1. El menú principal del sistema operativo luce de la siguiente manera:
El primer paso es instalar el paquete de WireGuard en el sistema operativo, porque no se encuentra instalado de forma predeterminada. Es muy recomendable utilizar este protocolo de VPN para tener la máxima seguridad, pero también la máxima velocidad de descarga y subida posible, ya que otros protocolos como OpenVPN son claramente más lentos. Por lo tanto, es muy recomendable que uses WireGuard siempre que sea posible.
Una vez instalado, ya podremos empezar a configurar el cliente VPN con los datos del servidor WireGuard que tengamos.
Configurar el cliente VPN de WireGuard
Para importar el fichero de configuración, debemos irnos al menú de «VPN (WireGuard)«, aquí pinchamos en «Add tunnel» para agregar el primer túnel VPN.
Ahora es cuando tenemos que copiar la configuración del cliente VPN, si tomamos como base el siguiente fichero de configuración:
[Interface]
PrivateKey = xxxxx
Address = 10.99.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = xxxxxxxx
PresharedKey = xxxxxxxxxx
AllowedIPs = 0.0.0.0/0
Endpoint = xxxx:yyyyy
PersistentKeepalive = 25
Debemos rellenar la siguiente configuración en los diferentes menús:
- Enable: marcarlo como habilitado.
- Description: ponemos una descripción del túnel VPN, por si creas otros.
- Listen Port: podemos dejar ese, o bien elegir cualquier otro puerto.
- Interface keys: tenemos que copiar la «PrivateKey» del archivo de configuración, la «Public key» la calculará automáticamente.
Ahora pinchamos en «Save», y pinchamos en el botón de «Add peer» para agregar el «Peer» al túnel de WireGuard. Debemos rellenar la siguiente configuración en los diferentes menús:
- Enable: marcarlo como habilitado.
- Tunnel: está asociado al túnel recién creado de WireGuard, aparecerá su descripción.
- Dynamic Endpoint: desmarcamos la opción para que podamos configurar el «Endpoint» y el puerto.
- Endpoint: ponemos la IP pública o dominio, y también el puerto. Esto está en el archivo de configuración como «Endpoint».
- Keep alive: ponemos 25 segundos.
- Public Key: esto está en el archivo de configuración como «PublicKey».
- Pre-shared Key: es opcional, algunos proveedores de VPN no tienen presharedkey. Esto está en el archivo de configuración como «PresharedKey», si no lo tenemos, lo dejamos vacío.
- Allowed IPs: ponemos 0.0.0.0 y la máscara ponemos 0.
Ahora pinchamos en «Save», y ya tendremos el túnel VPN con WireGuard listo. Para activarlo, tenemos que irnos a «Settings» y pinchar en «Enable», pinchamos en «Save» y arrancará el túnel VPN.
En el menú principal podemos ver la configuración realizada, y también en «Status» podemos ver si se ha establecido o no la conexión.
En estos instantes ya tenemos configurado el túnel VPN con WireGuard, ahora es cuando tenemos que usarlo para enrutar el tráfico.
Crear la interfaz y configurar el gateway
Nos vamos a «Interfaces / Interface Assignments«, y donde indica «Available network ports» elegimos el «tun_wg0» que es el que acabamos de crear, y pinchamos en «Add«. Una vez hecho, pinchamos en «Save» y en «Apply Settings» que nos aparecerá en verde. En estos momentos ya tenemos la interfaz virtual asociada a la VPN creada, pero es necesario configurarla. Pinchamos en el nombre de la propia interfaz virtual que acabamos de crear, y nos llevará el menú de «Interfaces / OPT1 (tun_wg0)«.
En este menú debemos configurar lo siguiente:
- Enable: habilitamos la interfaz
- Description: ponemos una descripción corta, será el nombre de la interfaz, no indiques algo demasiado «largo» porque luego no aparecerá bien en los menús.
- IPv4 Configuration Type: Static IPv4.
- IPv6 Configuration Type: por defecto, en none.
En la sección de «Static IPv4 configuration» ponemos:
- IPv4 Address: 10.99.0.2 y la máscara /32.
Esto se obtiene directamente desde el fichero de configuración de WireGuard, debemos poner lo mismo que tengamos en el fichero de configuración, en nuestro caso es «Address = 10.99.0.2/32» así que ponemos esto mismo. Ahora pinchamos en «Save» y aplicar cambios, y ya tendremos la interfaz configurada.
Ahora tenemos que configurar esta interfaz virtual como «Gateway«, para hacer esto, nos vamos a «System / Routing / Gateways» y pinchamos en «Add» para añadir una nueva puerta de enlace, elegimos la que hemos creado anteriormente de «WG_TUNEL«, y editamos la configuración con lo siguiente:
- Disabled: desmarcado, para activarlo.
- Interface: WG_TUNEL
- Address Family: IPv4.
- Name: un nombre descriptivo del gateway.
- Gateway: 10.99.0.2 que es la IP de la VPN.
- Gateway monitoring: lo dejamos desmarcado.
- Gateway action: lo dejamos desmarcado.
- Monitor IP: generalmente será la primera IP de la subred, en nuestro caso 10.99.0.1 para monitorizar el otro lado del túnel mediante ping, y así poder saber si está caído o no.
Una configuración muy importante es irnos a «Advanced» y pinchar en la opción de «Use non-local gateway though interface specific route«. Ahora pinchamos en «Save» y luego en «Apply changes» para aplicar los cambios.
Ahora ya tenemos configurado el gateway por donde saldrá el tráfico que nosotros queramos.
Crear alias para las direcciones IP de origen y subredes de destino
Los aliases nos permitirán «aglutinar» direcciones IP o bien subredes en un nombre descriptivo, para posteriormente usarlo en el firewall. Esto nos permitirá tenerlo todo bien ordenado, y que no necesitemos crear decenas de reglas en el firewall que sean similares, por lo que también es óptimo en cuanto a consumo de recursos del cortafuegos. En el menú de «Firewall / Aliases» es donde debemos entrar:
Vamos a crear una aliases que contengan todas las direcciones IP de origen (los clientes locales) que queremos «marcar» para luego tunelizar el tráfico, siempre y cuando coincida con el destino que sean las redes de Cloudflare. Por lo tanto, creamos una primera aliases con un nombre descriptivo y añadimos las IPs que necesitemos.
También es necesario crear un segundo aliases, en este caso tendremos que poner todas las direcciones IP de Cloudflare, o, mejor dicho, todas sus subredes, para que así cualquier destino hacia Cloudflare sea tunelizado. En la web de Cloudflare podemos ver todas las IPs y subredes, de hecho, las podemos descargar en modo texto justo debajo, para así copiar y pegar directamente en pfSense.
En el menú de «Firewall / Aliases» pinchamos en el botón de «Import«, y ahora ponemos el nombre del alias, la descripción y copiamos todas las subredes que hemos conseguido a través de Cloudflare. Pinchamos en «Save» para realizar esta importación.
Para asegurarnos que nuestra configuración nunca quede obsoleta, también puedes usar la opción de «URL» en «Aliases», para que descargue y actualice automáticamente los rangos de IPs desde la fuente oficial de Cloudflare. Sin embargo, si bloquean el servicio podríamos tener problemas para descargarlo. Por norma general, estos rangos de IPs no cambian de forma continuada, de hecho, si vemos el histórico de cambios, desde 2021 no han añadido ni quitado ningún rango para redes IPv4. Debes poner esta URL que es la que te descargará en modo texto:
https://www.cloudflare.com/ips-v4/#
En «Update Frecuency (Days)» pones 1 y así se actualizarán diaramente.
Ahora en «Aliases» nos aparecerán las dos, pinchamos en «Apply changes» y ya estaremos listos para crear la regla en el cortafuegos.
Ahora solamente nos falta crear la regla en el firewall para poder «marcar» el tráfico y reenviarlo por el túnel.
Crear regla en el firewall
Nos vamos a la sección de «Firewall / Rules«, pinchamos en la pestaña de la subred donde queremos aplicar la regla, generalmente será en LAN. Aquí pinchamos en «Add Rule (por abajo, para que la cree al final)» y nos aparecerá el menú de creación de la regla:
- Action: Pass
- Disabled: desmarcado
- Interface: LAN (o la interfaz donde quieras añadir la regla).
- Address Family: IPv4
- Protocol: any (a nivel de IP).
- Source: «Address or alias» y elegimos el alias de las IPs de origen que hemos configurado previamente.
- Destination: «Address or alias» y elegimos el alias de las subredes de destino que hemos configurado previamente, las de Cloudflare.
En el menú de «Advanced Options» pinchamos en mostrar, y nos vamos hasta la opción de «Gateway» y elegimos el gateway «WireGuard» que hemos configurado. Ahora pinchamos en «Save» y aplicamos cambios.
Es muy importante el orden de las reglas en el firewall, esta regla está al final, y con las reglas por defecto de pfSense nunca se va a «marcar». Debemos ubicarla en la segunda posición para que sí funcione correctamente, el resto del tráfico se ejecutará por las reglas predeterminadas que tenemos.
En estos instantes, cuando usemos una web que esté en la red de Cloudflare, automáticamente iremos por el túnel VPN y no por nuestra conexión a Internet real. De esta forma, no nos veremos bloqueados por los operadores y todo funcionará con normalidad.
Resultado y conclusiones
Si ahora intentamos hacer un «traceroute» veremos que la ruta de los paquetes va por un camino diferente, ya que saldremos directamente a través de la VPN cuando el destino sea una IP de Cloudflare. Si has configurado WARP como cliente VPN (aunque podrían bloquearla), estarás directamente dentro de la red de Cloudflare y solamente tendrás un salto, y con la mínima latencia. En la siguiente captura podéis ver el tracert hacia el dominio de Cloudflare, donde solamente tenemos un salto porque ya estamos dentro de su red:
Si has configurado otra VPN, entonces sí tendrás más saltos, todo depende de cómo sea el enrutamiento desde ese servidor VPN. Para verificar al 100% que sí funciona todo correctamente, la prueba que debes hacer es la siguiente:
- Sin la regla configurada (o desactivada), haces un tracert hacia Cloudflare y miras los saltos.
- Con la regla configurada (y activada), haces un tracert hacia Cloudflare y miras los saltos.
Ahora comparas ambos traceroute, si la ruta es la misma, seguramente hayas cometido algún error. Si los saltos son diferentes, entonces sí estaremos enrutando el tráfico por la VPN porque nos «saltamos» todo el enrutamiento del operador.
Posibles errores y soluciones
El routing basado en políticas permite dirigir tráfico específico hacia gateways distintos, como el que de la VPN configurada, según criterios como IP de origen (nuestros PCs), destino o redes específicas (la red de Cloudflare). En el caso de tunelizar Cloudflare a través de VPN para evadir bloqueos, es fundamental configurar correctamente las reglas de firewall.
Los principales errores que nos encontraremos, junto con sus soluciones, son las siguientes:
- Orden incorrecto de las reglas del firewall: las reglas más específicas deben colocarse antes (por encima) de las reglas generales de firewall, de lo contrario nunca se ejecutarán. El procesamiento de las reglas las evalúa de arriba hacia abajo de forma secuencial, y si una regla general permite primero el tráfico, no verificará el resto. Por lo tanto, si ponemos mal el orden de las reglas no funcionará correctamente. Solución: Tras crear cada regla, ordena correctamente todo para posicionarla correctamente, luego haces clic en «Save» y «Apply»
- Sin configuración de la regla NAT/outbound: en este caso no es necesario configurar nada en la NAT, y que estamos redirigiendo el tráfico completamente, y no solamente cierto tráfico.
- No marcar la opción «Use non-local gateway» o configurar el gateway incorrecto: debes asegúrate de que la opción «Use non-local gateway» está marcado, tal y como hemos indicado. Si configuras una interfaz VPN como gateway alternativo, debes comprobar que la opción de «Advanced Options» y en el menú de «Gateway» está configurado correctamente.
- Gestión ineficiente de múltiples IP o destinos sin usar aliases: crear múltiples reglas por cada IP de origen o destinos, hace que tengamos que crear decenas de reglas, y es propenso a errores y es muchísimo menos eficiente. La solución óptima es usar aliases en pfSense para agrupar direcciones IP, subredes o dominios de destino, y luego aplicar una única regla con el alias. De esta forma, agregar o quitar direcciones IP simplemente requiere actualizar el alias, sin modificar la regla.
- El tráfico no pasa por la VPN: la causa más habitual es el orden de las reglas del firewall. Asegúrate de que la regla que creaste para enrutar el tráfico de Cloudflare esté en la segunda posición en la pestaña «LAN», justo debajo de la regla anti-bloqueo por defecto. Las reglas se procesan de arriba hacia abajo.
- La interfaz del Gateway aparece como «Offline»: Ve a «System / Routing / Gateways», edita tu gateway de WireGuard y en «Advanced Options», asegúrate de que la casilla «Use non-local gateway» esté marcada. Este es un error muy común al usar interfaces virtuales.
- No hay conexión tras activar la regla: Verifica que la configuración del «Peer» de WireGuard, el campo «Allowed IPs» esté configurado como 0.0.0.0/0 para permitir todo el tráfico por el túnel. Nuestra regla de firewall es la que se encarga de seleccionar QUÉ tráfico entra al túnel
Como podéis ver, hay algunos posibles problemas que nos podemos encontrar a la hora de configurarlo, pero tienen fácil solución.
