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!
Comentarios