Categoría: servidor

Telegram y el precio de la luz

Telegram y el precio de la luz

Desde hace ya un tiempo, llevo usando Telegram como principal aplicación de mensajería con mis conocidos. En esta, existen los llamados bots, que pueden implementarse por cualquiera a través de un API. Hace algún tiempo, intenté crear una librería para poder tratar con esos bots desde Java de una forma sencilla, pero lo dejé de lado por falta de tiempo, y por los constantes cambios que se van introduciendo por parte de Telegram. Por suerte no fui el único con esa idea, y alguien terminó llevándola a buen puerto, e incluso mejorándola. La librería se integra de una forma sencillísima con Spring Boot, para hacer un bot completamente funcional integrado en el ecosistema de Telegram.

Para crear un bot con esa librería, solo hay que usar el starter que incluye, y arrancarlo como una aplicación más de Spring. Lo necesario también, es obtener el token necesario de Telegram a través del BotFather que tiene, y que sirve para poder hacer las peticiones, que se debe añadir dentro de tu aplicación.

En su día, ya había creado algún bot por mi cuenta con mi propia librería anticuada, pero que también había abandonado, y ya llevaba dando vueltas a la cabeza el hacer uno nuevo, que realmente fuese útil. Y con mi situación actual, no terminó siendo difícil encontrar lo que necesitaba.

Como ya sabéis de mi anterior post, tengo un coche eléctrico, con el que estoy encantado. Para recargarlo, el 99% de las veces lo hago a través de la propia electricidad de mi casa, después de haber instalado un punto de carga en el garaje, y eso nos lleva hasta 2021. El precio de la luz como todos sabemos se disparó de manera desproporcionada, y la factura, incluso no siendo un consumidor excesivo, subió un riñón, y parte del otro. De hecho subió tanto, que ha habido un tiempo que no me compensaba cargar el coche en mi casa, porque me salía más caro, que irme a uno de los cargadores rápidos que hay cerca de mi casa.

Con todo esto, decidí que si iba a cargar el coche en casa, tendría que saber cuando hacerlo, para que mi factura no fuese una autentica aberración. Encontré una página web donde te dice que precio tiene la luz a cada hora del día, pero consultarla cada día, me parecía un poco engorroso. Esa página tira de un api público accesible para todos, que se puede consultar sin ningún problema, y al que le di un par de vueltas para ver como funcionaba.

Con mis ganas de volver a hacer un bot para Telegram, y mi necesidad de saber el precio de la luz cada día de forma rápida y sencilla, estaba claro lo que había que hacer: Un bot que te mandase cada día los precios de la luz de las horas de ese día, de forma automática. Con todo esto en mente, me puse manos a la obra, y en menos de un fin de semana ya lo tenia listo, y desplegado en un servidor propio que tengo desde hace siglos y un poco desaprovechado.

PrecioDeLaLuzBot

El código del bot es muy sencillo en si mismo: Obtiene desde el api público el precio de la luz para el día actual (Y el día siguiente también), y se lo guarda en una base de datos MariaDB. También almacena en la base de datos el ID de Telegram de todos los usuarios que se van uniendo al bot, para poder enviarle el mensaje con los precios de la luz. Una vez hecho esto, con un proceso programado a las 00:00 de cada noche, se crea el mensaje con los precios de ese día, y se le manda el mensaje formateado a todos los usuarios. Por supuesto si un usuario decide parar el bot, se le elimina del listado para que no se le mande más. Todo esto desplegado en un servidor a través de Docker (Como ya sabéis, no despliego ya nada que no se pueda hacer a través de Docker).

Desde que lo desplegué lo consulto todos los días, y en el momento de escribir este post, ya hay 70 personas que lo están usando, cosa que ya es más de lo que esperaba. Podéis acceder al bot vosotros mismos escaneando el QR de abajo, o pulsando directamente sobre el, para abrirlo directamente en Telegram.

Wireguard: VPN en casa en 10 minutos

Si tenemos un poco de interés en servidores de algún tipo, o queremos no depender de servicios de terceros, es casi seguro que tendremos algún equipo en casa, que nos haga de servidor, al que poder acceder una vez estamos conectados a la red de nuestra casa. Pero exponer estos servicios a Internet, muchas veces puede llegar a ser un peligro, ya que estamos dando acceso de alguna manera a equipos que tenemos en casa.

Para solucionar este problema, existen las llamadas VPNs, que durante el confinamiento por COVID19 tanto se están usando, para poder acceder a los servicios de las empresas (Aunque ya se usaban VPNs anteriormente para eso mismo, y poder navegar de forma anónima por Internet, con un proveedor de VPN).

Pero este servicio no tiene porque estar acotado a las empresas. Si como decía antes tenemos algún servicio en nuestra casa al que podamos acceder por conexión de red, montar una VPN en nuestra casa, para poder acceder a esos servicios una vez que estamos fuera, es probablemente la mejor opción.

En mi caso, tengo un NAS donde tengo todos mis datos importantes, backups, y más cosas, a los que puedo acceder una vez estoy conectado a la red de mi casa, pero muchas veces quiero poder acceder a esos archivos desde fuera. Podria exponer estos archivos hacia fuera mediante un servicio FTP por ejemplo, pero eso daría pie a ataques por parte de terceros para acceder a esos archivos, comprometiendo muchisimos datos privados.

Para evitar esto, me he instalado un servidor de VPN al que obviamente, si que he dado acceso hacia el exterior mediante el mapeo del correspondiente puerto en el router, y consiguiendo el acceso seguro a todos los datos de mi casa.

Además este acceso por VPN sería una capa de seguridad muy buena, si estáis de viaje y os tenéis que conectar desde una red WiFi pública, desde las cuales jamás deberías usar ningún servicio importante, debido a la posibilidad que hay de que se intercepten las comunicaciones, y que al conectarte a la VPN de tu casa, quedaría resulto sin ningún problema.

Normalmente se usaría en estos casos una VPN de tipo OpenVPN que es probablemente el servicio más extendido. Investigando un poco más encontré un servicio muy actual para VPN que usa algoritmos de criptografía modernos, y con una velocidad asombrosa, llamado Wireguard.

Esta VPN se puede configurar en cualquier servidor que tengas en casa (En mi caso una Raspberry Pi 4), y su configuración gracias a Docker (Como ya os dije, no instalo ya de forma tradicional ningún servicio. Absolutamente todo con Docker, o sino no se usa), resulta ser de lo más sencillo.

Antes de nada, deberéis tener un nombre de dominio asociado a vuestra IP de casa. Para ello con algún tipo de DNS dinámico, os valdría perfectamente.

Os dejo por aquí el docker-compose que uso para poder crear el servicio de Wireguard

version: "3"

services:
  wireguard:
    image: linuxserver/wireguard
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Madrid
      - SERVERURL=midominio.decasa.com #optional
      - SERVERPORT=51821 #optional
      - PEERS=2 #optional
      - PEERDNS=8.8.8.8 #optional
      - INTERNAL_SUBNET=10.13.13.0/24 #optional
    volumes:
      - /home/misuuario/wireguard:/config
      - /lib/modules:/lib/modules
    ports:
      - 51821:51820/udp
    restart: unless-stopped

Lo imporante de este archivo son los siguientes puntos:

  • SERVERURL: Este debe ser el dominio que tiene que apuntar a vuestra casa.
  • SERVERPORT: Por defecto se pone a 51820, pero si a su vez quereis desde vuestra casa, poder conectar como cliente a otras VPN Wireguard, os recomiendo poner el 51821
  • /home/misuuario/wireguard: Este será el directorio donde se guarde toda vuestra configuración de la VPN
  • 51821:51820/udp Hay que asegurarse de que el puerto interno del contenedor 51820 queda mapeado al externo en el 51821, y por supuesto, mapear en vuestro router el puerto 51821 hacia vuestro servidor.

Una vez arrancado el servidor, si vemos los logs con

docker logs -f wireguard

se nos mostrarán dos códigos QR correspondientes a los dos clientes creados para la VPN. Estos códigos QR deben ser escaneados con las aplicaciones correspondientes de móviles (Android e IOS) para poder acceder a la VPN de forma sencilla desde nuestro dispositivo.

Si queremos poder acceder desde un PC, desde Windows o Mac no hace falta más que instalar su cliente desde https://www.wireguard.com/install/

En Linux, Wireguard ya va integrado en el Kernel, por lo cual solo hay que seguir las instrucciones que se dan en la misma página para poder configurarlo.

Para encontrar el archivo de configuración que se debe importar en estos clientes, solo haría falta ir al directorio /home/misuuario/wireguard y entrar a los sub-directorios de los clientes generados (peer1 y peer2), y en ellos se encontrarán los ficheros peerX.conf, que al importarlos en el cliente de Wireguard te deja la configuración lista para activarse. También en estos directorios encontrareis los ficheros de imagen del código QR por si queréis volver a configurarlos en dispositivos móviles.

El proceso de instalación no os llevará más de diez minutos, entre la configuración del fichero docker-compose, el mapeado del puerto correspondiente en el router, y la configuración de un cliente para tener listo un acceso privado a vuestra casa.