#Contenedores Docker interesantes

#Contenedores Docker interesantes

Taimado - Last Update 11/03/2025

No voy a hacer una explicación detallada de lo que es Docker y para lo que sirve porque hay miles de tutoriales por internet (Ej: https://is.gd/UrmMZd) donde se puede obtener esa y mucha más información. Lo que aquí se pretende es hacer un pequeño recopilatorio de contenedores que pueden ser de gran utilidad para aquellos de vosotros que por ejemplo queráis montar en vuestro Box un servidor de descarga.
No obstante si tenéis algún problema con alguno de ellos a la hora de instalarlo en vuestros Box recomiendo acudir a la fuente de los mismos, en Docker Hub.
⚠️ No doy soporte a la instalación de los mismos fuera del grupo de Telegram de CoreElec. ⚠️

Antes de empezar con los contenedores en cuestión será preciso (obviamente) tener instalado el servicio Docker:

Add-ons > Instalar desde respositorio > CoreElec Add-ons > servicios > Docker

Asimismo y para facilitar la gestión de los contenedores recomiendo encarecidamente instalar Portainer, que os facilitará la vida enormemente.
La instalación de un contenedor es tan fácil como abrir una sesión SSH en vuestro box y pegar las líneas correspondientes, luego ENTER, dejar que acabe y acudir a Portainer (http://ip_box:9000) para ver si todo está bien.

Tan fácil como copiar y pegar en la consola.


Listado de contenedores instalados. Para activar o desactivar contenedores tan fácil como start o stop.

Aquí 👇🏻 os dejo un pequeño listado de contenedores que os pueden resultar útiles. Hay muchísimos, podéis ir probando éstos y muchos más que encontraréis en Docker Hub. Eso sí, antes de instalar alguno seleccionad la arquitectura de vuestro sistema —a veces la rama latest no enlaza bien la versión compatible con nuestros dispositivos—, de lo contrario la instalación fallará. En el caso de los Tv Box con SoC S905X, D, W los S905X2 o los S922 la arquitectura a seleccionar sería ARM.

Portainer
aMule
qBittorrent
JDownloader
Netdata
Watchtower
Pihole & Cloudflared (DoH)
Duck DNS
Actualizar rclone (No el contenedor)
Plex
Tautulli
Emby (gracias a @Spufy. No da soporte de ningún tipo. No abráis privado)
Emby (Linuxserver.io)
Wireguard (gracias a @roisiano por lo relativo al apartado cliente en CE)
TvHeadEnd
Changedetection.io (+ seleniarm/standalone-chromium (x64))
Nginx + Nginx Proxy Manager
Authelia
Fail2ban
Uptime Kuma
GoAccess
Dockge
Glances
Acestream (engine) + Bonus (Acexy)
Docker-Controller-Bot (Enlace a la fuente. Está explicado perfectamente y gráficamente.

Con respecto al contenedor de Emby para Amlogic es necesario hacer una indicación. Parece ser que hay un bug con el tema de las Bibliotecas y que en algunos Tv Box con estos SoC una vez terminadas de escanear aquellas montadas con rclone (unidades de Gdrive) se cuelgan irremediablemente. Bien, la solución pasa por deshabilitar la opción Activar monitoreo en tiempo real que podéis encontrar dentro de las opciones avanzadas de la biblioteca en cuestión. Obviamente a partir de ese momento tendréis que actualizar a mano la biblioteca cuando os interese.

En la página de contenedores del grupo Emby_Oficial también hay uno de zerotier, pero ese proyecto está abandonado por parte de su creador @Spufy por lo que para la instalación de zerotier en vuestro CE recomiendo usar o bien la versión disponible vía entware o bien el proporcionado por el repositorio Thoradia.


Portainer

docker run -d -p 9000:9000 -p 9443:9443 --name=portainer --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /portainer_data:/data \
    portainer/portainer-ce:latest

Nota: Muchos de vosotros seréis usuarios habituales de Portainer en su versión 1.xx.xx
El anterior comando nos instala la nueva versión 2 por lo que si queréis "subir" desde laas versiones antiguas a la nueva no podréis hacerlo de forma automática vía watchtower, lo tendréis que hacer de forma manual. No obstante es muy sencillo y no conlleva la pérdida de los contenedores que ya tenéis instalados. Los pasos son los siguientes:

1.- Os conectáis por SSH al equipo donde tenéis portainer corriendo
2.- Una vez dentro ejecutáis el comando de arriba
3.- Obtendréis un error similar a este

4.- Ahora deberéis detener primero y borrar después vuestro portainer "antiguo" con estos dos comandos usando eso sí vuestro id de contenedor sin comillas, o sea lo que va después de by container:

docker stop 40bef4b54a55fb3fad8615fb1ffb6cb78b4c3ac757067fb3bfb65c37ef54866440bef4b54a55fb3fad8615fb1ffb6cb78b4c3ac757067fb3bfb65c37ef548664

Y después:

docker rm 
40bef4b54a55fb3fad8615fb1ffb6cb78b4c3ac757067fb3bfb65c37ef54866440bef4b54a55fb3fad8615fb1ffb6cb78b4c3ac757067fb3bfb65c37ef548664

5.- Ahora ejecutáis otra vez el comando de principio del post y listo, ya tendréis todos vuestros contenedores corriendo en la nueva versión 2 de portainer

docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce


Información obtenida de: https://dbtechreviews.com/2020/08/update-portainer-to-version-2-0-super-easy/

qBittorrent

docker run -d \
  --name=qbittorrent \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/Madrid \
  -e UMASK_SET=022 \
  -e WEBUI_PORT=8080 \
  -p 6881:6881 \
  -p 6881:6881/udp \
  -p 8080:8080 \
  -v </path/to/appdata/config>:/config \
  -v </path/to/downloads>:/downloads \
  --restart unless-stopped \
  ghcr.io/linuxserver/qbittorrent

Importante: Tendréis que hacer un port mapping de los puertos en vuestro router para que los datos que lleguen a esos puertos lleguen al Box y qBittorrent funcione a la velocidad adecuada. Los puertos como podéis ver arriba son los TCP 6881 y 8090 y el UDP 6881.
También deciros que podéis elegir las rutas que queráis. En este caso sería cambiar lo que va antes de :/
O sea, config, downloads, watch e incomplete (este último si hiciéramos uso de él).

Eso sí, cread esos directorios a mano.
Ojo, tendréis que añadir a mano el directorio watch (o como lo llaméis) dentro de las opciones del qBittorrent, de lo contrario el programa no sabrá la ruta del directorio a monitorear. Así debería quedar configurado dicho directorio en las opciones 👇🏻:

Importante la barra después de watch

Por cierto, el usuario/contraseña para acceder al interface web (http://ip_tv_box:8090) vía navegador es:

admin/adminadmin


aMule

docker run --name "amule" \
-p 4711:4711 -p 4712:4712 -p 8004:8004 -p 8006:8006/udp
-p 8007:8007/udp \
-e PUID=0 -e PGID=0  \
-e WEBUI_PWD=[wanted_password_for_web_interface] \
-e GUI_PWD=[wanted_password_for_gui_interface] \
-v /storage/amule/conf:/home/amule/.aMule \
-v /storage/amule/incoming:/incoming \
-v /storage/amule/tmp:/temp 
synopsis8/raspberrypi3-amule:amule

Importante: Lo mismo que en caso anterior en el tema de los puertos. Asimismo en los apartados WEBUI_PWD y GUI_PWD utilizad la contraseña que más os guste.


JDownloader

docker run -d --restart=always -v /storage/.config/jdownloader/downloads:/root/Downloads -v /storage/.config/jdownloader/cfg:/opt/JDownloader/cfg --name jdownloader -u $(id -u) jaymoulin/jdownloader

Importante: Para acceder al mismo se hace desde https://my.jdownloader.org pero antes debéis configurar la contraseña de MyJDownloader con el siguiente comando que introduciréis vía SSH:

docker exec jdownloader configure email@email.com password

Obviamente donde pone password pondréis la contraseña que hayáis elegido.

Nota: Es posible que a la hora de ejecutar el docker run no se identifique correctamente la arquitectura de vuestro SoC con lo que el contenedor no funcionaría. Para que esto no ocurra lo mejor es identificar en el docker run la arquitectura, como por ejemplo para el caso de un SoC S905X2:

docker run -d --restart=always -v /storage/.config/jdownloader/downloads:/root/Downloads -v /storage/.config/jdownloader/cfg:/opt/JDownloader/cfg --name jdownloader -u $(id -u) jaymoulin/jdownloader:1.4.3-armhf

La versión disponible para cada arquitectura la tenéis en el Docker Hub del creador en el apartado tags:

https://hub.docker.com/r/jaymoulin/jdownloader/tags

Watchtower

Este contenedor lo arrancaremos mediante docker-compose, si no lo tienes instalado en tu CE aquí te explico cómo hacerlo.

version: "3"
services:
 watchtower:
   image: containrrr/watchtower:latest
   container_name: watchtower
   volumes:
     - /var/run/docker.sock:/var/run/docker.sock
   environment:
     - "TZ=Europe/Madrid"
     - "WATCHTOWER_CLEANUP=true"
     - "WATCHTOWER_NOTIFICATIONS=shoutrrr"
     - "WATCHTOWER_INCLUDE_STOPPED=true"
     - "WATCHTOWER_NOTIFICATION_URL=telegram://123456789:xxxxx@telegram/?channels=123456789"
   command: --interval 21600
   restart: unless-stopped


Watchtower tiene un montón de opciones de personalización, aquí las podéis ver todas. Yo he optado por incluir en el compose tres que me parecen muy útiles. Por un lado WATCHTOWER_CLEANUP=true que lo que hace es borrar las imágenes obsoletas una vez se han actualizado, por el otro WATCHTOWER_NOTIFICATIONS=shoutrrr que utilizaremos para enviar notificaciones a nuestro grupo de Telegram y finalmente he incluido WATCHTOWER_INCLUDE_STOPPED=true para que actualice también aquellos contenedores que estén detenidos o no los tengáis en funcionamiento.

Dado que es posible que por una u otra razón no queráis actualizar algún contenedor en cuestión la solución consiste en añadir a aquellos la opción:

--label=com.centurylinklabs.watchtower.enable=false \

En caso de que sea un contenedor que arranquemos mediante run o bien

"WATCHTOWER_LABEL_ENABLE=false"

Si fuera a través de docker-compose

En cualquier caso la forma más fácil de hacer esto sería a través de Portainer, accediendo al contenedor que no queramos actualizar, pinchamos en Duplicate/Edit

Menú de configuración de un contenedor en Portainer

A continuación bajamos y en Advanced container settings pulsamos sobre Labels

Aquí es donde añadiremos la opción para que no se actualice

Pulsamos sobre add label y añadimos

com.centurylinklabs.watchtower.enable

En value pondremos false

Lo siguiente será pulsar sobre Deploy de container que encontramos un poco más arriba y listo. Reconstruirá el contenedor con la nueva opción introducida para que Watchtower no lo actualice.

Aquí es donde se "reconstruye" el contenedor con la opción nueva introducida


Por otro lado una de las opciones más útiles de este contenedor reside en la posibilidad de configurarlo para recibir en nuestro Telegram notificaciones de las actualizaciones de nuestros contenedores llevadas a cabo por Watchtower, para ello se hace uso de la opción incluida en el compose 👆🏻 👇🏻:

telegram://123456789:xxxxx@telegram/?channels=123456789

Ahora bien, ¿Cómo se hace ?

Vamos a crear un bot Telegram. Este será el que reciba las notificaciones enviadas por Watchtower.

Lo primero es crear dicho bot con @BotFather y la opción /newbot

Creación del bot

Le ponemos un nombre siguiendo las instrucciones que nos dice y finalmente nos aparecerá un mensaje como este.

Información de nuestro recién creado bot

Ese token (incluídos los dos puntos) corresponde con la primera parte del comando que os puse más arriba:

telegram://123456789:xxxxx@telegram/?channels=123456789


Lo siguiente es obtener nuestro ID. Para ello usaremos uno de los múltiples bots disponibles en Telegram para ello. Yo he optado por IDBot. Si hacéis una búsqueda lo encontraréis fácilmente. Una vez dentro introducís la opción /getid y os dará vuestro id.

Nuestro ID

El cual corresponde con la segunda parte del comando:

telegram://123456789:xxxxx@telegram/?channels=123456789


Si todo ha ido bien tras introducir los datos en el contenedor y arrancarlo recibiréis una primera notificación en vuestro recién creado bot similar a esta:

Mensaje de bienvenida


Finalmente, una vez que Watchtower actualice uno de vuestros contenedores recibiréis una notificación similar a esta:

Aviso de actualización de dos contenedores


Netdata

docker run -d --name=netdata \
-e PGID=0 \
-p 19999:19999 \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--cap-add SYS_PTRACE \
--security-opt apparmor=unconfined \
netdata/netdata:stable

Nota: Netdata es una herramienta que nos permite gestionar de forma gráfica el estado de nuestro equipo accediendo vía web a través de la dirección http://IP_box:19999

Esto es lo que veréis al acceder al interface web de Netdata


Pihole


ACTUALIZACIÓN:
Si tenéis instalado docker-compose (aquí cómo instalarlo) en vuestro equipo os recomiendo usar el compose que os dejo más abajo ya que de paso habilitaréis DoH (DNS over HTTPS) mediante un tunel de Cloudflare denominado cloudflared a través del cual pasarán todas las peticiones DNS de vuestros equipos vía https y no como convencionalmente se realiza con el protocolo http sin el tráfico cifrado. Esto añadirá un plus de privacidad al proxy DNS de vuestro Pihole.
Solo tendréis que cambiar las rutas de volumes presentes en el archivo si así lo queréis y posteriormente en vuestro router (si lo permite) configurar el DNS con la IP de vuestro server Pihole (también en la configuración del servidor DHCP).


version: "3.5"

services:
  pihole:
    image: pihole/pihole:latest
    container_name: pihole
    hostname: pihole
    networks:
      pihole:
        ipv4_address: 172.20.0.2
    dns:
      - 127.0.0.1
      - 1.1.1.1
    ports:
      - target: 53
        published: 53
        protocol: tcp
      - target: 53
        published: 53
        protocol: udp
      - target: 67
        published: 67
        protocol: udp
      - target: 80
        published: 80
        protocol: tcp
      - target: 443
        published: 443
        protocol: tcp
    environment:
      - "TZ=Europe/Madrid"
      - "PROXY_LOCATION=pihole"
      - "VIRTUAL_PORT=80"
      - "PIHOLE_DNS_=172.20.0.3#5053"

    volumes:
      - "/storage/.config/pihole/etc-pihole/:/etc/pihole/"
      - "/storage/.config/pihole/etc-dnsmasq.d/:/etc/dnsmasq.d/"
    restart: always

  cloudflared:
    image: crazymax/cloudflared:latest
    container_name: cloudflared_pihole
    hostname: cloudflared
    networks:
      pihole:
        ipv4_address: 172.20.0.3
    environment:
      - "TZ=Europe/Madrid"
      - "TUNNEL_DNS_UPSTREAM=https://1.1.1.1/dns-query,https://1.0.0.1/dns-query"
    restart: always

networks:
  pihole:
    ipam:
      config:
        - subnet: 172.20.0.0/24

Os dejo enlace de descargar del archivo yml por si os interesa:

Descarga de docker-compose.yml con Pihole + Cloudflared

Así os quedará la configuración de los DNS con el tunnel DoH de Cloudflare.


Una vez finalizado el proceso y si todo ha transcurrido con normalidad llega el momento de configurar la contraseña de admin vía Web Gui. Tan fácil como ejecutar:

docker exec -it pihole_container_name pihole -a -p

Importante: Seguramente vuestro contenedor se llame pihole por lo que tendréis que escribir 2 pihole seguidos en el anterior comando. Tened eso en cuenta.

Una vez hecho ya podemos acceder al interface web vía navegador:

http://ip_box_docker/admin/


A partir de aquí lo siguiente sería configurar los equipos que queráis que usen Pihole. Esto se hace editando las conexiones de red y cambiando por ejemplo el servidor DNS primario por la IP del box donde tengáis instalado el contenedor en cuestión. En el caso de las redes WiFi es muy útil para los teléfonos móviles y las tablets.

Si queréis usarlo fuera de vuestra LAN tendríais que combinarlo con un servicio tipo zerotier o wireguard, en el que podáis indicar que todo se enrute con dicho servicio, pero eso ya es otra historia...

El interface web como veis está muy conseguido y la información que muestra es muy detallada.

Para el tema de las reglas de filtrado de publicidad, spam, tracking, etc os recomiendo las listas de estas dos webs: Blocklist Collection y The Block List Project

Si todo ha funcionado correctamente al hacer un dig a una dirección web veréis que las peticiones DNS las realiza al servidor DoH que habéis instalado.

Aquí podéis ver el resultado del comando dig en cuestión mostrando el resultado a google.com


Aquí se puede ver cómo se resuelven las peticiones DNS del cliente 192.168.1.22

Toda la información acerca del contenedor de Cloudflared y su funcionamiento conjunto con Pihole la podéis encontrar aquí.

NOTA: Algunas consideraciones a tener en cuenta:

  1. Usad un solo servidor DHCP. Si usáis el de vuestro router mirad si se puede editar en el mismo el servidor DNS a usar. Si no es así (por ejemplo en los routers Livebox de Jazztel) mejor deshabilitarlo y usar como servidor DHCP el de Pihole.
  2. Si usáis en vuestros equipos IP’s fijas hay que editar la configuración de red y apuntar el servidor DNS hacia la IP de vuestro Pihole.
  3. Para usuarios de Firefox. Si anteriormente estábais usando la opción incluida (en las últimas versiones del navegador) de habilitar DoH os recomiendo dejar de hacerlo. Ya tenéis instalado el tunel Cloudflared que se encargará de ello más eficientemente.


Plex

Copio y pego la información compartida por el compañero @sepulturero:

mkdir -p /storage/.config/plex/config && mkdir -p /storage/.config/plex/transcode

Después crear el contenedor así:

docker create \
 --name=plex \
 --net=host \
 -e PUID=1000 \
 -e PGID=1000 \
 -e VERSION=docker \
 -e UMASK_SET=022 #optional \
 -v /storage/.config/plex/config:/config \
 -v /storage/.config/plex/transcode:/transcode \
 -v /rutadelgdrive:/media \ --restart unless-stopped \
linuxserver/plex

Modifica la ruta de /rutadelgdrive por tu ruta del gdrive 😉, vas a portainer y les das a start

A continuación, entras por el navegador:

http://ip_de_tubox:32400/web

Te "logueas" con la cuenta que quieras montar el servidor y ya está hecho, configuras plex como cualquier servidor, y cuando hagas las bibliotecas, te vas a /media

Una vez hecho todo, en kodi metes el addon oficial de plex o el plexkodiconnect, lo que prefieras y a correr.


Tautulli

docker create \
 --name=tautulli \
 -e PUID=1000 \
 -e PGID=1000 \
 -e TZ=Europe/Madrid \
 -p 8181:8181 \-v /storage/tautulli/config:/config \
 -v /storage/.config/plex/config/Library/Application%20Support/Plex%20Media%20Server/Logs:/logs \--restart unless-stopped \
linuxserver/tautulli

Este programa permite llevar a cabo un seguimiento de todo el contenido visualizado en vuestro servidor Plex de una forma gráfica e intuitiva.
Como veis las opciones que tenéis que personalizar son las relativas a vuestras rutas locales de los directorios config y Logs


Actividad


Gráficas


Si queréis ver todas las posibilidades que os ofrece visitad la página del proyecto que seguro que os gustará:

https://tautulli.com/


Duck DNS

Bueno, este sin duda es de los más sencillos. Duck DNS permite acceder a vuestra LAN remotamente independientemente de la IP pública que tenga asignada vuestro router.
Lo primero de todo es registraros en Duck DNS y crear vuestro subdominio.

A partir de aquí es bastante sencillo habilitar el servicio en nuestro dispositivo vía docker.

docker create \
 --name=duckdns \
 -e PUID=1000 `#optional` \
 -e PGID=1000 `#optional` \
 -e TZ=Europe/Madrid \
 -e SUBDOMAINS=subdomain1,subdomain2 \
 -e TOKEN=token \
 -e LOG_FILE=false `#optional` \
 -v /path/to/appdata/config:/config `#optional` \
 --restart unless-stopped \
linuxserver/duckdns

Hay poco que explicar. En la variable SUBDOMAINS introducís vuestro subdominio o subdominios creados separados por una coma y en la variable TOKEN hacéis lo mismo con vuestro TOKEN personal.
Le dais a start en portainer al contenedor y a funcionar.


Wireguard

Wireguard permite configurar una VPN a nivel de Kernel en Linux de forma muy rápida y eficiente, asociando clientes a un servidor a través de un sistema de autenticación clásico basado en un conjunto de llaves pública-privadas.
Las bondades de Wireguard son muchas, podéis encontrar en internet numerosos benchmarks donde así se atestigua, pero sin duda una de ellas para mí decisiva es la integración, seguridad, fiabilidad y robustez que aporta en poco más de 4000 líneas de kernel frente a más de 500.000 de por ejemplo OpenVPN.

La configuración que vamos a llevar a cabo partirá de un contenedor que se encargará de instalar y configurar el servidor. Una vez arrancado este se encargará de crear todos los archivos necesarios para configurar los clientes que antes le hayamos indicado, ya sea 1, 3, 10, etc.

Al lío. Para empezar el contenedor de Wireguard:

docker run -d \
  --name=wireguard \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  --network=host `#optional` \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/Madrid \
  -e SERVERURL=wireguard.domain.com `#optional` \
  -e SERVERPORT=51820 `#optional` \
  -e PEERS=3 `#optional` \
  -e PEERDNS=auto `#optional` \
  -e INTERNAL_SUBNET=10.13.14.0 `#optional` \
  -e ALLOWEDIPS=0.0.0.0/0 `#optional` \
  -p 51820:51820/udp \
  -v /path/to/appdata/config:/config \
  -v /lib/modules:/lib/modules \
  --restart unless-stopped \
  ghcr.io/linuxserver/wireguard

Nota: @roisiano me cuenta que:
La opción:

--sysctl="net.ipv4.conf.all.src_valid_mark=1" \ (Eliminada ya arriba)

Hace "petar" el contenedor. Se descarga e intenta arrancar pero NO lo consigue (da un fallo vinculado a esa opción, precisamente).
Si se quita esa línea funciona. Probado en CoreELEC 19.5 rc2, la última estable.

En todo caso, entiende que meter esa línea en el docker run es más o menos equivalente a introducir el comando después por ssh. Por lo tanto propone como alternativa "meter" esto por ssh:

echo “net.ipv4.ip_forward = 1” >/storage/.config/sysctl.d/ip_forward.conf

y WG así, desde docker, funciona perfectamente.

No voy a perder mucho tiempo en explicar todos los apartados del contenedor más allá de los básicos. Si queréis obtener más información os recomiendo la página de dockerhub del propio Wireguard.
Eso sí, una salvedad: el contenedor lo monto en modo host porque quiero tener acceso a la IP local para el tema del DNS de un server Pi-hole que tengo en el mismo equipo. Si no tenéis algo similar no haría falta y se podría eliminar dicha línea.
Sigamos:

  -e SERVERURL=wireguard.domain.com `#optional` \

Esta línea es básica, dado que aquí deberemos especificar la dirección donde está localizado nuestro servidor para que así los clientes sepan donde "apuntar". Recomiendo para ello crear un dominio dinámico en DuckDNS y configurarlo después en vuestro servidor a través del contenedor que aquí mismo tengo publicado. Una vez creado lo introducimos sin necesidad de poner http://

  -e SERVERPORT=51820 `#optional` \

De nuevo el puerto es básico, dado que será a través del cual se produzca la comunicación server-cliente. Tendréis que redirigir en vuestro router dicho puerto hacia la IP máquina que hace de servidor. Cada router es un mundo, así que tendréis que buscar cómo hacer un port-triggering en el vuestro.

Abajo podéis ver cómo redirige el puerto a una IP privada
-p 51820:51820/udp \

Esta es la opción que permite indicarle al servidor hacia que puerto queréis que apunte. Si no queréis que sea ese el puerto usado en vuestro servidor cambiaríais el primer número.


  -e PEERS=3 `#optional` \

Aquí indicáis el número de clientes que queréis configurar, en este caso 3.


  -e PEERDNS=auto `#optional` \

Básicamente esto indica quien va a encargarse de resolver las peticiones de nombre de dominio. Podéis poner las de Cloudflare, Google, etc. Yo uso 1.1.1.1
Ni que decir tiene que si tenéis por ejemplo en vuestro servidor instalado PiHole o AdGuard también podréis usarlos, eso sí, de nuevo sería necesario que tuvierais los puertos apuntando donde deben.


  -e INTERNAL_SUBNET=10.13.14.0 `#optional` \

El rango IP que va a usar la red Wireguard que creéis.


 -v /path/to/appdata/config:/config \

Aquí indicáis dónde va a estar situado en vuestro servidor la configuración del mismo, incluidas las llaves de los clientes que hayáis seleccionado. Yo personalmente uso /storage/.config/wireguard/config ya que mi server está en un Box con CE y ya viene con un directorio creado llamado wireguard, que nos será de ayuda más adelante, cuando pasemos a configurar los clientes.

El resto de opciones no las toquéis. No voy tampoco a perder mucho tiempo en explicarlas. De nuevo, si queréis más información al respecto os recomiendo la página del docker hub.

Hasta aquí sería la parte dedicada al contenedor. Sólo quedaría arrancarlo (si no lo ha hecho ya) y acudir a la ruta que hemos especificado donde se aloja config.

Una vez dentro nos encontraremos algo como esto:

Directorio wireguard de vuestro CE
Listado de clientes


Como podéis observar yo he creado 10 clientes. Los archivos de configuración de cada uno de ellos se encuentran en sus respectivas carpetas.

Archivos de configuración del cliente 5

En este punto nos podemos detener un momento. Como veis en la captura de arriba hay un archivo de imagen png. Es un código QR que sirve para que desde la app de Android o de IOS la escaneéis y agilizar el proceso de configuración del cliente en cuestión.

Lo que realmente nos interesa es el archivo peerX.conf que es el que necesitaremos para configurar nuestro cliente por ejemplo en otro Tv Box con CE. o de los clientes.
Gracias al compañero @roisiano facilitaremos a partir de aquí el procedimiento bastante. Hasta ahora la configuración que teníamos en este tutorial era un poco compleja en el apartado del cliente, dado que había que seguir un procedimiento un poco farragoso. Ahora haremos uso de entware que nos facilitará bastante la vida.
Para instalar entware podéis hacerlo siguiendo los puntos 1, 2 y 3 de aquí.

Luego instalaremos en el equipo CE que queremos conectar al servidor los paquetes relativos a Wireguard haciendo uso de opkg, que es el gestor de paquetes proporcionado por entware :

opkg update
opkg install wireguard-go wireguard-tools

Lo siguiente será hacer uso de alguno de los peerXX.conf creados como archivos de configuración de clientes anteriormente y que se encuentran en el servidor. Elegimos el deseado y lo llevaremos a la carpeta /opt/etc/wireguard, la cual crearemos:

mkdir -p /opt/etc/wireguard

Una vez copiado dicho archivo lo renombraremos a wg0.conf

Lo siguiente será editar el archivo y hacer dos cambios para que funcione bien el cliente de CE:

1.- Eliminar la línea (si la tuviéramos)

DNS = X.X.X.X

El motivo es la gestión (o mejor dicho la NO gestión) del resolvconf en CE, un problema que viene de atrás. En mis pruebas no he sido capaz de levantar el interface wg0 si mantengo esa línea, cosa que en los clientes de otras plataformas (Pc's con GNU/Linux, Windows, Android...) obviamente no ocurre. De momento eliminar dicha línea es la única solución que he encontrado. 🤷🏻‍♂️

2.- Modificar el apartado AllowedIPs en caso de que hayamos anteriormente decidido en el server autorizar todas las redes y solo incluir ahí el segmento de red usado en WG, en el ejemplo voy a usar 10.13.14.0/24 que es el que elegimos para crear el contenedor de WG.

AllowedIPs = 10.13.14.0/24


3.- Por las pruebas que he llevado a cabo es bueno habilitar en algunos clientes CE (en las demás plataformas no haría falta) la opción PersistentKeepalive colocando un valor de 25. Únicamente habría que hacerlo en aquellos casos en los que aun habiendo autentificado bien dicho cliente el servidor no tenga constancia de que se ha iniciado dicho cliente. La opción PersistentKeepalive lo que hace es enviar un aviso al servidor WG de que dicho cliente se encuentra funcionando. Para ello solo debéis modificar dicho apartado en el archivo wg0.conf del cliente en cuestión para que en lugar de un 0 aparezca 25.

PersistentKeepalive = 25


Ahora solo quedaría levantar el interface wg0 vía consola:

wg-quick up wg0


Si todo ha ido bien debería de apareceros algo más o menos así (en este ej. uso otra red, concretamente la 10.111.112.0/24):

wg0 levantado ;-)

Si quisiéramos desactivar temporalmente el interface wg0 haríamos:

wg-quick down wg0


Si quisiéramos saber el “estado” de la red:

wg show


Estado del interface wg0


Para que el servicio Wireguard (wg0) se arranque con CE, crearemos el archivo: wireguard.service, en storage/.config/system.d/ con este contenido:

[Unit]
Description=wireguard
After=network-online.service
Requires=network-online.service

[Service]
ExecStart=/opt/bin/wg-quick up wg0
Restart=always
RestartSec=10
StartLimitInterval=30
StartLimitBurst=20

[Install]
WantedBy=kodi.target


A continuación ejecutaremos en ssh las siguientes órdenes:

chmod 777 wireguard.service
systemctl enable wireguard.service
systemctl start wireguard.service


Básicamente, estamos llevando ese archivo a system.d (donde se inician los “demonios” en CE) y le estamos diciendo que lo habilite para iniciarse con el sistema, y que lo arranque.
LISTO. Tanto en el servidor CE como en los clientes CE que hayamos creado, ya deberíamos tener Wireguard funcionando. Se puede comprobar tanto con:

ifconfig

Lo que nos mostraría el listado de nuestros interfaces de red en nuestro equipo CE

Listado de interfaces. Podemos ver el wg0 funcionando

Como con:

wg show

Que nos mostraría el estado de la red Wireguard, en este caso wg0

Estado del interface wg0


Como podéis ver en la captura de aquí debajo, en mi red actual tengo tres equipos conectados al servidor. Dos de ellos son Tv Box con CE, uno en local y otro en remoto y de momento ningún problema.

Listado de clientes


No mostrará la lista de clientes conectados y no conectados. Si estuviera bien conectado nuestro cliente nos debería de indicar los paquetes enviados y recibidos, como así es y podréis comprobar.

Nota del compañero @roisiano:

Si bien la resolución DDNS funciona sin problemas en los clientes de Android, Windows, Ubuntu y también en CoreELEC para conectar con el servidor, al menos en Windows (en el cliente Wireguard para Windows), si por lo que sea cambia la IP del servidor (por ejemplo, reinicio del router del domicilio del servidor), NO se actualiza la conexión y, aunque en teoría estás conectado, en realidad no lo estás. En Windows hay que detener la conexión del cliente Wireguard y volver a arrancarla para que vuelva a “resolver” el dominio DDNS y “pille” la nueva IP. Ignoro si esto también es así en CoreELEC (cliente), Ubuntu o Android, porque no recuerdo que me haya pasado… pero podría ser también así. En el peor de los casos (que en los clientes en CE, Android y Ubuntu sucediese lo mismo si cambia la IP del servidor DDNS), habría que detener e iniciar de nuevo el servicio en los clientes (o, en el caso de un cliente en CE, reiniciar el TV-Box).
El propio @roisiano ha publicado la solución al problema anteriormente descrito que surge al cambiar la IP. Podéis echarle un ojo aquí 👇🏼:
https://discourse.coreelec.org/t/wireguard-entware-watchdog/19160/3



TvHeadEnd

No voy a perder mucho tiempo en este contenedor dado que las opciones de configuración una vez dentro son inmensas. Yo normalmente recomiendo instalarlo en modo host, por lo que el contenedor que os dejo vendrá preparado para ello. Tened en cuenta que en este modo no hay mapeo de puertos, por lo que si los puertos que usa TVH ya están siendo utilizados por algún otro contenedor que estéis usando no os funcionará. Aquí os lo dejo:

docker run -d \
  --name=tvheadend \
  --network=host \
  -e PUID=1000 \
  -e PGID=1000 \ 
  -e TZ=Europe/Madrid \
  -v /storage/.config/tvh/config:/config \
  -v /storage/.config/tvh/grabaciones:/recordings \
  -v /storage/.config/tvh/picons:/picons \
  --restart unless-stopped \
ghcr.io/linuxserver/tvheadend


Cambiad esas rutas por las que queráis en vuestro box, si no os valen estas. Tan solo una salvedad llegados a este punto. Para aquellos que dispongáis de un Box con tuner incluido, tipo Ki Pro, tendréis que indicarle la ruta donde docker tendrá que "buscarlo" en el Box en cuestión, por lo que habrá que añadir encima de la última línea:

--device=/dev/dvb

A funcionar.

Adaptadores del Ki Pro detectados



Como dije antes hay miles de contenedores interesantes y éstos son solo una pequeña muestra. Iré añadiendo poco a poco alguno más que pudiera resultar útil.

Gracias a @deejayClown, @roisiano y @Sepulturer0 por la información y la ayuda.



Report Page