VPNSmith
VPS Contabo
self-host-vpnINFO

Código QR de WireGuard: generarlo desde un .conf (qrencode)

Convierte un .conf de WireGuard en código QR con un solo comando qrencode, o crea configs y códigos QR en tu navegador. Y por qué el código QR es tu clave privada.

Por Eric Gerard · Fundador · VPNSmith - Especialista en VPN self-host y VPS GDPR6 min de lecturaPhoto via Pexels

Divulgación de afiliados - Este artículo contiene enlaces de afiliados de Contabo. Si contratas un VPS a través de ellos, ganamos una comisión sin coste adicional para ti.

Teclear una clave privada en base64 en el teclado de un teléfono es tan desagradable que la gente acaba copiando las configs por apps de mensajería, lo cual es peor. El código QR existe para evitar ambas cosas.

Es un solo comando, y lo que merece la pena leer es lo que ocurre después de escanearlo.

¿Todavía no tienes config, o no tienes una terminal a mano? Nuestro generador de config WireGuard crea el archivo del servidor y una config de cliente por dispositivo, cada una con su código QR, íntegramente en tu navegador: las claves se generan localmente con Curve25519 y no se envía nada a ningún servidor. No convierte un .conf existente; para eso, la herramienta es qrencode, a continuación. ¿Tampoco tienes servidor? Los archivos que genera funcionan en cualquier VPS con una IPv4 pública, por ejemplo un VPS Cloud 4 de Contabo a 5,50 €/mes (enlace de afiliado, permanencia de 24 meses, IVA incluido).

Generar uno

Instala el codificador:

apt install qrencode      # Debian, Ubuntu
dnf install qrencode      # Fedora, RHEL

Después, en la máquina que contiene la config del cliente:

qrencode -t ansiutf8 < /etc/wireguard/client1.conf

El código aparece en la terminal, dibujado con caracteres de bloque. Abre WireGuard en el teléfono, añade un túnel, elige escanear desde código QR y apunta la cámara a la pantalla. El túnel se añade con su nombre, direcciones, claves y peer, completo.

No hay ningún formato especial. El código QR contiene el archivo de config como texto plano. Cualquier cosa capaz de leer un código QR puede leer tu config.

El tamaño rara vez es un problema aquí. Una config de cliente WireGuard típica ocupa unos cientos de bytes, y el estándar QR llega hasta la versión 40, una cuadrícula de 177 por 177 módulos que almacena 2 953 bytes en el más bajo de sus cuatro niveles de corrección de errores. Una config cabe de sobra, y precisamente por eso todo, clave privada incluida, viaja en una sola imagen.

Para obtener un archivo en lugar de un dibujo en la terminal:

qrencode -o client1.png < /etc/wireguard/client1.conf

Si el código no se deja escanear, las causas habituales son una fuente de terminal que deforma los bloques, o una config muy larga. -t utf8 en lugar de ansiutf8 lo dibuja más pequeño, y reducir el tamaño de fuente de la terminal ayuda más que cualquier otra cosa.

Vista desde atrás, una mujer sostiene un smartphone para fotografiar un gran código QR impreso en un panel verde, con la pantalla mostrando el código encuadrado dentro de una app de pago en español
Vista desde atrás, una mujer sostiene un smartphone para fotografiar un gran código QR impreso en un panel verde, con la pantalla mostrando el código encuadrado dentro de una app de pago en español

Lo que importa de verdad

Una config de cliente WireGuard contiene PrivateKey: una clave Curve25519 de 32 bytes, escrita como 44 caracteres base64 en una sola línea. El código QR contiene la config. Por tanto, el código QR es la clave privada, en un formato diseñado para que una cámara lo lea a distancia.

Eso cambia la forma en que debes tratarlo:

  • No le hagas una foto. Una foto va a tu carrete y, en la mayoría de los teléfonos, directamente a una copia de seguridad en la nube.
  • No lo pongas en un mensaje de chat ni en un correo. Ambos son copias almacenadas que no controlas.
  • Limpia la terminal después de escanear. clear por sí solo no vacía el historial de desplazamiento. Usa reset, o cierra la ventana de la terminal por completo.
  • Borra los archivos PNG de inmediato. Un client1.png olvidado en un directorio personal sobrevive al motivo por el que se creó.
  • No lo muestres donde una cámara pueda verlo, lo que en una oficina compartida incluye la ventana que tienes detrás.

Una clave privada por cliente es la regla que el código QR hace fácil romper. Generar una sola config y escanearla en tres teléfonos les da a los tres la misma identidad, y entonces el servidor no puede distinguirlos, no puede revocar uno solo y enrutará mal el tráfico cuando dos estén conectados a la vez. Cómo añadir un peer distinto por dispositivo se explica en añadir un peer WireGuard.

Generar primero la config, si no tienes ninguna

El código QR es el último paso. Antes, el cliente necesita un par de claves y una entrada de peer en el servidor:

wg genkey | tee client1.key | wg pubkey > client1.pub

Después, una config que haga referencia a la clave pública del servidor, a su endpoint y a AllowedIPs, y un bloque [Peer] correspondiente en el servidor con client1.pub. Saltarse el lado del servidor es la razón más común por la que un túnel escaneado no se conecta a nada: el teléfono está configurado y el servidor nunca ha oído hablar de él.

Si prefieres no construir los archivos a mano, el generador de config escribe ambos lados a la vez (el [Interface] del servidor con cada bloque [Peer], más un archivo de cliente y un código QR por dispositivo), así que el teléfono que escaneas y el servidor con el que habla son coherentes desde el principio.

El servidor necesita una dirección IP pública que tu teléfono pueda alcanzar desde una red móvil. Una conexión doméstica detrás de CGNAT no la tiene (compruébalo con el verificador de puerto WireGuard); un VPS pequeño sí, por unos 5 € al mes.

★ Datacenter Núremberg GDPR · ✓ IPv4 dedicada incluida · puerto de 200 Mbit/s

Un servidor WireGuard que tu teléfono siempre puede alcanzar → Contabo Cloud VPS 45,50 €/mes (consultado el 18 oct. 2026, primeros 24 meses) · IPv4 pública fija · 4 vCPU, 8 GB RAM→

Las guías completas, incluido el lado del servidor, están en instalar WireGuard con PiVPN para una Raspberry Pi y en autoalojar en un VPS para un servidor alquilado. Ambas generan configs de cliente que puedes pasar directamente a qrencode.

Si el escaneo funciona pero el túnel no

El código QR ha cumplido su función en el momento en que el túnel aparece en la app. Todo lo que viene después es WireGuard normal y corriente.

Comprueba que el teléfono muestra un handshake reciente. Un peer sano repite el handshake aproximadamente cada 120 segundos, así que cualquier cosa de más de unos dos minutos en un túnel activo es un síntoma y no una pausa. Si no es así, repasa la solución de problemas del handshake: dirección del endpoint, puerto accesible desde fuera (51820/UDP por defecto), firewall del servidor y entrada del peer. Si el handshake funciona pero las páginas se quedan colgadas, es la MTU, algo especialmente frecuente en redes móviles.

Las notas de configuración específicas de cada plataforma están en configurar WireGuard en Android y configurar WireGuard en iOS.

★ Datacenter Núremberg GDPR · ✓ IPv4 dedicada incluida · puerto de 200 Mbit/s

Aloja tu VPN en tu propio VPS → ContaboAcceso root completo · IPv4 pública · elige tu región→

Preguntas frecuentes

¿Cómo creo un código QR de WireGuard?
Instala qrencode y pásale un archivo de config de cliente con la opción de salida en terminal: qrencode -t ansiutf8 < client.conf. La app móvil de WireGuard lo escanea directamente desde la pantalla. No hay ningún formato aparte: el código QR simplemente contiene el archivo de config como texto.
¿Es seguro compartir un código QR de WireGuard?
No. El código QR contiene el archivo de config completo, incluida la clave privada del cliente. Cualquiera que lo fotografíe, o que lo encuentre en una captura de pantalla o en el historial de la terminal, tiene acceso total a tu túnel como ese peer.
¿Puedo generar el código QR como archivo de imagen?
Sí, qrencode -o client.png < client.conf escribe un PNG. Bórralo en cuanto lo hayas escaneado, porque un archivo de imagen persiste de formas en que una visualización en terminal no lo hace, incluso en las copias de seguridad de fotos en la nube si acaba en una carpeta sincronizada.
¿Por qué mi teléfono escanea el código pero el túnel no se conecta?
El código QR solo transporta la config. Si el handshake nunca se completa, el problema está en la propia config o en la ruta de red: endpoint incorrecto, puerto incorrecto, firewall en el servidor, o falta en el servidor la entrada de peer para la clave pública de este cliente.