Desde la versión LibreELEC 9.2.1 basada en Kodi 18 «Leia» tenemos disponible la opción de configurar WireGuard. ¿Espera, que no sabes de lo que hablo? Vale, quizás estoy demasiado emocionado. Os voy a dar unos detalles.

LibreELEC es un fork de OpenELEC que a su vez es un fork de Kodi que a su vez es un fork de XMBC. Empecemos por el principio, XMBC era Xbox Media Center. Un centro de medios para XBox. El equipo de Kodi portó XMBC para que se pudiera instalar en GNU/Linux de forma nativa. Entonces el proyecto OpenELEC se basó en XMBC también pero hubieron diferencias creativas y se creó un fork llamado LibreELEC, que al final se basa en Kodi.

WireGuard es un protocolo de comunicación que implementa técnicas de Red Privada Virtual (VPN). Es además Software Libre y permite crear conexiones seguras punto a punto (site-to-site) en configuraciones enrutadas. WireGuard se ejecuta como un módulo dentro del núcleo de Linux y tiene como objetivo mejorar el rendimiento de otros protocolos más antiguos como IPsec o OpenVPN.

Vale. Ahora que está todo más explicado al detalle, en el siguiente tutorial vamos a explicar la forma para configurar WireGuard en nuestro LibreELEC y así poder navegar con una conexión segura y poder descargar torrents de forma segura, COFF, COFF. #CompartirEsBueno

El tutorial no explica como instalar un WireGuard, si no como configurar la parte cliente en LibreELEC, para hacerlo necesitaremos un proveedor de VPN como el que uso yo: Xeovo.

Cómo funciona WireGuard en LibreELEC

Según la documentación de LibreELEC, los túneles de WireGuard son gestionados por un plugin VPN llamado ConnMan (connman-vpn.service) que actúa como un demonio del gestor de conexiones de red (connman.service). Este servicio se encarga de descubrir nuevos servicios configurados en la siguiente ruta /storage/.config/wireguard/*.config. Una vez importado el fichero de configuración -que debe ser válido- se puede conectar a WireGuard desde línea de comandos o configurando un script de servicio con SystemD para que se ejecute al arranque.

La configuración que debemos de hacer es la siguiente:

[provider_wireguard]
Type = WireGuard
Name = WireGuard (Home)
Host = 185.210.30.121
WireGuard.Address = 10.2.0.2/24
WireGuard.ListenPort = 51820
WireGuard.PrivateKey = [PrivateKey]
WireGuard.PublicKey = [PublicKey]
WireGuard.PresharedKey = [PresharedKey]
WireGuard.DNS = 8.8.8.8, 1.1.1.1
WireGuard.AllowedIPs = 0.0.0.0/0
WireGuard.EndpointPort = 51820
WireGuard.PersistentKeepalive = 25

La cosa es que nuestro proveedor de VPN de WireGuard nos va a dar la siguiente configuración:

[Interface]
Address = 10.128.XXX.XXX
PrivateKey = [PrivateKey]
DNS = 10.128.0.1

[Peer]
PublicKey = [PublicKey]
AllowedIPs = 0.0.0.0/0
Endpoint = fr.gw.xeovo.com:51820

Debemos de configurar nuestro fichero de la siguiente forma que se explica a continuación:

  • Name = Cualquier nombre que quieras.
  • Host = IP del servidor de WireGuard. En mi caso es el resultado de hacer ping a fr.gw.xeovo.com.
  • WireGuard.Address = La IP interna que se nos asigna a nosotros con la mascara en formato CIDR. Hay que poner la IP que hay en el apartado de Interface > Address: 10.128.XXX.XXX
  • WireGuard.ListenPort = Este parametro es opcional, pero debemos de poner el puerto 51820 (a menos que tu proveedor te diga lo contrario. El puerto 51820 es el puerto por defecto de WireGuard).
  • WireGuard.PrivateKey = La PublicKey del fichero.
  • WireGuard.PublicKey = La PrivateKey del fichero.
  • WireGuard.PresharedKey = Si vuestro proveedor os da PresharedKey, la podéis añadir. Xeovo por ejemplo no da esta opción.
  • WireGuard.DNS = Los servidores de nombre que usaréis. Xeovo por ejemplo ofrece una IP para DNS, pero podemos poner cualquier IP de DNS.
  • WireGuard.AllowedIPs = Subredes que tienes acceso a través del tunel. Si queremos que todo el tráfico de LibreELEC pase por la VPN, entonces dejamos 0.0.0.0/0, si no hay que poner todas las redes que queramos separadas por comas.
  • WireGuard.EndpointPort = El puerto de escucha del servidor, por defecto 51820.
  • WireGuard.PersistentKeepalive = Periodic keepalive in seconds (optional)

Con todo esto, nos tiene que quedar una configuración así:

[provider_wireguard]
Type = WireGuard
Name = Xeovo FR
Host = 51.158.XXX.XXX
WireGuard.Address = 10.128.XXX.XXX/32
WireGuard.ListenPort = 51820
WireGuard.PrivateKey = [PrivateKey]
WireGuard.PublicKey = [PublicKey]
WireGuard.DNS = 8.8.8.8, 1.1.1.1
WireGuard.AllowedIPs = 0.0.0.0/0
WireGuard.EndpointPort = 51820
WireGuard.PersistentKeepalive = 30

Este fichero lo deberemos de guardar en /storage/.config/wireguard/ bajo el nombre de wg0.config (por ejemplo, podéis poner el nombre que queráis, pero tiene que acabar en .config).

Tras guardar el fichero, ejecutaremos el comando para visualizar los servicios, deberían de aparecer la VPN configurada y las redes wifis que detecta la Raspberry Pi.

# connmanctl services
* R home              vpn_185_210_30_121
*AO Wired             ethernet_dca622135939_cable

Con esto ya nos podremos conectar:

connmanctl connect vpn_185_210_30_121

Si ahora ejecutamos el comando para ver las interfaces configuradas en nuestra Raspberry Pi veremos las siguientes interfaces:

# ifconfig
eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          inet addr:XXX.XXX.X.XXX  Bcast:XXX.XXX.X.XXX  Mask:XXX.XXX.X.XXX
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:20021 errors:0 dropped:1 overruns:0 frame:0
          TX packets:59818 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5215140 (4.9 MiB)  TX bytes:33272938 (31.7 MiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:82 errors:0 dropped:0 overruns:0 frame:0
          TX packets:82 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4452 (4.3 KiB)  TX bytes:4452 (4.3 KiB)

wg0       Link encap:UNSPEC  HWaddr XX:XX:XX:XX:XX:XX  
          inet addr:XXX.XXX.X.XXX  P-t-P:XXX.XXX.X.XXX  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP  MTU:1420  Metric:1
          RX packets:17083 errors:0 dropped:0 overruns:0 frame:0
          TX packets:58765 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4113576 (3.9 MiB)  TX bytes:30719664 (29.2 MiB)

wlan0     Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Veremos ahora que tenemos la interfaz eth0 que es la conexión a cable y luego la wg0 que es la interfaz virtual de la VPN de WireGuard.

Si consultamos ahora nuestra IP, veremos que nos aparece la IP de la VPN:

# curl ifconfig.me
51.XXX.XXX.XXX

Si revisamos las rutas, también nos daremos cuenta de que hay una ruta de la VPN que enlaza con la IP de nuestro Router:

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         *               0.0.0.0         U     0      0        0 wg0
IP_VPN  192.168.1.1     255.255.255.255 UGH   0      0        0 eth0
192.168.1.1     *               255.255.255.255 UH    0      0        0 eth0

Configurar SystemD para que arranque la VPN al iniciar

Este proceso es bastante sencillo, ya que únicamente hay que copiar un fichero y actualizar un valor. Ejecutamos lo siguiente:

cp /storage/.config/system.d/wireguard.service.sample /storage/.config/system.d/wireguard.service

Lo editamos y donde ponga vpn_service_name_goes_here tenemos que poner el nombre de la VPN que nos detectaba el comando connmanctl

ExecStart=/usr/bin/connmanctl connect vpn_185_210_30_121
ExecStop=/usr/bin/connmanctl disconnect vpn_185_210_30_121

Y para acabar, lo añadimos al arranque y iniciamos:

systemctl enable /storage/.config/system.d/wireguard.service
systemctl start wireguard.service

Ahora solo nos quedará reiniciar la Raspberry Pi y ver que tras iniciar se conecta correctamente a la VPN que hemos configurado. A disfrutar!

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación