Redes

Configura PiVPN para Acceso Remoto: Guía Definitiva para Sysadmins Linux 2026

TL;DR — Lo que vas a tener al final

  • Tiempo de setup: 25-45 minutos para P2P, 1-2 horas para hub-and-spoke.
  • Requisitos: Linux con kernel 5.6+, root, IP pública (o PersistentKeepalive).
  • Resultado: Túnel cifrado Curve25519/AES-256/Chacha20 con baja latencia.
  • Troubleshooting: UDP bloqueado, AllowedIPs mal escrita, `wg show` y `tcpdump` son tus amigos.

Por qué PiVPN cuando WireGuard puro también existe

Si ya configuraste una VPN WireGuard a mano y te tocó pelearte con wg genkey, con iptables para NAT, con unattended-upgrades que nadie configura por defecto, con claves para rotar manualmente cada vez que sumas un cliente, y con un script casero para generar los QR de los móviles, entiendes por qué existe PiVPN. Es un instalador de un solo comando que toma una máquina Debian o Ubuntu recién instalada y la convierte en un servidor VPN operativo con hardening serio, todo bajo un comando pivpn que cubre la operación del día a día.

El dilema real no es PiVPN versus WireGuard: PiVPN es WireGuard (u OpenVPN, según la rama que elijas durante el install) más un montón de defaults razonables que de otro modo tendrías que escribir a mano. El dilema es PiVPN versus Tailscale, NetBird o Headscale. La diferencia operativa es grande: PiVPN deja un servidor VPN tradicional que tú controlas, sin plano de control externo, sin cuenta en un servicio, sin DERP relay, y sin Vendor lock-in. Pagas esa autonomía con más trabajo manual en la gestión de claves y en mantener la máquina al día.

¿Cuándo PiVPN es la opción correcta? Cuando quieres acceso remoto a tu propia red desde el celular o la laptop cuando viajas, sin pasar por un proveedor. Cuando quieres una salida de internet cifrada desde redes que no son de confianza (hotel, café, cowork). Cuando administras un homelab pequeño y necesitas llegar al servidor desde fuera sin exponer SSH al internet público. Cuando vas a sumar entre uno y veinte clientes — un número donde el modelo de perfiles manuales de pivpn add sigue siendo cómodo, y antes de que la gestión de claves se vuelva un dolor que pide un plano de control automatizado.

¿Cuándo NO usar PiVPN? Cuando los clientes están detrás de NAT simétrico estricto y nadie tiene IP pública fija (ahí Tailscale/NetBird resuelven mejor con NAT traversal cooperativo). Cuando vas a manejar más de 50 perfiles de cliente activos. Cuando necesitas SSO, ACLs por usuario o sincronización con Google Workspace/Okta. Cuando no quieres mantener un parche mensual del servidor tú mismo. Para esos casos hay que mirar otras herramientas; al final de la guía tienes un comparativo rápido.

Lo que necesitas antes de tocar el instalador

Reuní esta lista antes de empezar. Pararse a medio install a buscar una IP o un puerto es la causa número uno de setups rotos:

  • Una máquina con Debian 12 (Bookworm) o Ubuntu 22.04/24.04 LTS recién instalada y actualizada. Raspberry Pi OS Lite funciona igual, y es el target original del proyecto. La guía asume Ubuntu 24.04 Noble, pero los comandos son idénticos en Debian 12 salvo donde se aclara.
  • Acceso root o un usuario con sudo sin contraseña (PiVPN lo requiere durante el install).
  • Una IP pública IPv4 estable, fija o dinámica con un dominio apuntando vía DDNS. Para ISPs residenciales de LATAM (Claro, Telmex, VTR, Tigo) es común tener CGNAT; si curl ifconfig.me desde el servidor devuelve una IP distinta a la de tu interfaz WAN, estás detrás de CGNAT y esta guía no aplica directo — necesitarías Tailscale o un relay externo.
  • Un puerto UDP libre para WireGuard (por defecto 51820) o TCP/UDP para OpenVPN (1194). Confirmá que está abierto y reachable desde internet, no solo en la LAN. En el router, abre el puerto hacia la IP local del servidor y asociá la IP local a la MAC del servidor (DHCP estático o reserva) para que no cambie tras un reinicio del router.
  • Un hostname público para los clientes o, alternativamente, la IP pública. WireGuard funciona por IP, pero un hostname con DDNS te salva si la IP dinámica cambia entre renovaciones del ISP.

Instalación: un comando y un wizard interactivo

El install de PiVPN vive en https://install.pivpn.io y se invoca con curl | bash. Es seguro pipearlo porque el script entero es Bash legible en el repo público, y no pide credenciales durante la ejecución. Antes de correrlo, asegurate de tener el sistema actualizado:

sudo apt update && sudo apt -y full-upgrade
sudo reboot

El reboot es importante: PiVPN detecta si hay un kernel nuevo y rechaza instalar módulos DKMS sobre un kernel en uso. Tras volver, lanzá el wizard:

curl -L https://install.pivpn.io | bash

El script abre un wizard TUI en la terminal con preguntas. Las decisiones que importan:

  • WireGuard u OpenVPN: WireGuard es la elección correcta para 2026 en cualquier caso nuevo. OpenVPN queda solo si necesitas compatibilidad con un cliente legacy o un feature específico de OpenVPN que WireGuard no tiene (clientes TCP, ofuscación TLS, OAuth plugins). Esta guía asume WireGuard.
  • Puerto de escucha: deja el 51820 por defecto salvo que choque con algo. Cámbialo solo si sabes por qué.
  • DNS para los clientes: PiVPN ofrece Pi-hole local, AdGuard Home, Quad9, Cloudflare o un DNS custom. Si ya tienes un Pi-hole o AdGuard Home en la misma red, elige “Custom” y apunta a su IP. Si no, Quad9 (9.9.9.9) o Cloudflare (1.1.1.1) andan bien como default.
  • unattended-upgrades: deja habilitada la opción que ofrece el wizard. Es uno de los mayores aportes de PiVPN sobre instalar WireGuard a mano: el servidor se parchea solo, y eso evita que te olvides durante seis meses y alguien encuentre una CVE vieja sin parchar.
  • Modo de seguridad: PiVPN activa nftables/ufw según lo que tengas, abre el puerto WireGuard y deja el resto del firewall como estaba. No reinventa tu firewall existente.

Al terminar, el wizard imprime una confirmación con la IP del servidor VPN (10.6.0.1/24 por defecto para WireGuard) y te dice que reinicies para que unattended-upgrades quede programado. Reiniciá:

sudo reboot

Tras el reboot confirmá que todo quedó arriba con pivpn -d (modo debug). El comando imprime las rutas, la interfaz wg0, el puerto de escucha y los peers conectados. Si la interfaz no existe o el puerto no está abierto, el install no completó bien.

Sumar clientes: pivpn add y QR para el móvil

El ciclo de uso más común es agregar un cliente nuevo. El comando pivpn add genera un par de claves, escribe la config del cliente, y opcionalmente genera un QR para configurar el móvil con un escaneo. Es interactivo por defecto:

sudo pivpn add

El comando pregunta el nombre del cliente (sin espacios, sin caracteres raros; usa algo como laptop-soylinux, celular-mama, vps-spain). Luego pregunta si quieres un QR para móvil. Di que sí si vas a usar un celular; el QR se imprime en la terminal y se lee con la app oficial de WireGuard (Android/iOS) apretando el “+” y eligiendo “Escanear QR”. Para una laptop o una PC de escritorio, di que no y usa el archivo .conf resultante:

ls /home/$USER/configs/   # archivos .conf con los perfiles
sudo cat /home/$USER/configs/laptop-soylinux.conf

El archivo .conf se copia a la máquina cliente (con scp o cualquier método seguro) y se importa con la app de WireGuard correspondiente. En Linux desktop, nmcli connection import type wireguard file /path/al/perfil.conf lo deja listo en NetworkManager. En Windows o macOS, doble click sobre el archivo desde la app oficial lo importa.

Para listar y revocar perfiles ya creados:

sudo pivpn -l              # lista clientes existentes
sudo pivpn -r              # revoca un cliente (lo deshabilita)
sudo pivpn -c              # muestra clientes conectados ahora

Integración con Pi-hole: filtrar publicidad en la VPN

Uno de los patrones más populares es combinar PiVPN con un Pi-hole local. Resultado: cuando te conectas a la VPN desde el celular en un hotel, todo el tráfico pasa por el Pi-hole de tu casa antes de salir a internet, bloqueando publicidad y trackers también cuando estás fuera de la LAN. Para activarlo, durante el wizard de PiVPN elige la opción “Pi-hole” cuando pregunta por el DNS. Si ya tenías PiVPN instalado sin esa integración, editá /etc/wireguard/setupVars.conf y cambiá la variable pihole a la IP de tu Pi-hole (típicamente la del mismo servidor si coexisten, o la de otra máquina en la LAN):

sudo nano /etc/wireguard/setupVars.conf
# Plihole = cIPofYourPihole
sudo pivpn -d   # valida la config

Tras el cambio, regenerá los perfiles existentes con pivpn add (rotar uno por uno, los perfiles viejos siguen funcionando pero apuntan al DNS anterior) o pedí a cada cliente que reimporte la config desde el QR nuevo. Lo mismo aplica para AdGuard Home si prefieres esa vía.

Operación y mantenimiento del día a día

PiVPN no es un servicio mágico que se olvida. Hay cuatro tareas recurrentes que conviene planificar:

Aplicar parches: unattended-upgrades corre solo para security updates, pero las nuevas versiones de WireGuard o del propio PiVPN no siempre entran en security. Una vez por mes, sudo apt update && sudo apt -y full-upgrade para tomar todo lo nuevo y reiniciar si el kernel cambió. PiVPN no se rompe con upgrades normales; el script de install es idempotente y se puede relanzar para tomar mejoras.

Rotar la clave del servidor: si sospechas compromiso o simplemente quieres rotar preventivamente cada año, regenerá el par de claves del servidor y reescribí /etc/wireguard/wg0.conf. Todos los perfiles de cliente dejan de funcionar hasta que actualices la clave pública nueva en cada config:

cd /etc/wireguard
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
# Reemplazar PrivateKey en wg0.conf y reiniciar
sudo systemctl restart wg-quick@wg0

Monitoreo: sudo pivpn -c te dice quién está conectado ahora mismo. Para métricas históricas, exportá la salida de sudo wg show all dump con un cron a InfluxDB o a un node_exporter con textfile collector. Lo que quieres ver en una alerta: peers con latest handshake de más de 5 minutos en una red donde deberían estar activos (indica desconexión); transferencia diaria por peer creciendo monótonamente sin pausa (indica que un cliente está descargando mucho, posible compromiso o backup mal configurado).

Backup: la pieza que más duele perder es el directorio /etc/wireguard/ entero (claves privadas y públicas, wg0.conf) y /home/$USER/configs/ (perfiles de cliente). Copialos a un destino cifrado fuera del servidor. Sin esos archivos, agregar o revocar clientes se vuelve adivinar. Un backup mínimo antes de tocar nada:

sudo tar czf pivpn-backup-$(date +%F).tar.gz /etc/wireguard /home/$USER/configs
sudo age -r age1yourkey... pivpn-backup-2026-10-12.tar.gz > pivpn-backup-2026-10-12.tar.gz.age

Troubleshooting: lo que se rompe y por qué

Cuatro problemas recurrentes que vale la pena reconocer de una:

  • El cliente se conecta pero no llega a internet: el problema casi nunca es WireGuard sino el forwarding + NAT. sudo sysctl net.ipv4.ip_forward tiene que devolver 1. Si no, echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf && sudo sysctl -p. Confirmá también que iptables -t nat -L POSTROUTING tenga una regla MASQUERADE para la subred WireGuard (10.6.0.0/24 por defecto).
  • El servidor WireGuard no aparece en wg show: el servicio wg-quick@wg0 no levantó. sudo systemctl status wg-quick@wg0 te dice por qué; típicamente un error de sintaxis en wg0.conf. sudo wg-quick strip wg0 te muestra la config que el servicio intenta levantar.
  • El móvil dice “handshake failed” pero la laptop anda: el problema suele ser la app móvil. Forza el endpoint a la IP pública (no hostname) en el perfil del cliente, y verifica que el puerto UDP que abrió el wizard siga reachable desde una red externa con nc -uvz tu-ip-publica 51820. Si una red móvil 4G bloquea UDP a puertos no estándar, cambiá a un puerto común como el 53/UDP.
  • Perdiste la clave privada del servidor: no se puede recuperar. Tienes que generar un par nuevo (ver “Rotar clave” arriba), reescribir wg0.conf, y reemitir todos los perfiles de cliente con la nueva pública del servidor. De ahí la importancia del backup.

Cuándo PiVPN se queda corto (y qué usar en su lugar)

PiVPN hace bien lo que hace, pero conviene saber dónde deja de escalar. Para 1-20 clientes con dispositivo fijo y caso de uso “road warrior ocasional”, es perfecto. Arriba de eso o con requisitos nuevos, evalúa migrar:

Escenario PiVPN alcanza Conviene migrar a
Road warriors (1-10 móviles/laptops que se conectan a la casa) Sí, ideal —
Sitio-a-sitio entre 2-3 redes Sí, con dos wg0.conf simétricos WireGuard crudo con hub-and-spoke (guía aparte en este blog)
Mesh de 5-50 nodos sin servidor central No hay peer-to-peer transparente Tailscale, NetBird, Headscale
Clientes detrás de CGNAT estricto sin IP pública No funciona sin relay externo Tailscale/NetBird con servidor DERP o Headscale autohospedado
SSO con Google Workspace o Azure AD No, no hay plano de control Tailscale (nativo) o Twingate (Zero Trust)
Auditoría centralizada y logs por usuario Limitado (logs de wg-show) Netmaker o un plano de control propio
Homerseek de compliance con FIPS, etc. No, depende de distro y políticas locales OpenVPN Access Server (comercial) o strongSwan

La frontera práctica entre PiVPN y un mesh gestionado suele estar entre cinco y diez nodos. Abajo de eso, PiVPN es menos overhead operacional, menos conceptos nuevos y menos cuentas que dar de alta. Arriba, la inversión en aprender Tailscale/NetBird se paga sola.

Resumen

PiVPN es la forma rápida y razonablemente segura de tener tu propio servidor VPN en una Raspberry Pi, una VPS chica o cualquier Debian/Ubuntu que tengas a mano. El install es un comando, los defaults ya activan unattended-upgrades y un firewall mínimo, y la operación del día a día — agregar cliente, revocar, ver quién está conectado — son cinco comandos pivpn que se aprenden en una tarde. Para un homelab con 1-10 dispositivos que se conectan ocasionalmente o un sysadmin que quiere llegar a su servidor desde el celular sin exponer SSH al internet, es la opción correcta en 2026. Para mesh de docenas de nodos, SSO o auditoría centralizada, las herramientas mesh gestionadas resuelven mejor.

Preguntas frecuentes

¿Por qué Configura PiVPN para Acceso Remoto: Guía Definitiva para Sysadmins Linux 2026 es relevante para sysadmins Linux?

Forma parte del flujo diario de administración. Los conceptos explicados se aplican directamente a servidores en producción y resuelven problemas reales que enfrentan sysadmins hispanohablantes.

¿Qué necesito para empezar con Configura PiVPN para Acceso Remoto:?

Distribución Linux actualizada (Debian, Ubuntu, RHEL, Fedora o Arch), acceso root, y conexión a internet. Para producción: entorno de staging separado antes de aplicar cambios.

¿Cuáles son los errores más comunes con Configura PiVPN para Acceso Remoto:?

Los tres más frecuentes: (1) saltar la lectura de logs, (2) aplicar cambios directos en producción sin probar, (3) olvidar permisos y ownership. La documentación y un plan de rollback siempre.

¿Cuándo usar Configura PiVPN para Acceso Remoto: y cuándo una alternativa?

Esta solución es ideal para el caso descrito. Alternativas como Docker, Ansible o configuración manual pueden ser mejores según contexto: portabilidad, escala y reproducibilidad son los factores clave.

¿Cómo migro desde una configuración previa a Configura PiVPN para Acceso Remoto:?

Documentar el estado actual, probar la nueva configuración en staging, validar funcionalmente, y aplicar en producción con rollback plan listo. Los posts de SoyLinux incluyen troubleshooting para los problemas más comunes.

Lee también

Alfonso Moreno | Sysadmin Senior

Soy Alfonso, sysadmin senior con RHCE y más de 10 años administrando sistemas Linux para empresas y proyectos personales. Me especializo en infraestructura, redes, virtualización, monitoring, automation y self-hosting. Sobre SoyLinux.com SoyLinux.com es un blog técnico en español sobre Linux, software libre y self-hosting. Lo mantengo en mi tiempo libre. Áreas de expertise - Linux server administration: RHEL, CentOS, Rocky, Alma, Fedora, Debian, Ubuntu - Network services: Postfix, BIND, Samba, NFS, Squid - Virtualización y containers: KVM, Proxmox, Docker, Podman - Monitoring: Prometheus, Grafana, Zabbix - Automation: Ansible, Bash scripting - Self-hosting: Vaultwarden, Nextcloud, Jellyfin, Immich, Homelab Contacto - Email: [email protected]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *