VPN con WireGuard en Android para asegurar tu red doméstica

  • WireGuard ofrece una VPN doméstica rápida, segura y sencilla de configurar, ideal para acceder a tu red desde Android y otros dispositivos.
  • La clave está en generar pares de claves, definir bien AllowedIPs, habilitar reenvío y NAT, y proteger el puerto UDP con firewall adecuado.
  • Si hay CGNAT, un VPS como puente permite seguir llegando a tu red de casa mediante túneles WireGuard entre servidor remoto y LAN doméstica.
  • Paneles como WireGuard Easy y apps oficiales facilitan la gestión de peers y el uso en móvil mediante códigos QR y perfiles .conf reutilizables.

wireguard VPN

Si tienes montado un pequeño chiringuito tecnológico en casa con un NAS, un servidor Linux o un ordenador reciclado lleno de servicios, seguro que te has encontrado con el mismo problema: todo va perfecto mientras estás en tu WiFi, pero en cuanto sales de casa, adiós muy buenas. No puedes entrar a tus aplicaciones, a tus archivos ni a tus cámaras IP sin meterte en líos de puertos, DDNS y riesgos de seguridad, o recurrir a VPNs recomendadas para Android.

La forma más cómoda y segura de solucionar esto es crear una VPN con WireGuard y conectarte desde Android (y desde cualquier otro dispositivo). Así podrás usar tu red doméstica como si estuvieras físicamente allí, incluso aunque tu operadora use CGNAT o tengas una topología de red un poco puñetera. Vamos a verlo paso a paso: desde qué es WireGuard, cómo montarlo en Linux (o con Docker y paneles tipo EasyPanel/WireGuard Easy) y cómo dejarlo fino para acceder a tu LAN y activar la VPN en Android y navegar de forma segura desde el móvil.

¿Qué es WireGuard y por qué es ideal para una VPN doméstica?

WireGuard es un protocolo VPN moderno, minimalista y muy rápido que ha cambiado por completo la forma de montar redes privadas virtuales. A diferencia de dinosaurios como OpenVPN o IPsec, está pensado desde cero para ser sencillo de configurar, fácil de auditar y extremadamente eficiente.

Su código base es muy pequeño (del orden de unas pocas miles de líneas), lo que facilita encontrar vulnerabilidades y mantenerlo al día. Para el cifrado utiliza solo algoritmos modernos y bien considerados como Curve25519, ChaCha20, Poly1305, BLAKE2s y compañía. Nada de listas eternas de cifrados obsoletos que ya nadie debería usar.

Además, funciona exclusivamente sobre UDP y puede integrarse en el kernel de Linux, así que la latencia es baja, el rendimiento es muy bueno y el consumo de CPU es ridículo. Esto se nota especialmente cuando conectas desde Android en 4G/5G o WiFi regulera: las reconexiones son rápidas y el túnel aguanta bastante bien los cambios de red.

La configuración también es mucho más amigable: cada dispositivo tiene un par de claves pública/privada, se le asigna una IP interna de la VPN y se define qué tráfico se envía por el túnel con la directiva AllowedIPs. Con eso, un puerto UDP y cuatro ajustes más, lo tienes funcionando, sin decenas de parámetros crípticos ni ficheros interminables.

Otra ventaja gorda es que WireGuard es multiplataforma: hay clientes oficiales para Android, iOS, Windows, macOS y Linux, y también puede ejecutarse en routers, contenedores Docker o dispositivos embebidos. En el móvil puedes importar un archivo .conf o simplemente escanear un código QR generado en el servidor y listo.

Requisitos básicos antes de montar tu servidor WireGuard

Antes de pegar comandos como si no hubiera un mañana conviene revisar que cumples unos requisitos mínimos para un servidor WireGuard accesible desde Android. Esto te ahorrará bastantes dolores de cabeza.

Lo más habitual es utilizar un servidor Linux: puede ser un VPS en la nube (Ubuntu 22.04 es una opción muy cómoda) o una máquina en casa (Raspberry Pi, miniPC, NAS con soporte, etc.). Cualquier distro moderna con soporte de WireGuard te vale, pero Ubuntu/Debian concentran más documentación y ejemplos.

protocolos de seguridad VPN
Artículo relacionado:
Protocolos de seguridad VPN más utilizados: guía exhaustiva, diferencias y recomendaciones 2025

Necesitas un usuario con permisos de administración (root o un usuario con sudo) porque vas a instalar paquetes, toquetear configuración de red, habilitar el reenvío de IP y quizá modificar reglas de firewall. También es clave tener acceso SSH al servidor y saber, como mínimo, conectarte desde tu equipo.

Por el lado del cliente, vas a usar principalmente tu smartphone Android con la app oficial de WireGuard, aunque el mismo esquema de configuración te sirve para Windows, macOS, Linux o iOS. El archivo de configuración cambia poco entre plataformas, así que lo que aprendas aquí te servirá para todas.

El gran enemigo: CGNAT y cómo afecta a tu VPN doméstica

Uno de los puntos más importantes, sobre todo si el servidor está en casa, es saber si tu operadora te mete detrás de CGNAT (Carrier-Grade NAT). Bajo CGNAT, compartes una IP pública con otros clientes y no puedes abrir puertos hacia tu red doméstica, lo que complica muchísimo exponer un servidor VPN en tu conexión de casa.

Detectarlo es sencillo: primero anota tu IP pública desde una web tipo “cuál es mi IP” en el navegador. Luego entra en el panel de tu router (normalmente en 192.168.1.1 o 192.168.0.1) y busca en la sección WAN o Internet la dirección IP que el router cree que tiene. Si esa IP empieza por 10.x.x.x o está en el rango 100.64.0.0 – 100.127.255.255 y no coincide con la que te dan las webs, estás bajo CGNAT. Otra opción directa es llamar al operador y preguntarlo.

Con CGNAT, tu router no recibe una IP pública directa, así que no puedes hacer port forwarding clásico. Algunas compañías permiten salir de CGNAT pagando un extra o activando una opción, otras te piden cambiar de tarifa y a veces el precio se dispara. Si no quieres pasar por ahí, la solución elegante es tirar de un VPS como puente: tu servidor en casa hace un túnel WireGuard hacia el VPS, y tú te conectas al VPS desde Android para llegar a tu LAN doméstica.

Preparar el servidor Linux: actualización e instalación de WireGuard

En un servidor con Ubuntu 22.04 (o similar), lo primero es actualizar paquetes para no arrastrar vulnerabilidades ni versiones viejas:

apt update && apt upgrade -y

Después instalas WireGuard desde los repos oficiales con:

apt install -y wireguard

Este paquete mete las herramientas wg y wg-quick y carga el módulo del kernel necesario. Si quieres forzar la carga manual en algún entorno algo raro, puedes usar:

modprobe wireguard

Generación de claves y estructura de configuración en el servidor

El núcleo de WireGuard es el sistema de claves públicas y privadas. Normalmente se trabaja en el directorio estándar /etc/wireguard/, donde guardarás claves y ficheros de configuración.

Cámbiate a ese directorio y endurece los permisos por defecto antes de crear nada:

cd /etc/wireguard/
umask 077

Con esto te aseguras de que los nuevos archivos no sean legibles por otros usuarios, algo crítico cuando vas a generar claves privadas. Genera el par de claves del servidor, por ejemplo:

wg genkey > privatekey
wg pubkey < privatekey > publickey

La clave privada debe permanecer siempre en el servidor y nunca salir de ahí; la clave pública sí podrás compartirla con los clientes. Evita además aplicaciones de terceros que podrían comprometer secretos, revisa artículos sobre aplicaciones de VPN inseguras si dudas sobre clientes.

chmod 600 privatekey

Si quieres ver las claves por pantalla para copiarlas luego, puedes tirar de:

tail privatekey publickey

Crear y editar el fichero wg0.conf del servidor

wireguard VPN

WireGuard organiza sus túneles en interfaces virtuales llamadas por convención wg0, wg1, etc. Cada interfaz tiene su propio archivo de configuración en /etc/wireguard/. Vamos a crear wg0.conf como interfaz principal.

Si te gusta Nano y no lo tienes instalado, puedes añadirlo con:

apt install -y nano

Abre el archivo de configuración:

nano /etc/wireguard/wg0.conf

Antes de escribir nada, identifica el nombre de la interfaz de red que da salida a Internet (la que tiene la IP pública o la IP con la que llegas por SSH). Esto lo sacas con:

ip a

En muchos VPS se llama eth0, ens3, enp0s3 o algo por el estilo. La necesitarás para las reglas de NAT. Un ejemplo de bloque completo podría ser:


Address = 10.30.0.1/24
PrivateKey = <clave_privada_servidor>
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Aquí le estás dando al servidor la IP 10.30.0.1 dentro de la red VPN, le dices que escuche en el puerto UDP 51820, y defines las reglas iptables que se aplican cuando la interfaz wg0 se levanta (PostUp) y se eliminan cuando se baja (PostDown). Ojo con sustituir eth0 por el nombre real de tu interfaz de salida.

En Nano, guardas con Ctrl+O y cierras con Ctrl+X. Este wg0.conf será el núcleo sobre el que irás añadiendo los distintos clientes (peers).

Habilitar el reenvío de IPs y arrancar el servicio WireGuard

Para que tus clientes accedan a Internet o a la LAN detrás del servidor VPN, el sistema tiene que permitir el reenvío de paquetes IPv4 e IPv6. Esto se controla con sysctl.

Una forma rápida es añadir las líneas correspondientes a /etc/sysctl.conf o a un fichero en /etc/sysctl.d/ y recargar:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
sysctl -p

Si ya existían esas líneas pero estaban comentadas (con #), basta con quitar el #, guardar y volver a lanzar sysctl -p. Sin este paso tendrás el túnel levantado pero te quedarás sin acceso a la LAN o a Internet desde los clientes.

Ahora puedes levantar WireGuard con la ayuda de wg-quick y systemd:

systemctl start wg-quick@wg0

Para que arranque solo con el sistema:

systemctl enable wg-quick@wg0

Comprueba que todo está en verde con:

systemctl status wg-quick@wg0

Y para ver detalles en tiempo real de la interfaz, claves, peers y tráfico usa:

wg

Añadir clientes: PC, móvil Android y otros dispositivos

Cada dispositivo que se conecte a tu VPN se define como un peer con su propia clave y su IP de túnel. Puedes generar las claves en el propio servidor (más cómodo) o en cada cliente (más seguro, porque la clave privada nunca sale de él).

Para un ordenador de sobremesa podrías hacer, por ejemplo, en /etc/wireguard/:

wg genkey > mypc_privatekey
wg pubkey < mypc_privatekey > mypc_publickey

Y para tu móvil Android:

wg genkey > myphone_privatekey
wg pubkey < myphone_privatekey > myphone_publickey

Comprueba los archivos con:

ls

Y muestra las claves públicas:

tail mypc_publickey myphone_publickey

Esas claves públicas son las que meterás en wg0.conf dentro de bloques . Abre de nuevo el fichero del servidor:

nano /etc/wireguard/wg0.conf

Y añade, por ejemplo:


PublicKey = <clave_publica_mypc>
AllowedIPs = 10.30.0.2/32

PublicKey = <clave_publica_myphone>
AllowedIPs = 10.30.0.3/32

Con esto estás reservando la IP 10.30.0.2 para el PC y la 10.30.0.3 para el móvil Android. El /32 indica que es una IP individual. Cada peer va con su IP exclusiva dentro de la subred de la VPN.

Guarda y recarga el servicio para aplicar los cambios:

systemctl restart wg-quick@wg0

Crear los ficheros de configuración de los clientes

Ahora toca preparar los archivos .conf que usarán los clientes. Incluyen su clave privada, la IP interna, el DNS y los datos del servidor (clave pública, IP/Dominio y puerto).

Para el PC puedes crear mypc.conf en /etc/wireguard/ (o donde prefieras):

nano mypc.conf

Contenido tipo:


PrivateKey = <clave_privada_mypc>
Address = 10.30.0.2/24
DNS = 1.1.1.1

PublicKey = <clave_publica_servidor>
Endpoint = <IP_o_dominio_servidor>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20

En el bloque defines la “cara” local del cliente: su clave privada, su IP de VPN y qué DNS usará. En el bloque describes al servidor: su clave pública, dirección y puerto. La línea AllowedIPs = 0.0.0.0/0 hace que todo el tráfico del cliente pase por la VPN (full tunnel). Si solo quieres acceso a tu LAN remota, puedes limitarlo a 10.30.0.0/24 y/o 192.168.x.0/24, según tu red.

PersistentKeepalive cada 20-25 segundos es muy recomendable para clientes detrás de NAT o redes móviles, ya que evita que el túnel parezca inactivo y el firewall cierre la sesión.

cómo activar VPN Android
Artículo relacionado:
Cómo activar la VPN en Android y bloquear tráfico no seguro

Configuración específica del cliente Android

En Android, la mecánica es la misma. El móvil necesita su clave privada, su IP de túnel y los datos del servidor. Puedes reutilizar las claves que generaste en el servidor o generarlas directamente en la app.

Siguiendo el ejemplo, creaste myphone_privatekey y myphone_publickey. Te falta el fichero myphone.conf para el teléfono:

nano myphone.conf

Con algo así:


PrivateKey = <clave_privada_myphone>
Address = 10.30.0.3/24
DNS = 1.1.1.1

PublicKey = <clave_publica_servidor>
Endpoint = <IP_o_dominio_servidor>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20

La parte delicada aquí es cómo hacer llegar ese archivo al móvil de forma segura. En laboratorio podrías subirlo a un servidor web y descargarlo, pero en producción es mejor evitar mandarlo por email o almacenarlo en servicios sin cifrado.

La forma más limpia suele ser usar qrencode para generar un código QR que la propia app de WireGuard en Android pueda escanear:

apt install -y qrencode
qrencode -t ansiutf8 -r myphone.conf

Verás en la terminal un QR en caracteres ASCII. En el móvil, abres la app de WireGuard, eliges “Scan from QR code” (Escanear desde código QR) y apuntas a la pantalla. De esta manera no necesitas compartir el .conf por canales dudosos.

Acceso a la LAN doméstica, DNS y nombres locales

Más allá de levantar el túnel, lo interesante de una VPN con WireGuard en Android para una conexión doméstica segura es poder acceder a todos tus cacharros de casa como si estuvieras allí: NAS, cámaras IP, routers, servidores de medios, etc., idealmente usando nombres de dominio locales en lugar de IPs.

En muchos routers que integran servidor WireGuard o DNS interno, hay un apartado tipo NETWORK → DNS → Edit Hosts donde puedes crear entradas del estilo 192.168.1.50 nas-casa.local. Si apuntas el DNS de tus clientes VPN al router o al servidor que resuelve estos nombres, podrás acceder a tus equipos por hostname.

Algunos firmwares de routers con WireGuard incluyen casillas tipo “Allow Remote Access to LAN”, “Remote Access LAN Subnet” o similar. Debes activarlas para que los clientes remotos puedan llegar a la subred local (192.168.x.x) más allá del propio router.

En escenarios donde el servidor WireGuard corre embebido en el router, muchas veces éste permite exportar perfiles .conf ya preparados para móviles o para otros routers cliente. Esos perfiles suelen incluir la IP de túnel, el DNS correcto (normalmente la IP del propio router en la red VPN) y un AllowedIPs bien ajustado.

Verificación, solución de problemas y seguridad

Una vez importada la configuración en Android y activado el túnel, lo primero es comprobar que el handshake se produce correctamente. La propia app de WireGuard muestra el estado, los bytes enviados/recibidos y la última marca de tiempo de handshake.

En el servidor, ejecuta:

wg

Ahí verás para cada peer su clave pública, la IP remota desde la que se conecta, el último handshake y el tráfico intercambiado. Si el campo de “Último handshake” está vacío o muy antiguo, el cliente no se está conectando o algo lo está bloqueando.

en caso de no haber conexión, revisa que el puerto UDP (51820 o el que uses) esté abierto en el firewall del servidor (UFW, iptables, nftables) y en cualquier router intermedio. Si el servidor está detrás de un router doméstico, configura el port forwarding UDP de ese puerto hacia la IP interna del servidor. El problema puede afectar las apps concretas, consulta nuestra guía sobre qué hacer si las apps fallan con la VPN activada.

Si el túnel se levanta pero no tienes Internet desde el móvil, repasa que el reenvío de paquetes (net.ipv4.ip_forward y opcionalmente net.ipv6.conf.all.forwarding) esté activo y que las reglas de NAT apunten a la interfaz de salida correcta (eth0, ens3, etc.).

Los problemas de DNS se “huelen” cuando puedes hacer ping a una IP concreta (por ejemplo 1.1.1.1) pero no resolver dominios. En ese caso, revisa la línea DNS = en el .conf del cliente: puedes usar un DNS público (8.8.8.8, 1.1.1.1) o la IP del túnel del servidor si éste actúa como resolutor interno.

En cuanto a seguridad, más allá de la criptografía de WireGuard, hay una serie de buenas prácticas imprescindibles:

  • Protege las claves privadas: no las copies a sitios inseguros ni las compartas con nadie.
  • Restringe AllowedIPs por peer: da a cada cliente solo acceso a las redes que necesite, nada de barra libre.
  • Usa puertos UDP no triviales: cambiar el 51820 por otro alto reduce ruido de escaneos automáticos.
  • Mantén el sistema y WireGuard actualizados: parches al día siempre.
  • Filtra el acceso al puerto de WireGuard en el firewall para limitar quién puede intentar conectarse (por IP de origen cuando tenga sentido).

Cuando tienes CGNAT o quieres algo más avanzado: túnel a través de un VPS

Si tu operador te tiene bajo CGNAT o simplemente quieres separar la capa de acceso público de tu casa, puedes montar una solución algo más elaborada pero muy potente: usar un VPS como punto central y tu servidor doméstico como cliente. Luego te conectas al VPS desde Android y, a través de él, entras en tu LAN.

El esquema básico es este: en la nube levantas un WireGuard “servidor” (por ejemplo con Docker y un stack como linuxserver/wireguard o un repo ya preparado), habilitas reenvío y NAT, y en tu casa tienes una Raspberry Pi o PC siempre encendido que se conecta a ese VPS como peer. El VPS tiene IP pública y no sufre CGNAT, así que ahí sí puedes abrir puertos sin problema.

Un flujo típico con Docker podría ser:

  • En el VPS instalas Docker y Docker Compose, clonas un repositorio de configuración de WireGuard y levantas el contenedor con docker-compose up -d.
  • El contenedor genera automáticamente las claves del servidor y de varios peers (peer1, peer2…), guardando sus .conf en una carpeta config.
  • Ajustas el fichero de servidor para incluir tu subred doméstica (por ejemplo 192.168.1.0/24) en AllowedIPs del peer que usará tu Raspberry, y configuras iptables o reglas equivalentes en el host para enrutar tráfico entre la VPN y tu red de casa.
  • En la Raspberry clonas el mismo repo (o uno preparado), creas un wg0.conf con los datos generados para peer1, habilitas NAT local (para poder sacar tráfico de vuelta a la LAN) y levantas el cliente WireGuard en Docker o de forma nativa.

Desde ahí, cualquier otro dispositivo (incluido tu Android con la app de WireGuard) puede usar uno de los peers adicionales del VPS (peer2, peer3…) para conectarse. En la práctica, te conectas siempre a la IP del VPS, pero terminas llegando a los servicios de casa, incluso a través de CGNAT.

WireGuard con paneles web: WireGuard Easy, EasyPanel y compañía

Si todo esto te suena a demasiada consola, existen soluciones muy cómodas que te montan un panel web para gestionar WireGuard en 1 clic. Por ejemplo, sobre un servidor con EasyPanel puedes desplegar una app tipo WireGuard Easy vía template y olvidarte de escribir ficheros a mano.

El flujo con estos paneles suele ser:

  • Accedes al panel (EasyPanel u otro) con tu usuario.
  • Instalas el template WireGuard Easy, definiendo parámetros como dominio/IP pública (WG_HOST), puerto UDP, subred VPN y DNS.
  • El sistema arranca un contenedor que expone un interfaz web protegido por contraseña donde ves la lista de peers, estadísticas y opciones de configuración.
  • Para añadir un cliente solo rellenas un formulario con su nombre; el panel genera las claves, le da una IP y te muestra el QR listo para escanear con Android, además de permitirte descargar el archivo .conf.

Esto es comodísimo en entornos donde hay más gente usando la VPN (familia, equipo de trabajo, etc.), porque puedes activar o revocar accesos en segundos sin tener que explicar nada técnico. Además, si despliegas WireGuard Easy en un VPS, centralizas todo el acceso remoto a tu red doméstica y a otras sedes.

WireGuard en otros sistemas: Windows, macOS, Linux, iOS

Aunque aquí nos centramos en Android, WireGuard se lleva igual de bien con escritorios y otros móviles. En Windows, por ejemplo, descargas el cliente oficial, instalas, pulsas “Add Tunnel”, eliges “Add empty tunnel” o “Import from file”, y el propio programa puede generarte el par de claves.

El formato de configuración es el mismo: bloque con tu PrivateKey, Address y DNS, y bloque con la PublicKey del servidor, Endpoint y AllowedIPs. Una vez guardado, solo tienes que pulsar “Activate” para que se levante la interfaz y empiece a circular tráfico.

En iOS el proceso es muy parecido al de Android: instalas la app de WireGuard desde App Store, creas un túnel nuevo y puedes importar el .conf vía archivo o escanear el QR que generaste con qrencode o desde un panel tipo WireGuard Easy. Después activas el túnel con un interruptor y ya estás dentro de tu red doméstica.

En Linux de escritorio puedes usar la propia herramienta de línea de comandos (wg-quick up wg0) o integrarlo con NetworkManager, importando el .conf desde la interfaz gráfica. En macOS también existe cliente oficial con una experiencia muy parecida a la de Windows.

Al final, tener el mismo protocolo y esquema de configuración en todas las plataformas simplifica mucho la vida: replicas la lógica de un cliente a otro cambiando solo las claves y la IP de túnel.

VPN Android
Artículo relacionado:
Las mejores VPN para Android: guía definitiva con todas las opciones, riesgos y consejos para 2025 y más allá

Con toda esta combinación —servidor Linux o Docker bien configurado, posible apoyo de un VPS si tienes CGNAT, paneles web para simplificar la gestión y la app de WireGuard en Android— puedes montar una VPN doméstica robusta, rápida y segura que te permita acceder a tu red de casa, a tus archivos y servicios y navegar protegido en WiFi públicas sin depender de terceros ni de soluciones comerciales opacas. Comparte esta información para que otros sepan de la novedad.