WireGuard

Hoy voy a explicar como he montado un servidor Wireguard para poder compartir ciertos servicios con amigos y familiares para no tener problemas con ubicaciones. En mi caso lo tengo solo para esto, ya que mi único interés es que toda esta gente, al usar estos servicios tengamos la misma IP publica.

Un servidor Wireguard es un sistema de VPN para poder crear un túnel entre nuestro dispositivo y el servidor. De tal forma que podamos tener servicios instalados en casa/oficina pero poder acceder una vez estamos fuera sin necesidad de publicarlos fuera ni tener que abrir mas puertos que los de la VPN de Wireguard.

Hay muchos mas servicios que hacen los mismo, ya sea de pago como Fotify o gratuitos como OpenVPN, pero en este caso me decante para este por su facilidad, simpleza y buena comunicación una vez conectada la VPN. No será tan seguro como un OpenVPN, ya que su encriptación de los datos no es tan fuerte, pero para una cosa tan simple como puede ser una transferencia de video, me interesa mas que la comunicación sea mas rápida y que una TV no tenga que dedicar mucho esfuerzo en encriptar y desencriptar.

Como no seré el único que va a gestionar los usuarios de Wireguard, me he decantado por una interfaz web para toda la gestión:

Instalación en servidor Linux

Yo lo tengo montado en un servidor con DietPi (Debian), ya que lo podéis montar en casi cualquier Raspberry Pi, PCs antiguos o incluso en maquinas virtuales. En mi caso lo tengo montado en una maquina virtual.

Configurar IP fija

Una vez tenemos montado el sistema, de lo primero que tenemos que hacer es asignar una IP fija en nuestro sistema. Esto será necesario ya que necesitaremos abrir puertos en nuestro router apuntando a esta IP y esta no puede estar cambiando constantemente. Esto en DietPi es tan fácil como escribir lo siguiente:

dietpi-config

Veremos que nos saldrá un menú con todas las configuraciones disponibles. Buscaremos la núm. 7, una vez dentro buscaremos la opción Ethernet y aquí configuraremos nuestra dirección IP, DNS, etc.

Opciones de configuración de red en DietPi

Una vez tengamos todo configurado, solo tendremos que darle a «Apply» y ya podremos salir de todo para poder instalar el servidor de Wireguard.

Instalar Wireguard

Para instalar Wireguard es tan sencillo como ejecutar el siguiente comando para obtener una lista de todo el software que podemos instalar en DietPi:

dietpi-software

Una vez introducido este comando, nos aparecerá una lista de opciones. Tendremos que buscar la «Browse Software» y aquí buscar PiVPN para poder marcarlo con «Espacio», «Tabular» y darle a <Confirm> para poder volver a la pagina anterior y poder iniciar la instalación.

Listado de software de DietPi

Una vez empiece la instalación, nos puede preguntar confirmaciones y configuraciones. Solo tenemos que darle a confirmar para poder seguir, hasta que nos salga la bienvenida a PiVPN para poder seleccionar o Wireguard o OpenVPN.

Simplemente tendremos que darle Ok, hasta que nos pida si queremos forzar el enrutamiento con IPv6. Le daremos que si y aceptaremos todos los pasos hasta que nos pida que queremos instalar o Wireguard o OpenVPN.

Una vez marcado Wireguard, empezara a instalar todo hasta que nos pida el puerto que queramos configurar en nuestro servidor. Por defecto es el 51820 pero lo podemos cambiar por el que queramos, siempre que no este ocupado por otro servicio, no solo en nuestro servidor, si no también en otras maquinas que tengamos o un puerto que sea un standard (21, 22, 80, 443, etc).

Aceptaremos todo hasta que nos pida las DNS que queremos configurar para nuestra VPN. Todos los dispositivos que se conecten a nuestra VPN usaran estas DNS por defecto.

Lo siguiente que nos preguntara será si tenemos algún nombre DDNS o si lo queremos configurar con nuestra IP Publica. Si tenemos contratada o nuestro ISP nos da una IP fija no hay ningún problema, pero si no tenemos una IP publica fija, nos encontraremos que cada X tiempo nuestro ISP nos cambiará la IP publica. Por eso es mejor tener un nombre DDNS, para que aún que cambie nuestra IP, nuestro nombre siempre apunte a la IP que tengamos en ese momento.

Entonces, como lo normal será que no tengamos IP fija, marcaremos la opción de DNS e indicaremos nuestro nombre DDNS. Si no tenemos ninguno, te dejo aquí una entrada donde explico como crear uno, para que esto no se alarga mas.

Una vez terminemos, nos pedirá crear un usuario con el comando pivpn -add, pero no lo vamos ha hacer, ya que los usuarios lo crearemos a través de de un entorno grafico. Seguiremos para que termine el progreso.

Entorno grafico para Wireguard

Lo siguiente será instalar un entorno grafico de Wireguard. Hay que tener en cuenta que el entorno grafico es vía web y no es oficial, si no esta echo por la comunidad.

El que yo instale es wireguard-ui y lo podemos encontrar aquí. Me decidí por este, ya que otro que me gustaba, solo podíamos ver los usuarios que están conectados, pero no podíamos crear nada. Con este podremos crear los usuarios cómodamente a través de un navegador e incluso fuera de casa.

Nos dirigiremos en la pagina de GitHub de wireguard-ui para poder descargar la ultima versión estable. Según nuestro sistema tendremos que descargar la versión para amd64 o arm64. Esto es muy simple, si lo vamos a instalar en una Raspberry lo mas seguro que sea arm, si lo instalas en un PC o maquina virtual, sera amd. Yo al instalar-lo en maquina virtual utilizare el que dice «linux-amd64». Sobre el link de descarga, hacemos clic derecho y haremos clic en «copiar dirección de enlace» para después poder pegar-lo en nuestro consola.

cd /opt/
wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.2/wireguard-ui-v0.6.2-linux-amd64.tar.gz
tar -xvzf wireguard-ui-v0.6.2-linux-amd64.tar.gz

Crearemos un archivo donde guardaremos nuestro inicio de sesión y clave secreta:

nano /opt/wireguard-ui/.env

-- Dentro del editor de text pegaremos lo siguiente y guardaremos --

SESSION_SECRET=TU CLAVE SECRETA
WGUI_USERNAME=TU USUARIO
WGUI_PASSWORD=TU CONTRASEÑA

Con esto ya tendremos todos los ficheros necesarios del entorno grafico de Wireguard. Ahora tocara arrancar este servicio automáticamente cada vez que el servidor arranque para que no tengamos que hacer nada. Recordar en cambiar la IP «192.168.1.7» por la IP fija de vuestro servidor.

nano /etc/systemd/system/wireguard-ui-daemon.service

-- Dentro del editor de text pegaremos lo siguiente y guardaremos --

[Unit]
Description=WireGuard UI Daemon
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
WorkingDirectory=/opt/wireguard-ui
EnvironmentFile=/opt/wireguard-ui/.env
ExecStart=/opt/wireguard-ui/wireguard-ui -bind-address "192.168.1.7:5000"

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start wireguard-ui-daemon.service
sudo systemctl enable wireguard-ui-daemon.service

Como que este entorno grafico solo se encarga de crear usuarios, vamos a vigilar sus archivos para que se reinicie el servicio de Wireguard para que se apliquen las nuevas configuraciones. Para eso haremos lo siguiente:

nano /etc/systemd/system/wgui.service

-- Dentro del editor de text pegaremos lo siguiente y guardaremos --

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

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

[Install]
RequiredBy=wgui.path
nano /etc/systemd/system/wgui.path

-- Dentro del editor de text pegaremos lo siguiente y guardaremos --

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

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

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable wgui.{path,service}
systemctl start wgui.{path,service}

Con esto ya lo tendremos todo configurado. Si queremos asegurar-nos, podemos reiniciar nuestro servidor con un reebot now. Si todo esta correcto, una vez arranque el sistema si nos dirigimos en un navegador a la IP del servidor terminando con el puerto 5000 tendríamos que poder acceder al entorno web de Wireguard.

192.168.1.7:5000

Recordar que tenemos que acceder con las mismas credenciales que hemos indicado en el fichero .env con las mismas mayúsculas y minúsculas, incluido el usuario.

Creación de usuarios

Para crear los usuarios es tan simple como hacer clic en Wireguard Clients y al botón azul de New client. Aquí solo tendremos que apuntar el nombre del usuario que va a usar la VPN y ya esta.

Una vez tengamos el cliente creado, solo tendremos que mandarle el fichero que nos descargamos en el botón Download o pulsar en QR Code para que nos genere un código QR y escanearlo. Si nos dirigimos al apartado Status en el menú lateral, podremos ver los usuarios que están conectado y cuantos datos han transferido.

Bloquear IPs internas

Como que puede que no nos interese que otros usuarios puedan acceder a otros equipos, servidores, NAS, etc que tengamos en casa, podemos bloquear las IPs que no queramos que accedan. Para esto, al momento de crear la conexión vemos que hay el apartado de Allowed IPs. Aquí tenemos que poner las IPs 1 a 1 (no os voy hacer calcular los rangos de IPs), y lo mas común será apuntar la IP con una /24 al final. Si nos da igual, cosa que no recomiendo, tenemos que dejar la 0.0.0.0/0. Con esto podrán acceder a todas las IPs de nuestra casa.

Una vez tengamos todo configurado, veremos que en la parte superior derecha nos aparece un botón en rojo que pone Apply Config. Para aplicar todo nuestra configuración al servidor tendremos que hacer clic y aceptar todo. Si creamos usuarios y estos no se pueden conectar, podría ser por que no hemos aplicado la configuración.

Con todo esto, si hacemos una consulta a la pagina Mi IP desde nuestra casa y lo mismo desde el dispositivo de un amigo, veremos que la IP publica será la misma.


Comentarios

Deja una respuesta

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