Tutoriales, noticias y soluciones informáticas

Tutorial: Cómo configurar un servidor de VPN veloz con Wireguard

Persona trabajando con el ordenador

Poder acceder a los dispositivos de nuestra red local desde fuera de nuestro hogar o empresa cada vez se está volviendo más importante. Y la verdad es que contínuamente surgen más y más tecnologías que nos facilitan el acceso remoto a nuestros dispositivos. Seguro que muchos de vosotros habéis usado programas como Team Viewer o AnyDesk para acceder a vuestro ordenador desde Internet. Por no decir que después de la pandemia de COVID19 se disparó la necesidad de teletrabajar en muchas empresas.

Algo que he visto de forma recurrente han sido empresas en multitud de sectores usando alguna combinación de VPN + Escritorio remoto. El trabajador, desde su domicilio, primero se conecta a una VPN de la empresa y luego lanza una aplicación de escritorio remoto para acceder al ordenador de su puesto de trabajo. De esta forma puede trabajar desde casa como si estuviera en la oficina. De hecho en un artículo anterior vimos cómo podemos montar nuestro propio servidor de VPN casero con OpenVPN (bueno… con su hermano pequeño que es PiVPN).

Lo recuerdo y lo uso todos los días. Para poder acceder desde fuera de mi casa a los dispositivos que tengo encendidos va genial... pero le veo dos problemas. Por un lado es un poco rollo darle acceso a alguien que no tiene ni idea de cómo configurar una VPN. Y por otro lado si quiero transferir archivos grandes o muchos archivos pequeños la transferencia es muuuuy lenta. El рοгոo no se descarga sólo ¿Sabías?
GIF animado mostrando sorpresa.

Espero haber leído mal. No sé por qué no te he baneado todavía, Usario Anónimo.

En fin… esos problemas que indicas para esas… ejem… tareas tan importantes se pueden resolver de varias formas, y precisamente hoy vamos a ver cómo instalar y configurar un servidor VPN completamente distinto que nos va a permitir lo siguiente:

  • Por un lado vamos a lograr lo que ya conseguíamos con el OpenVPN: Acceder a los dispositivos de nuestra red local. Y además si tenemos un Pi-Hole bloqueando la publicidad dentro de nuestra red, podremos aprovecharlo para bloquear la publicidad de nuestros dispositivos móviles simplemente conectándolos a esta nueva VPN.
  • Además vamos a tener a nuestra disposición una página web desde la que crear cuentas nuevas de VPN. Esa página también nos permitirá descargarnos los perfiles de VPN de cada usuario e incluso generar códigos QR para que los usuarios añadan la VPN a sus dispositivos simplemente apuntando la cámara del mismo al código.
  • Por último, todo lo que vamos a configurar está especialmente optimizado para lograr tasas de transferencias muy altas en comparación con otros tipos de protocolos de VPN. Así que lograremos velocidades de transferencia mucho mayores que con OpenVPN sobre la misma infraestructura.
¡Genial! Pero te veo venir. Seguro que nos vas a decir que contratemos tal o cual servicio de VPN... y yo no me quiero gastar ni un duro, que estoy pelao. 
Logotipo de Wireguard

Tranquilo. No vas a tener que gastarte ni un duro, porque todo lo vamos a montar con software completamente gratuito. Además no te confundas: la mayoría de VPN’s que vas a ver publicitadas por internet están destinadas a conseguir anonimato por internet (o hacer que nuestra conexión de internet salga por un país determinado). Lo que vamos a montar no pretende esos objetivos, sinó acceder desde fuera de nuestra red a los contenidos que tengamos en ella.

El software que nos permitirá crear nuestra nueva red privada virtual se llama Wireguard, y además de gratuíto es software libre. No voy a entrar en las características exactas de este software. Ya sabéis que no me gusta meterme en detalles demasiado técnicos. Pero sí quiero comentar antes de empezar que este software es muy ligero y desde 2020 está implementado directamente en el kernel de linux. Así que no estamos hablando de software raruno, sinó algo que está más que probado y cumple con estándares de seguridad modernos. Veamos cómo configurar un servidor de VPN con Wireguard.

1- Requisitos previos.

Para poder montar un servidor de VPN con Wireguard siguiendo las instrucciones de este tutorial vais a necesitar lo siguiente:

  • Un equipo con Ubuntu 20.04 o superior instalado (Recomiendo la versión «Server»). Aunque siendo justos, es más que probable que todo lo que indico aquí funcione tal cual en cualquier distribución linux basada en Debian, incluído Raspbian.
Para el carro chaparro. ¿Me estás diciendo que esto no lo podemos instalar en Windows? ¡Si Windows es lo que usa todo el mundo!

El cliente de Wireguard lo vamos a poder usar en el sistema operativo que queramos (en Windows, Mac OS , iOS, Android, GNU-Linux, etc…) pero aquí vamos a enseñar a instalar el servidor (sólo la parte de servidor) bajo linux. ¿Por qué? Pues por múltiples motivos.

Te podría decir que resulta más eficiente energéticamente tener un servidor linux montado para estas tareas (no necesita entorno gráfico ni ejecutar mil cosas de fondo). Sobre todo si piensas que puedes montar todo esto en una raspberry con un consumo ridículo. O también podría justificarlo indicándote que un Windows que no sea una versión «Server» tiene conexiones limitadas y no puede manejar tantas conexiones simultáneas como un linux cualquiera. O incluso podría decirte que en las versiones «Server» de Windows deberías pagar por «Cals de usuario» si necesitas que se conecten más de 4 personas a la vez a ese servidor.

Instalar un servidor de… cualquier cosa en Windows es consumir recursos tontamente y un dolor de cabeza. Pero oye… si te gusta despilfarrar la energía de tu servidor y darte cabezazos contra una pared cuando falle algo, tienes aquí un completo tutorial de cómo se crea un servidor de VPN con Wireguard bajo Windows. Aunque ya digo: no se lo recomendaría ni a mi peor enemigo. Pero veamos qué más necesitamos.

  • Ese servidor no tiene por qué tener demasiada memoria asignada ni tener exigentes características de hardware. Para montar esto con un pentium IV y 512 MB de ram vamos sobrados (y creo que me estoy pasando al recomendaros tanta RAM). Evidentemente si ese servidor lo usamos para más cosas, sí que necesitará que asignemos al menos algo más de memoria.
  • La conexión a internet que tenga el servidor debe tener una ip pública disponible. Da igual que sea ip fija o dinámica. Y además debemos tener mapeado el puerto 51820 a la ip de la máquina que hará de servidor de Wireguard. Así que no podremos tener nunca contratada una línea con CG-NAT si queremos montar un servidor de este tipo. En ese tipo de líneas ni se pueden mapear puertos ni se puede acceder a ellas desde el exterior.
  • También ni que decir tiene que la máquina en la que vayáis a instalar el servidor de Wireguard debe tener ip fija dentro de vuestra red local. No nos sirve que coja IP por DHCP, porque si por cualquier motivo cambia la ip de ese equipo dentro de la red local, dejaría de estar el puerto mapeado correctamente.
  • Si no disponemos de una IP pública fija (al fin y al cabo es algo complicado en redes domésticas) al menos debemos tener un servicio de DNS apuntando a nuestra ip variable. Me refiero a tener algún nombre de dominio (algo del tipo «mivpnmolona.com») que permita que cuando cambie la ip, el dominio apunte a la ip nueva.
Casi nada pides tú. ¿Y eso de dónde lo saco?

Pues explicamos como crear una dirección de este tipo en el punto 2 del tutorial sobre cómo crear un servidor de OpenVPN con PiVPN. Esto que estoy dando como requisito sería exactamente igual, así que te invito a repasar el punto 2 de ese artículo. Si lo sigues a rajatabla podrás tener completamente gratis una dirección del tipo «eresunpesao.linkpc.net» apuntando siempre a la ip pública de tu router, aunque ésta cambie de vez en cuando.

¡Vale, vale...! ¡Qué susceptible estás hoy!

Me minas la moral. En fin… Si habéis repasado todos los puntos y los tenéis listos, vamos entonces a empezar la instalación de este tinglao.

2- Habilitamos el usuario Root.

Ubuntu por defecto lo que hace es crearnos un usuario con privilegios administrativos sólo para nosotros. De esta forma, si durante la instalación de Ubuntu hemos creado el usuario «Pepito», ese usuario será el «mandamás» del sistema operativo, pudiendo hacer y deshacer lo que quiera (Siempre que pongamos «Sudo» delante del comando que queremos ejecutar, claro).

Sin embargo, para lo que vamos a hacer, nos conviene habilitar el usuario administrador estandard de linux llamado «Root». Ese usuario sigue estando presente en tu distribución, aunque no lo use Ubuntu por defecto. Para habilitarlo simplemente debemos teclear el siguiente comando en la consola.

sudo -i
Terminal mostrando la salida del comando sudo -i

Si os fijáis, luego de teclear el comando, en lugar de nuestro nombre de usuario en la línea de comandos aparecerá el usuario root. A partir de ahora podemos teclar comandos como administrador sin necesidad de poner antes el comando «Sudo».

Vale. Me lo apunto. Así no tengo que sudar más. 

Ehhhh… tú mismo. En todo caso una nota. Cuando ejecutéis este comando en Ubuntu, sabed que la carpeta «home» del usuario «root» está ubicada en la ruta /root directamente, no en /home/root. Así que cuando ejecutéis ese comando habréis saltado de carpeta y estaréis dentro de /root.

3- Instalamos el servidor de wireguard en nuestro ubuntu server.

Iniciemos ahora la instalación del servidor de Wireguard. Como este software está ya disponible en los repositorios de Ubuntu, simplemente nos vamos al terminal y tecleamos lo siguiente:

apt-get install wireguard

Eso nos instalará el programa (y nos instalará un montón de paquetes de regalo).

Terminal mostrando la salida del comando apt-get install wireguard

Pero nos hará falta cargar el módulo de Wireguard en el kernel del sistema para que pueda funcionar. Eso lo hacemos con el siguiente comando.

modprobe wireguard
Terminal mostrando la salida del comando modprobe wireguard

Fijaos que el comando aparentemente no hace gran cosa y no muestra nada en pantalla. Es completamente normal. Con esto wireguard queda instalado. El problema es que hay que configurar el servidor de wireguard y crear los usuarios. Y todo eso se hace a base de archivos de texto y comandos. Para gestionar estas configuraciones de forma mucho más sencilla vamos a instalar una interfaz gráfica de usuario (GUI) que nos permita hacer todo esto mediante una página web.

Para los paranoicos con la seguridad, es importante indicar que esta web va a estar alojada en nuestra máquina. No va a enviar datos a ningún sitio y de hecho ni siquiera va a estar disponible en internet. Sólo estará disponible en nuestra red local.

Pero ¿Y si quiero poder crear usuarios de VPN desde cualquier sitio?

A ver usuario anónimo: por poder, se puede poner disponible en internet. Es algo tan simple como mapear el puerto que usa el sistema para crear la web. Pero si vas a tener una VPN para conectarte a tu red, ya vas a tener acceso a la dirección local de tu equipo para ver la página que vamos a habilitar. Dejar esto visible en internet es un riesgo de seguridad por mucho usuario y contraseña que te vaya a pedir para logarte. Hazme caso y no mapees nada que no sea indispensable, que la puedes liar pero bien.

Otra cosa antes de terminar este apartado: para asegurarnos que el servidor de WireGuard funcione correctamente, vamos a editar un archivo del sistema. Escribid el siguiente comando:

sudo nano /etc/sysctl.conf

Ese archivo permite establecer diferentes parámetros en el kernel de linux y además esos parámetros se mantendrán aunque el sistema se reinicie. En este caso nos interesa modificar un parámetro que permitirá a nuestro sistema actuar como enrutador.

¿Lo qué? Suena chungo ¿y eso del enrutador de qué va?

Pues… el funcionamiento es algo similar a cómo funciona un router. Nuestro linux va a poder recibir paquetes y luego va a poder enviarlos de nuevo por otra interfaz de red que hayamos definido. Así podremos poner en contacto la red que Wireguard crea para el VPN y la LAN que tenemos con nuestros dispositivos.

Para habilitar esta funcionalidad, en el archivo sysctl.conf hay que buscar una línea que pone…

#net.ipv4.ip_forward=1

…y hay que qutarle la almohadilla del principio (descomentar la línea). Nos quedaría así:

net.ipv4.ip_forward=1

Guardamos cambios con «Control» + «O». Con esto ya tendremos listo el WireGuard para empezar a configurarlo.

4- Instalación de Wireguard-UI

Empecemos la instalación del GUI de gestión de Wireguard. Antes de ponernos a ello es importante comentar que hay varios desarrollos que permiten dotar de un interface gráfico a la gestión de usuarios de Wireguard, y Wireguard-UI al fin y al cabo sólo es uno más. Sin embargo he de reconocer que me ha gustado bastante. Es ligero y sencillo. Simplemente funciona y no envía datos hacia otros sitios. Es importante eso último porque algunos interfaces generan códigos QR desde fuera de su web y es un peligro. Si optáis por alguno que genere los códigos desde otro sitio le estaríais dando los datos de acceso de vuestra red a un tercero y eso es realmente peligroso.

Para instalar Wireguard-UI debemos primero dirigirnos al repositorio de GitHub del desarrollador, que es éste:

https://github.com/ngoduykhanh/wireguard-ui/releases

Si buscáis la última versión encontraréis algo como esto.

Web de descargas de Wireguard UI
Coged siempre la última versión. Si hay una más avanzada que la que muestro, pues adelante.

Como podéis ver, hay un montón de versiones de este software, compiladas para diferentes sistemas operativos y procesadores. Debéis descargar la que corresponda con vuestra distribución y hardware. Por ejemplo, si vuestro servidor de Wireguard va a estar en un Ubuntu Server en una máquina con un procesador de 64 bits, tendréis que escoger la opción «Linux-amd64». Si está en una Raspberry Pi, deberíamos usar la «Linux-arm» o «Linux-arm64», dependiendo de la versión de Raspbian que tengamos.

¿Cómo hacemos para coger ese archivo y copiarlo en nuestro servidor? Pues primero yo crearía una carpeta llamada «wireguard» dentro de la carpeta «home» del usuario root. Entraríamos luego dentro de esa carpeta recién creada.

mkdir wireguard
cd wireguard

Ahora copiamos la ruta en la que está colgado el software que nos interesa (botón derecho en el enlace de la página web y luego «copiar enlace») y escribimos en el terminal «wget» seguido de esa ruta, de esta forma.

Terminal mostrando la salida del comando wget
Fijaos que seguimos con el «sudo -i». Haced todo esto como root.

Ésto nos descarga el archivo en nuestro sistema. Ahora debemos descomprimirlo. Para ello utilizamos este comando (adaptadlo a la versión del software que hayáis bajado):

tar xzf wireguard-ui-v0.3.6-linux-amd64.tar.gz
Terminal mostrando la salida del comando tar
Created with GIMP
Ya descomprimí la carpeta, pero algo falla. No puedo entrar dentro.

No es una carpeta lo que has descomprimido Usuario Anónimo. Es un archivo ejecutable. De hecho vamos a ejecutarlo y veamos qué pasa. Lo ejecutamos escribiendo ./wireguard-ui

Terminal mostrando la salida del comando ./wireguard-ui
Created with GIMP

Si te fijas, al ejecutarlo el archivo queda como esperando algo. Esto tiene su explicación, pero no la vamos a ver todavía. Podemos cancelar la ejecución del programa pulsando «Control» + «C». Una vez cancelado vamos a hacer un «ls» en la carpeta dónde está ese ejecutable y veremos que se ha creado una subcarpeta llamada «db».

Terminal mostrando la carpeta Wireguard

Ahí dentro hay más subcarpetas. Nos metemos dentro de la carpeta «db» (con «cd db») y luego dentro de la carpeta «server» (cd server). Allí hay varios archivos. Nos va a interesar editar el archivo «users.json», así que escribimos «nano users.json».

Terminal mostrando la salida del comando nano users.json

La página web que nos va a generar esta utilidad, debe estar siempre protegida por un usuario y una contraseña. Es en este archivo dónde definimos ambas cosas. Así que ponemos el usuario y contraseña que consideremos oportuno.

Contenido de users.json
Por cierto… ¿Usuario y contraseña en texto plano? Ya le vale al programador.

Como siempre que usamos el editor «nano», guardamos los cambios con la combinación de teclas «Control» + «O». Y ahora sí que vamos a ejecutar de nuevo el archivo que habíamos ejecutado antes y ver la página que genera. Nos movemos dos carpetas hacia atrás (tecleamos dos veces «cd ..») y ejecutamos «./wireguard-ui».

Nueva salida de wireguard-ui

Vamos a dejar nuestro linux en esa pantalla y desde otro equipo vamos a abrir un navegador de internet y acceder a la web que se nos ha generado. Para ello en el navegador debemos poner una dirección tal que así.

https://ipdelservidor:5000

Por supuesto, dónde he puesto «ipdelservidor», debéis poner la dirección IP que habéis asignado a vuestro futuro servidor de wireguard en vuestra red local. Una vez puesta esa dirección, en el navegador aparecerá algo como esto.

Login de Wireguard-ui

Debemos logarnos con el usuario y contraseña que definimos anteriormente. Por fin ya tenemos la web de gestión de las VPN funcionando. Ahora vamos a configurar algunos parámetros dentro de ella

5- Configuración inicial del servidor de VPN

En la columna de la izquierda de la web, iremos a la opción llamada «Global Settings». Ahí debemos rellenar los siguientes campos:

  • Endpoint Address: aquí pondremos o bien la ip pública de nuestra conexión a internet en caso de que tengamos contratada una ip fija con nuestro operador, o bien el nombre DNS que hayamos establecido en caso de tener un servicio que asocie ip con un nombre de dominio. Os recuerdo de nuevo que este tipo de servicios vimos cómo configurarlos en el punto 2 de este tutorial.
  • DNS Servers: en caso de no tener ningún equipo en la red ejerciendo de servidor de DNS, os aconsejo poner el de Cloudflare (1.1.1.1). En caso de tener un servidor de DNS como Pi-hole en nuestra red o un servidor de dominio propio con un Windows Server, pondríamos la ip del equipo que ejerce las labores de servidor de DNS de la red.
  • MTU: Por defecto está en 1450. He tenido malas experiencias usando escritorios remotos si dejamos el campo así. Yo lo he tenido que cambiar a 1400 para que funcione correctamente el escritorio remoto en una de mis instalaciones, pero os recomiendo hacer pruebas también por vuestra cuenta para elegir el valor más adecuado. Es un campo que en condiciones normales no debería ser tocado, así que sólo modificad el valor a posteriori si notáis problemas con la conexión VPN.
  • El resto de campos los dejamos tal cual están. Simplemente pulsad en «Save».
Global Settings en Wireguard-ui

Nos vamos ahora en el menú de la izquierda a «Wireguard Server Settings». Ahí ponemos la siguiente información:

  • Server interface addresses: Vamos a asignar un segmento de red que no estemos usando para los equipos que se conecten por VPN. Ante la posibilidad de que algunos de vosotros estéis usando ya el que usamos en el tutorial de OpenVPN, vamos a borrar el campo que nos viene por defecto en la web y poner «10.10.0.1/24». Así nos aseguramos que tengamos lo que tengamos no pisamos niguna configuración.
  • Listen port: Podéis dejar el que viene por defecto, el 51820. Pero tened en cuenta que si queréis «enmascarar» el tráfico podríais poner un número de puerto cualquiera. Eso sí… eso os obligaría a mapear ese nuevo puerto en el router hacia la ip de nuestro servidor de Wireguard.
Espera, espera... ¿Quieres decir que si cambio el puerto nadie ve que estoy usando una VPN?

No. Lo que haríamos si cambiamos el puerto es mostrar el tráfico por un puerto que no tiene nada que ver con un servidor de VPN. Alguien que se pusiera en el medio a monitorizar nuestro tráfico vería paquetes de datos (cifrados, por lo que no sabe qué tipos de datos son) que van por un puerto del que no tienen ni idea de a qué pertenece. Esto puede ser útil, por ejemplo, si te planteas un viaje hacia países con restricciones a la navegación por internet.

Hablo de países en los que tienen filtrada y monitorizada la información a la que estás accediendo a través de internet. Incluso hay países en los que están bloqueados los puertos por defecto que permiten usar VPN’s. Si el gobierno de ese país tiene bloqueado el tráfico por ese puerto para evitar que uses una VPN, si simplemente cambio el puerto por otro que no sea el puerto por defecto estaría sorteando esa prohibición. Como la información a través de una VPN está encriptada, en principio la navegación sería segura, sin miedo a que alguien pudiera saber por dónde navego.

Pero ojo, que también hay países que aplican inspección profunda de paquetes e igualmente puden detectar por el tipo de tráfico que estás estableciendo una conexión VPN y tirarte la conexión abajo. No sabrían por dónde has navegado, pero verían un tráfico extraño por un puerto no estandard y podrían tener la tentación de tirarte abajo la conexión «por si acaso».

Pero te voy a poner un ejemplo mucho más cercano que sufrí hace muy poco tiempo en mis carnes respecto a este tema: una red wifi pública en un hospital de mi ciudad. Era imposible conectarse por el puerto estandard de Wireguard u OpenVPN, pero sí que podías conectarte si el servidor de Wireguard usaba otro puerto.

Muy bien... y si quiero ocultar el servicio para que no me bloqueen ¿Qué puerto me recomiendas?

Pues depende de lo que tengas configurado en tu red. Si no estás ya mapeando el puerto 443 o el 80 dentro de tu red, la verdad es que estos serían los dos mejores puertos para ocultar que estás usando una VPN (ya que son los que se usan para transmitir las páginas web hacia tu navegador). Otras alternativas serían los que usan los servidores de correo electrónico o FTP (21, 587, 21, 25…). Si tienes un servidor web montado en casa junto con un servidor de correo, entonces estarás usando ya estos puertos y no podrías utilizarlos para Wireguard. En este caso podrías intentar con un puerto como el 123, que se usa normalmente para sincronizar el reloj del ordenador con un servidor horario. Sería raro que ese puerto lo tuvieras mapeado y también sería raro que estuviera «capado» en la red en la que te has conectado. Sin embargo no es imposible encontrarse con este puerto restringido. Por ejemplo el WiFi del Domino’s pizza de mi calle capa el tráfico un par de segundos después de establecer una conexión vpn por este puerto.

El que yo uso normalmente en mis instalaciones es el 8080. Es un puerto que se usa normalmente para páginas web que no están en producción. No suele estar capado y es raro encontrar una instalación que ya lo esté mapeando y no esté disponible.

En todo caso, lo que dije al principio: una buena forma de empezar es usar el puerto por defecto. Si en algún momento tenéis problemas de conexión en alguna red, valorad cambiarlo por el 8080, 123 o algún otro.

En fin… sigamos con un par de campos más que debemos rellenar.

  • Post up Script: debemos poner en este campo algo tal que así.
iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Pero OJO AL PIOJO: en esa línea hay un dato que a lo mejor tenéis que cambiar. Es lo que pone «eth0». Digamos… que ese es el nombre de vuestra tarjeta de red. Y dependiendo de cómo se conecta este servidor a internet puede tener un nombre u otro. Si tenéis conectado el ordenador por cable de red y sólo tenéis una tarjeta de red, lo más probable es que sea «eth0». Si lo conectás por wifi será «wlan0». Yo, por ejemplo, mi servidor de Wireguard lo tengo virtualizado con Proxmox, por lo que en mi máquina la tarjeta de red se llama «ens18». Simplemente fijaos para no meter la pata. Un comando útil para saber cómo se llama nuestra tarjeta de red es «ifconfig», pero en Ubuntu no está por defecto en el sistema. Si lo queréis instalar tendréis que hacerlo con este comando: «apt-get install net-tools»

  • Post Down Script: Debemos poner esta otra línea.
iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

De nuevo, fijaos que estéis poniendo el nombre de la tarjeta de red correcta. Al final debería quedaros esta parte muy similar a esto.

Wireguard Server Settings en Wireguard-ui

De nuevo pulsamos en «Save» y luego, en la parte superior derecha de la web pulsamos en el botón «Appli Config».

Aplicamos configuración

y en la ventana que nos aparece a continuación pulso el botón «Apply».

¿Seguro que desea aplicar la configuración?

Peeeeeero… este botón, a pesar de ser importantísimo para esta web (es el que va aplicando los cambios que vamos haciendo) no funcionará correctamente hasta que hagamos un par de configuraciones más. Así que vamos a hacerlas antes de continuar con la configuración de Wireguard-ui.

6- Autoarranque del servicio de Wireguard

Antes de nada vamos a configurar Wireguard (no el entorno web, sinó el servidor de VPN) para que autoarranque cada vez que encendamos el servidor.

Primero vamos a parar el servidor de Wireguard-ui que teníamos encendido, pulsando «Control»+»C».

Cancelamos wireguard

Y ahora ejecutamos un único comando, que es éste:

sudo systemctl enable --now wg-quick@wg0

El comando nos sacará en pantalla una información tal que así.

Activamos servicio
Bueno… como habíamos hecho anteriormente un «sudo -i», realmente podemos omitir el «Sudo» de este comando

Y así de sencillo. Con esto nos hemos asegurado que Wireguard se ejecute al inciar el sistema.

7- Creamos un servicio para Wireguard-UI

Tal y cómo vimos, la página web de Wireguard-ui de momento sólo funciona si ejecuto a mano el comando «./wireguard-ui». Vamos a hacer que esta web esté siempre disponible desde el mismo momento de arrancar el servidor y no haya que arrancarla «a manubrio».

Para ello vamos a crear un archivo más dentro de la carpeta «Wireguard» que hemos creado dentro la carpeta «home» del usuario root. Lo haremos con este comando:

nano wgui.sh
Editamos wgui.sh

El contenido de ese archivo será muy simple. Simplemente el archivo ejecuta el Wireguard-ui con este comando.

sudo -u root /root/wireguard/wireguard-ui
contenido del archivo

Ahora convertiremos ese archivo en un archivo ejecutable.

chmod +x wgui.sh

Le damos permisos correctos.

chmod 744 wgui.sh

Y probamos si funciona correctamente.

./wgui.sh
Ejecutamos el archivo

Una vez que comprobamos que ese comando es capaz de lanzar Wireguard-UI, pulsamos «Control»+»C» para apagar de nuevo el GUI.

Ahora vamos a crear un «demonio» para que ese archivo se mantenga ejecutado siempre en segundo plano. para ello debemos ir a la carpeta «/etc/systemd/system» y crear ahí dentro un nuevo archivo de texto al que vamos a llamar «wireguard-ui.service».

cd /etc/systemd/system
nano wireguard-ui.service
editamos el servicio
Vuelvo a recordar: tenéis que hacer esto como root (sudo -i) para que vaya todo bien.

Ahí dentro haremos un copiar-pegar del siguiente texto:

[Unit]
Description=Demonio de wireguard-ui
DefaultDependencies=no
After=network.target

[Service]
Type=simple
User=root
AmbientCapabilities=CAP_NET_BIND_SERVICE
WorkingDirectory=/root/wireguard
ExecStart=/bin/bash /root/wireguard/wgui.sh
TimeoutStartSec=0
RemainAfterExit=yes

[Install]
WantedBy=default.target

Como siempre, pulsamos «Control»+»O» para guardar los cambios.

Ahora vamos a hacer una serie de comandos para:

  • Recargar los servicios que estén disponibles en el sistema (incluído el que acabamos de crear)
  • Poner como disponible nuestro servicio
  • Encender el servicio que hemos creado
  • Comprobar que no hay servicios dando error en nuestro equipo (por si el que hemos creado tiene algún error).

Así que teclear paso por paso estos comandos:

sudo systemctl daemon-reload

sudo systemctl enable wireguard-ui.service

sudo systemctl start wireguard-ui.service

sudo systemctl status wireguard-ui.service

Si todo va bien, deberíais obtener algo similar a esto.

Comprobación del servicio

Ahora, si entráis en la web que os genera Wireguard-ui (http://ipdelservidor:5000) deberíais ver que funciona sin que se os bloquee el terminal (ya está funcionando como un servicio en segundo plano).

8- Hacemos que Wireguard-UI pueda reiniciar el servicio de Wireguard para crear usuarios

La gran pega de Wireguard es que si creo un usuario de VPN nuevo o le cambio alguna configuración, mientras no reinicie el servicio de Wireguard (no el del GUI, sinó el del servidor de Wireguard) no voy a tener ese nuevo usuario disponible. Lo que haremos en este apartado es permitir que al menos la página web de Wireguard-UI pueda reiniciar el servicio de Wireguard cuando le demos arriba a la derecha al botón de «Apply Config». Para eso, en la misma carpeta en la que estábamos en el punto anterior (/etc/systemd/system) creamos un nuevo archivo llamado «wgui.service» con el siguiente comando.

nano wgui.service
Editamos otro servicio

Dentro de ese archivo pondemos el siguiente código.

[Unit]
Description=Restart WireGuard
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart wg-quick@wg0.service

[Install]
RequiredBy=wgui.path

Pulsamos «Control»+»O» para guardar los cambios.

También necesitaremos crear otro archivo llamado wgui.path. Lo haremos con este comando.

nano wgui.path
Editamos otro servicio más

Y dentro de ese archivo pondremos el siguiente contenido.

[Unit]
Description=Watch /etc/wireguard/wg0.conf for changes

[Path]
PathModified=/etc/wireguard/wg0.conf

[Install]
WantedBy=multi-user.target

De nuevo, guardamos los cambios con «Control»+»O». Vamos a activar este par de servicios con los siguientes comandos (ponedlos de uno en uno)

systemctl enable wgui.{path,service}
systemctl start wgui.{path,service}

Y comprobaremos que todo vaya bien con el siguiente comando:

sudo systemctl status  wgui.{path,service}

Si todo ha ido bien, deberíais obtener algo como esto.

Comprobación de los dos servicios

Con esto Wireguard Service ya estará funcionando al 95% a falta de un pequeño detalle que vamos a pulir en el siguiente punto:

9- Habilitamos el envío de correos desde Wireguard-UI

Cuando crees un usuario de VPN con Wireguard-UI, si quieres, puedes decirle al sistema que le envíe un mail al usuario con sus datos de conexión, pero para que sea capaz de hacer esto hay que añadir unas variables de entorno en Linux. Es algo tan sencillo como ir a la carpeta «etc» y editar el archivo «environment» con estos comandos:

cd /etc
nano environment
nano environment

y debemos poner al final del fichero algo similar a esto (con los parámetros de vuestro correo, claro):

SMTP_HOSTNAME="smtp.miputodominio.com"
SMTP_PORT="587"
SMTP_USERNAME="pepito@miputodominio.com"
SMTP_PASSWORD="misupercontraseñasupersegura"
SMTP_AUTH_TYPE="LOGIN"
EMAIL_FROM_ADDRESS="pepito@miputodominio.com"
EMAIL_FROM_NAME="Pepito cantalapiedra"

Ojo: seguramente ya tengáis en ese fichero una o incluso más líneas escritas. No toquéis nada de lo que ya haya ahí. Eso lo debéis poner al final de todo del fichero.

Y por supuesto debéis poner en cada campo los datos de la cuenta de correo que vayáis a usar para enviar estos mails. Tendréis que averiguar el servidor SMTP de vuestra cuenta de correo, usuario, contraseña puerto… vamos, todos los parámetros habituales para configurar el correo saliente de cualquier cuenta de correo.

Y ahora sí: por fin, reiniciamos nuestra máquina para aplicar el medio millón de cambios que hemos hecho.

reinicio todo

Después del reinicio, Wireguard-UI estará funcionando ya al 100%. Lo que nos falta por configurar ahora será todo a través de su web y no volveremos a tocar el terminal (recordad que ahora ya todo se enciende de forma automática sin necesidad de acudir al terminal).

10- Configuramos nuestro primer usuario en Wireguard-UI

Entramos por fin en la web, que ahora es completamente funcional, con ánimo de crear nuestro primer usuario de VPN.

Antes de nada deberíamos comprobar que efectivamente en «Global Settings» y en «Wireguard Server» tengamos todo lo que hemos configurado en el punto 5. Debería estar, pero mejor ser precavido de más. En caso de que no aparezcan los datos, a lo mejor es que os habéis olvidado darle al botón «Apply Config», así que tendríais que poner todo de nuevo.

Una vez comprobado que todo va bien, nos vamos a la pestaña «Wireguard Clients». Allí dentro, arriba a la derecha, pulsamos sobre el botón «New Client».

Nuevo cliente

Se nos abrirá una ventana nueva en la que tendremos que cubrir los siguientes campos:

  • Name: Pondremos el nombre de la persona que va a usar esta conexión de VPN
  • Email: El mail del usuario del VPN
  • IP Allocation: No lo tocamos. Debería ponernos una IP dentro del segmento de red que hemos definido en el paso 5.
  • Allowed IPs: Este es un campo importante. Si queremos que el usuario pueda acceder a cualquier ordenador de nuestra red, debemos dejar el campo que el sistema nos pone por defecto (0.0.0.0/0). Si queremos que sólo pueda acceder a una determinada ip, pondríamos esa ip seguida de «/32». Por ejemplo «192.168.1.10/32». Si queremos añadir varias direcciones ip, vamos añadiéndolas una a una, recordando que siempre tiene que estar el «/32». Y si queremos que pueda acceder a un segmento de red concreto lo añadimos con «/24», por ejemplo «192.168.0.0/24». Si queréis hacer una prueba, yo dejaría el que tenéis por defecto y luego cuando comprobéis que todo va bien, hacéis pruebas con otras configuraciones. Recordad que cuantas menos cosas estén disponibles a través de internet, más segura será vuestra infraestructura, así que compartid lo mínimo imprescindible.
Configuración del cliente

Una vez que hemos terminado debemos pulsar primero en «Submit», pero no os olvidéis de darle a «Apply Config» arriba a la derecha.

Aplicamos configuración

Al darle a «Apply Config», empezará a funcionar todo lo que hemos hecho en el paso 8. Wireguard se reiniciará y empezará a funcionar la configuración nueva.

Con este método podéis hacer todos los usuarios de VPN que necesitéis.

11- Exportar la configuración de VPN a un cliente de VPN.

Llegados a este punto necesitamos algún método para hacerles llegar a nuestros usuarios de VPN la configuración que les hemos creado. Cuando creamos un cliente de VPN en Wireguard-UI podemos ver algo tal que así en el apartado «Wireguard Clients».

Descarga del archivo del cliente de wireguard

Tenemos tres opciones para enviarle a esa persona la configuración de Wireguard.

  • En «Download» nos podemos descargar el archivo de configuración del usuario. Simplemente habría que abrir ese archivo con el cliente de Wireguard correspondiente y ya quedaría completamente configurado el cliente de VPN en su equipo.
  • «Scan» nos permite generar un código QR que si el usuario escanea con la cámara de su teléfono o tablet, agrega automáticamente la configuración de VPN a su cliente de VPN.
  • «Email» le envía a la dirección de correo de nuestro usuario (la que hemos puesto al generar su conexión de VPN) las dos cosas: tanto el archivo que descargamos en «Download» como el QR generado en «Scan».

Así que hacerle llegar la configuración del VPN al usuario es muy fácil. Sólo tendremos que asegurarnos de hacerle llegar al usuario alguna de estas tres cosas.

Espera, espera... Pero en el OpenVPN el usuario necesitaba saber una contraseña para poder poner un perfil de VPN en su aplicación. ¿Aquí no hay de eso?

Pues la verdad es que con este sistema no. Sólo con el archivo de configuración el usuario puede conectarse a nuestra VPN. Por un lado eso es menos labor de configuración, pero personalmente no me gusta que no sea necesaria una contraseña a la hora de enviarle un VPN a un usuario. Aunque supongo que es simplemente la filosofía del programa. Wireguard proporciona seguridad de transmisión, no seguridad a la hora de enviar archivo de configuración, y eso para mucha gente (sobre todo usuarios domésticos) es más que suficiente.

12- Instalación del archivo de configuración en el cliente final.

El usuario de la VPN que hemos creado necesitará instalar en su dispositivo el cliente de Wireguard correspondiente. Por fortuna hay cliente para Windows, Android, iOS, iPadOS y Mac OS, así como para infinidad de distribuciones Linux y FreeBSD de todos los colores y sabores. Casi que el único sistema operativo que hecho de menos en el listado es algo tan marginal como Haiku OS y aún así he podido ver que hay desarrollos hechos, supongo que por la comunidad del propio sistema.

Descarga del cliente de wireguard
Estos son los más usados, pero la lista de sistemas operativos disponibles es importante

Así que tocará instalar la aplicación desde la tienda de aplicaciones del sistema operativo o desde los enlaces de la página oficial de Wireguard. En concreto, para Windows y Mac OS las descargas son las siguientes:

Una vez instalado, el programa en cualquiera de los sistemas operativos es muy simple. Esto es Wireguard recién instalado en Mac OS.

Cliente de wireguard recién instalado

Como podéis ver casi no hay opciones para nada. Si pulsamos en «Importar túnel desde archivo», podremos importar el archivo que nos generó Wireguard-UI, y veremos algo similar a esto.

Cliente de Wireguard con un archivo de VPN

Lanzar el VPN es algo tan simple como darle al botón que pone «Activo». Con eso nos conectaremos a nuestra VPN desde cualquier lugar del mundo.

Eso sí… es importante hacer una puntualización. Si por cualquier motivo el VPN no funciona, en lugar de dar un error, el programita de marras sigue diciendo que la conexión está activada. Así que si hemos cometido un fallo en la configuración de algo, esto no nos lo va a chivar. Tendríamos que ir al icono de la rueda dentada para seleccionar la opción «registro» y rebuscar ahí el fallo.

En otros sistemas operativos es muy similar, así que no me voy a parar en este tema, que ya os he dado demasiado la chapa por hoy. En todo caso si queréis aprender un poco más acerca de usos avanzados de Wireguard, os invito a ver este otro artículo en el que hablo acerca de cómo podemos securizar este tipo de conexiones, impidiendo que la persona que usa nuestra VPN pueda acceder a equipos que no le corresponden o hacer que sólo pueda conectarse a un determinado puerto de la IP que le corresponde (por ejemplo el del escritorio remoto).

Ahora os toca a vosotros. ¿Habéis conseguido configurar todo sin problemas? ¿Alguien ha usado algún otro interfaz gráfico para configurar Wireguard y quiere compartir su experiencia? Como siempre, me encantaría poder leer vuestros comentarios al respecto.

Share

6 comentarios

  1. Aglak

    Buenos días, como siempre tu explicación perfecta. Muchas gracias.

  2. dan

    Buenas tardes.
    Cual es la diferencia entre tu metodo, y la instalación de wireguard desde esta linea:
    sudo ,curl -L https://install.pivpn.io | bash eligiendo wireguard en lugar de openvpn??
    (entendiendo desde luego que así, con esta linea, la mayoria del trabajo la hace el script… jeje).

    • Marcos

      La línea que indicas permite instalar wiregurd u OpenVPN, que se trata de otro VPN completamente distinto (en el momento de escribir el otro artículo esa línea sólo permitía instalar pivpn). La instalación de pivpn la hemos abordado en este artículo

      https://www.flopy.es/pivpn-bloquea-publicidad-en-tu-movil-y-accede-a-los-dispositivos-de-tu-hogar/

      Ambos son VPN’s, por lo que en principio sirven para lo mismo. La diferencia más obvia entre los dos es la velocidad. WireGuard es mucho más rápido. Pero internamente funcionan de forma muy diferente.

      Revisa el artículo que te indico y así podrás elegir correctamente cuál instalar.

      En todo caso ello que se explica en este artículo sobre wireguard es no sólo la instalación de wireguard (que es muy muy sencilla) sinó la instalación de una interfaz web para facilitar su gestión.

  3. ManoloGarrido

    Hola. Me ha encantado el tutorial, es súper descriptivo y completo.
    De todas formas me parece que hay un «bug», o a mí me lo parece: cuando hace ejecutable el archivo wgui.sh pones
    chmod +r wgui.sh
    y yo creo que debería ser
    chmod +x wgui.sh

    Saludos,

    • Marcos

      Efectivamente. Se me ha ido una letra en esa línea. Mea culpa.

      Mil gracias por la corrección. El artículo ya tiene el comando correcto.

      Por cierto… hay una segunda parte en la que explico cómo aplicar restricciones de puertos e ips para evitar que los clientes de VPN se conecten a cosas que no queremos. Échale un vistazo que a lo mejor te interesa.

      Gracias de nuevo por la corrección.

      • Manuel Garrido

        Pues voy a ello, gracias por compartir conocimientos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

© 2022 Flopy.es

Tema por Anders NorenArriba ↑

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies