
WireGuard es un protocolo VPN moderno integrado directamente en el núcleo de Linux desde la versión 5.6. Esta guía cubre la configuración completa del servidor y del cliente en Debian 13 (Trixie) utilizando sólo el administrador de paquetes estándar y algunos archivos de configuración..
La mayoría de los administradores de sistemas todavía buscan OpenVPN Es una costumbre, pero hoy en día esto generalmente significa aceptar túneles más lentos, administrar unidades de autoridad de credenciales y tratar con perfiles que pueden llegar a 50 líneas antes de hacer algo significativo.
apoyador Sólo dos perfiles, un par de claves a cada lado y un túnel que aparece en un segundo harán el mismo trabajo. La compensación es apoyador Sólo atropella protocolo UDPpor lo que si su red bloquea activamente protocolo UDP tráfico o necesitas disfrazarlo como HTTPSEntonces OpenVPN Superar tcp puerto Capítulo 443 Sigue siendo la mejor opción.
por todo lo demás, apoyador es la configuración que desea hoy porque es más simple, rápida y fácil de instalar, configurar y mantener.
Cada comando a continuación se prueba Debian 13 (Trish) y Guardia de línea 1.0.0 y Núcleo de Linux 6.12. El servidor utiliza un 10.0.0.0/24VPN subredes y una única interfaz de red pública, pero puede ajustar ambas para adaptarlas a su entorno.
Instale WireGuard en Debian 13
existir Debian 13, apoyador Disponible en el repositorio principal, por lo que no es necesario agregar fuentes adicionales, simplemente actualice el manifiesto del paquete e instálelo en el servidor.
sudo apt update && sudo apt install wireguard -y
este sudo El prefijo utiliza privilegios de root para ejecutar comandos, lo cual es necesario para cualquier operación que involucre archivos del sistema, instalación de paquetes o cambio de servicios. si ves Permission deniedte olvidaste sudo prefijo o su usuario no está en el grupo sudo.
Una vez completada la instalación, confirme la instalación y verifique si el módulo principal está cargado correctamente:
sudo modprobe wireguard lsmod | grep wireguard

si modprobe Devolver un error, por ejemplo. Module wireguard not foundes posible que falten los archivos de encabezado principales, así que instálelos primero y vuelva a intentarlo:
sudo apt install linux-headers-$(uname -r)
Generar par de claves del servidor WireGuard
apoyador usar gente/privado Pares de claves utilizados para la autenticación en lugar de credenciales. Cada par, ya sea servidor o cliente, genera su propio par de claves y los pares solo intercambian sus claves públicas. La clave privada nunca sale de la máquina que la generó.
Genere el par de claves del servidor y guárdelo en apoyador Directorio de configuración:
sudo mkdir -p /etc/wireguard sudo chmod 700 /etc/wireguard wg genkey | sudo tee /etc/wireguard/server_private.key > /dev/null sudo sh -c 'wg pubkey < /etc/wireguard/server_private.key' | sudo tee /etc/wireguard/server_public.key > /dev/null
Estos dos comandos están separados porque clave privada El propietario del archivo es raíz atrás sudo tee Lo escribí y luego un simple bash. < Redirect no puede leer 600 archivos propiedad de root como usuario normal.
Envuelva la segunda directiva en sudo sh -c Ejecute la redirección completa como raízlo que resuelve el problema. este > /dev/null Las pulsaciones de teclas en cada fila desactivan la impresión en el terminal.
A continuación, verifique que ambos archivos se hayan escrito correctamente:
sudo cat /etc/wireguard/server_private.key sudo cat /etc/wireguard/server_public.key

Ambos deberían devolver un base de 64 bits La cadena está en una línea. Si alguno de los archivos está vacío, vuelva a ejecutar ese comando en particular antes de continuar.
cierre clave privada Entonces solo el root puede leerlo:
sudo chmod 600 /etc/wireguard/server_private.key
advertir: Nunca comparta ni exponga server_private.key. Si se filtra, cualquiera puede hacerse pasar por su servidor. este clave pública Siéntase libre de compartir de forma segura con cualquier compañero que necesite una conexión.
Lea el valor de la clave privada para poder pegarlo en el perfil en el siguiente paso:
sudo cat /etc/wireguard/server_private.key
producción:
wOF5RcqK3qCYqqEKZif+4tQyNpZzNCBUAiplO3guSlU=
Configuración del servidor WireGuard en Debian 13
Crear perfil de servidor /etc/wireguard/wg0.confque define el nombre de la interfaz de red virtual apoyador Creará.
sudo nano /etc/wireguard/wg0.conf
Agregue lo siguiente, reemplazando server-private-key El valor real proviene de server_private.key y eth0 El nombre real de la interfaz de red pública de su servidor, que puede encontrar a través de:
ip a
Ahora agregue las siguientes líneas a wg0.conf documento.
[Interface] Address = 10.0.0.1/24 ListenPort = 51820 PrivateKey = server-private-key PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Esto es lo que hace cada directiva:
Address = 10.0.0.1/24Asigne la IP del servidor dentro de la subred VPN. Cada cliente obtendrá una dirección en la misma subred.10.0.0.0/24alcance.ListenPort = 51820es el puerto UDP en el que escucha WireGuard; este es el valor predeterminado estándar.PrivateKeyEs la clave privada del servidor, que se utiliza para autenticarse ante los pares conectados.PostUpEjecute estos comandos de iptables cuando aparezca la interfaz para habilitar el reenvío de paquetes y el enmascaramiento NAT para que los clientes VPN puedan acceder a Internet a través del servidor.PostDownCuando falla una interfaz, las mismas reglas se pueden descartar limpiamente.
Guarde y cierre el archivo, luego bloquéelo:
sudo chmod 600 /etc/wireguard/wg0.conf
Habilite el reenvío de IP para WireGuard
Para que el servidor enrute el tráfico del cliente a Internet, el kernel de Linux debe habilitar el reenvío de IP. Sin él, los paquetes del cliente VPN llegarán al servidor wg0 interfaz y permanece allí.
sudo nano /etc/sysctl.conf
Busque y descomente esta línea:
net.ipv4.ip_forward=1
Aplicar inmediatamente sin reiniciar:
sudo sysctl -p
producción:
net.ipv4.ip_forward = 1
Descomente si también desea el reenvío de IPv6 net.ipv6.conf.all.forwarding=1 en el mismo archivo.
Si esto le evita tener que luchar contra una regla de iptables que parece ser correcta pero que no enruta nada, compártala con un colega que todavía esté solucionando problemas de un túnel VPN roto.
Iniciar el servidor WireGuard
proponer apoyador interfaz y hacer que se inicie automáticamente al arrancar:
sudo systemctl start wg-quick@wg0 sudo systemctl enable wg-quick@wg0
Comprueba que sale limpio:
sudo systemctl status wg-quick@wg0
producción:
● [email protected] - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; preset: enabled)
Active: active (exited) since Tue 2026-04-28 07:13:32 EDT; 1min 2s ago
Invocation: 202a03eee5b7429a90bd3644a3af127e
Docs: man:wg-quick(8)
man:wg(8)
quickstart/
Process: 5805 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
Main PID: 5805 (code=exited, status=0/SUCCESS)
Mem peak: 3.7M
CPU: 56ms
visualización de estado active (exited) en lugar de active (running) porque wg-quick Es un servicio único que se utiliza para configurar la interfaz y salir. La interfaz en sí permanece abierta.
Confirmar vía:
sudo wg show
producción:
interface: wg0 public key: zsgn/mICRf3WE5aG/BdsUPjKyWqX767j6oIEd/totTw= private key: (hidden) listening port: 51820
si wg show No se devuelve nada y la interfaz no aparece, por lo que debe verificar los registros usando el siguiente comando para encontrar el error exacto.
sudo journalctl -u wg-quick@wg0 -n 30 --no-pager
La causa más común es el nombre de interfaz incorrecto. PostUpdesaparecido private key valor o error de sintaxis wg0.conf.
Configurar el cliente WireGuard y generar claves
En la máquina cliente (estoy usando Ubuntu26.04), Instalar apoyador De la misma manera:
sudo apt update && sudo apt install wireguard -y
Utilice los mismos dos patrones de comando para generar un par de claves de cliente:
sudo mkdir -p /etc/wireguard sudo chmod 700 /etc/wireguard wg genkey | sudo tee /etc/wireguard/client_private.key > /dev/null sudo sh -c 'wg pubkey < /etc/wireguard/client_private.key' | sudo tee /etc/wireguard/client_public.key > /dev/null sudo chmod 600 /etc/wireguard/client_private.key
Verifique que ambos archivos se escribieron correctamente:
sudo cat /etc/wireguard/client_private.key sudo cat /etc/wireguard/client_public.key
Ambos deberían devolver una única cadena base64 en una línea. Si alguno de los archivos está vacío, vuelva a ejecutar ese comando en particular antes de continuar.

leer Valor de la clave privada del cliente Entonces puedes pegar esto en el perfil:
sudo cat /etc/wireguard/client_private.key
producción:
+BIFRJG5sa38Qiejstv1L97z7xNTR0pVuRUXHqzrI3k=
Crear un perfil de cliente:
sudo nano /etc/wireguard/wg0.conf
Agregue lo siguiente, reemplazando los valores del marcador de posición con su clave real y la IP del servidor. reemplazar client-private-key valor para los clientes client_private.key, server-public-key con valor del servidor server_public.keyy server-ip Utilice la dirección IP pública del servidor, que puede encontrar en el servidor de la siguiente manera:
curl -s ifconfig.me
Añade las siguientes líneas a wg0.conf documento.
[Interface] Address = 10.0.0.2/24 PrivateKey = client-private-key DNS = 8.8.8.8 [Peer] PublicKey = server-public-key Endpoint = server-ip:51820 AllowedIPs = 0.0.0.0/0 PersistentKeepalive = 25
Esto es lo que hace cada directiva:
Address = 10.0.0.2/24Proporcione al cliente una IP dentro de la subred VPN y cada cliente adicional obtendrá la siguiente dirección, p.10.0.0.3,10.0.0.4etc.DNS = 8.8.8.8Le indica al cliente que utilice el solucionador de DNS de Google mientras el túnel está activo para evitar fugas de DNS.PublicKey under [Peer]es la clave pública del servidor, así es como el cliente verifica que se está comunicando con el servidor correcto.Endpointes la IP pública del servidor y el puerto WireGuard.AllowedIPs = 0.0.0.0/0Enrute todo el tráfico a través del túnel, o para túneles divididos en los que solo subredes específicas pasen por la VPN, reemplácelo con esos rangos de subred.PersistentKeepalive = 25Los paquetes Keep-Alive se envían cada 25 segundos para mantener el túnel activo a través de enrutadores NAT y firewalls que interrumpen las conexiones UDP inactivas.
Bloquear la configuración del cliente:
sudo chmod 600 /etc/wireguard/wg0.conf
pista: Para cada nuevo cliente que agregue, genere un nuevo par de claves en la computadora cliente y agregue un nuevo par de claves [Peer] Configuración del servidor de bloques. Nunca reutilice pares de claves entre clientes, ya que las claves individuales le permiten revocar el acceso de un cliente sin tocar a otros clientes.
Agregue el cliente como par en el servidor
Volver arriba servidoragregue la clave pública del cliente a la configuración del servidor.
sudo nano /etc/wireguard/wg0.conf
Adjuntar un [Peer] bloque inferior y asegúrese de reemplazarlo client-public-key valor para los clientes client_public.key.
[Peer] PublicKey = client-public-key AllowedIPs = 10.0.0.2/32
Aplique el nuevo par sin reiniciar la interfaz, lo que eliminará todas las conexiones activas:
sudo wg addconf wg0 <(sudo wg-quick strip wg0)
O recargar limpiamente usando:
sudo systemctl restart wg-quick@wg0
Confirmar el registro de pares:
sudo wg show
producción:
interface: wg0 public key: zsgn/mICRf3WE5aG/BdsUPjKyWqX767j6oIEd/totTw= private key: (hidden) listening port: 51820 peer: BlNNCOPNwUOYq6y5tInMw4voCrh5f9aZ7ZkUNuWK3Gc= allowed ips: 10.0.0.2/32
Las entradas de pares aparecen en wg show Confirme que el servidor conoce al cliente. Todavía no muestra el protocolo de enlace porque el cliente aún no está conectado.
Conecte el cliente y verifique el túnel.
En la computadora cliente, abra la interfaz WireGuard:
sudo systemctl start wg-quick@wg0 sudo systemctl enable wg-quick@wg0
Verificar el estado de la conexión:
sudo wg show
producción:
interface: wg0 public key: BlNNCOPNwUOYq6y5tInMw4voCrh5f9aZ7ZkUNuWK3Gc= private key: (hidden) listening port: 47438 fwmark: 0xca6c peer: zsgn/mICRf3WE5aG/BdsUPjKyWqX767j6oIEd/totTw= endpoint: 192.168.122.211:51820 allowed ips: 0.0.0.0/0 latest handshake: 32 seconds ago transfer: 1.81 KiB received, 1.86 KiB sent persistent keepalive: every 25 seconds
este latest handshake La línea es el indicador clave. Si se muestra un valor de tiempo, el túnel se ha iniciado y ambas partes han verificado las claves de la otra parte. Si no se muestra nada, el protocolo de enlace aún no se ha completado.
Verifique la conectividad de un extremo a otro haciendo ping a la IP VPN del servidor desde el cliente:
ping 10.0.0.1
producción:
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.958 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=1.75 ms 64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=2.85 ms 64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.796 ms ^C --- 10.0.0.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 0.796/1.588/2.854/0.814 ms
Confirma que tu tráfico realmente está llegando vpn Comprobando tu IP pública desde el cliente:
curl -s ifconfig.me
La IP devuelta debe coincidir con la IP pública de su servidor VPN, no con la dirección ISP local de su cliente. Si su IP local aún se muestra, verifique AllowedIPs = 0.0.0.0/0 Establecido en la configuración del cliente, el reenvío de IP y el enmascaramiento NAT están activos en el servidor:
sudo wg show sudo iptables -t nat -L -n -v
notas: Si el protocolo de enlace nunca se completa, la causa más común es un bloqueo del firewall protocolo UDP puerto 51820 En el servidor, la clave pública del servidor en la configuración del cliente es incorrecta o la clave pública del cliente en la configuración del cliente del servidor es incorrecta. [Peer] obstruido. Antes de profundizar más, observe más de cerca estas tres secciones.
Si esto permite que su túnel WireGuard se inicie en una sola sesión, compártalo con su equipo y ahórreles horas de tiempo de depuración.
Agregar más clientes para WireGuard
Para cada cliente adicional, el proceso consta de los mismos tres pasos.
- Genere un par de claves en el nuevo cliente.
- Crear un
wg0.confTener una dirección única para ese cliente, p.e.10.0.0.3/24. - Añadir uno nuevo
[Peer]Bloquear configuraciones de servidor que apunten a la clave pública de este clienteAllowedIPs = 10.0.0.3/32.
Cada cliente tiene su propio par de claves y su propia IP. Eliminar un cliente más tarde es tan simple como eliminar su cliente [Peer] Bloquear y recargar desde la configuración del servidor:
sudo systemctl restart wg-quick@wg0
No es necesario revocar ningún certificado ni mantener ninguna CA.
en conclusión
tienes un trabajo ahora WireGuard VPN Se inicia el servidor Debian 13 Cliente Linux con conexiones por cable, reenvío de IP, enmascaramiento NAT y administración persistente de systemd.
en comparación con OpenVPNtoda la configuración requiere dos archivos de configuración y algunos comandos, y una vez que ambas partes tienen las claves públicas de la otra parte, el túnel se inicia en un segundo.
Ahora, para ir un paso más allá, agregue un segundo cliente con un nuevo par de claves y una IP única, p. 10.0.0.3confirme su conexión independiente y luego elimínelo eliminándolo [Peer] Bloquear y recargar la configuración del servidor.
¿Ha migrado recientemente de OpenVPN a WireGuard o es la primera vez que configura una VPN? ¿Cómo es la topología de su red? Cuéntanos en los comentarios la siguiente.









