Encendido y Apagado Remotos

Os presento el resultado de una investigación en la que llevo algun tiempo trabajando, hasta que lo he conseguido llevar a la práctica: necesitaba encender y/o apagar un equipo informático remoto, fuera de su red local, a voluntad.

El motivo no es otro que hay muchas microempresas y personas que tienen equipos remotos como «servidores», esto es, equipos donde guardan toda su información porque no la quieren almacenar en la nube (datos sensibles o know-how, por ejemplo), y que para acceder a ellos están utilizando las soluciones que presentaba en mi artículo de «Conectar Equipos Remotos» (https://www.tecnologiaciber.com/conectar-equipos-remotos/). Antes no tenía tanta importancia, ahora con la subidita de la luz toca la moral tener un equipo todo el tiempo encendido cuando no lo utilizas (porque estés viajando, comiendo o durmiendo). El ahorro energético es considerable si lo puedes apagar y encender sólo cuando te haga falta.

Todos me podréis decir: para eso esta el Wake-on-Lan, el encendido remoto desde la red, pero sólo funciona bien desde dentro de la propia red, y cuando lo quieres hacer a un equipo que está fuera, lleva implícito ABRIR PUERTOS EN EL ROUTER y ya imagináis que te expones seriamente a un ciberataque, basta con leer mi artículo anterior: https://www.tecnologiaciber.com/bajo-ataque/

Bueno, pues «también puedes comprar un enchufe de los miles de modelos que hay que son gestionables desde el móvil…» Claro, pero el corte brusco de la alimentación de una torre de PC puede llevar aparejado la avería del disco duro electromecánico, del disco sólido, la fuente de alimentación, incluso la CPU o de cualquier otro componente del equipo.

Así que debía seguir pensando…

Hasta que encontré la forma.

Ciertamente, no hace falta tener en Grado en Ingeniería Eléctrica (aunque yo lo tenga), porque el montaje está accesible a todas las personas que llegan al blog. Normalmente me conocéis por mis fregaos en Ciberseguridad, pero combinarlo con todo lo que tengo en la cabeza es una auténtica ida de pinza. Como ya he dejado la calle, quien quiera explotarlo comercialmente puede hacerlo, y siempre podrá contar con mi amplia experiencia, como Consultor.

Raspberry Pi 3 B+

Hoy día los equipos se encienden con una pulsación en el botón de encendido, e igualmente se apagan con esa misma pulsación. Así que lo único que debemos hacer es simular ese toque mágico. ¿Cómo? Empleando un dispositivo IoT.

Orange Pi Zero H2

Los IoT de estos tiempos son microordenadores que pueden ejecutar muchos servicios a voluntad, con un consumo eléctrico bajisimo. Por ejemplo, la Orange Pi Zero H2 consume 0.2 A, es decir, 1 vatio. Comparándolo con un PC normal, que consume alrededor de 90 vatios, imaginad la diferencia. Estos cálculos dependen del número de dispositivos conectados, que estés usando la gráfica para minar, etc… Si le conectamos un relé de bajo consumo, y lo enchufamos a un IoT como el indicado, podremos simular esa pulsación actuando directamente sobre los conectores de la placa, aislando cualquier interferencia externa. Por supuesto, existen otros componentes electrónicos para hacer esa simulación de pulso, pero salvo que seáis expertos en electrónica (algún supermaster eléctronico lee, que lo sé, mis artículos), esta publicación está dirigida a los que no los sois.

Arduino uno con Shield de Ethernet

¿Qué necesitamos?

– Un PC

– Un dispositivo IoT: puede ser cualquiera, he montado el invento en Raspberry Pi 3 y 4,Orange Pi Zero, Arduino Mega con Shield de Ethernet… Incluso desde otro PC. Da igual que sea por wifi o por cable, el caso es que esté conectado a Internet.

– Un relé de bajo consumo. Personalmente utilizo unas plaquitas que traen 2 relés, porque puedo destinar el segundo como reserva o para reiniciar el router si lo necesito.

Dos relés 5 VDC/10A

– Un poco de pericia manual

– Saber un poquito de Sistemas Operativos, Redes, Programación en Python (¡¡¡oeeee!!! ), PHP..

– Unos cablecillos para conectar el IoT con la placa base, uno de los extremos ha de ser macho y el otro, hembra; y 3 cablecillos hembras por los dos extremos. Su nombre técnico es Dupont (al menos, yo los conozco así). Os muestro también una imagen de los conectores que se emplean en una placa base: el pulsador (switch) de reset (RST), el de encendido (PWR), el del LED del disco duro (en este caso, IDE, es de una caja del año de la Polca).

Cables Dupont y conectores de Placa Base

Comenzamos


1) Preparar el IoT.

Para este articulo, empleo una Raspberry Pi 3B+ que tengo a mano. Consume algo más que la Orange pero no me vuelvo paranoico, jaja. Instalo Raspbian oficial en una microSD de 16 Gb (con 4 Gb me sobraría, pero es lo mínimo que mi distribuidor me vende). Hoy día es muy sencillito, tienes hasta una utilidad, Raspberry Pi Imager, que te lo hace todo en un santiamén. La imagen que recomiendo utilizar es sin entorno gráfico, no nos va a hacer falta para nada.

Raspberry Pi Imager

Os dejo que investiguéis los otros dos IoT mencionados, Orange Pi y Arduino+Shield Ethernet.

Ni que decir tiene que, una vez grabada la imagen, deberíamos de activarle el servicio de ssh, para conectarnos desde el pc a la Raspberry y así configurarla (hay mil tutoriales sobre cómo hacer esto, pero ya sabéis que me tenéis en Twitter y en Telegram como @Kirzahk para todas vuestras dudas).

2) Configuración electrónica.

Esta es la parte de pericia manual, ya que debemos establecer varias conexiones:

  1. Conectar con cable la Raspberry al router, empleando para ello un cable de red ethernet. Esto es lo más sencillo del mundo, de primero de ciberinfantil.
  2. Comprobar la conexión, para ello utilizamos un cliente de ssh desde el cual nos conectemos a la Raspberry, previo descubrimiento de cuál es su dirección IP en nuestra red. Para ello podéis utilizar un programa de testeo de direcciones IP, Nmap, Netscan o similar. Una vez conectados a ella, y mediante un simple «ping» hacia la web que más coraje os dé, comprobamos que la conexión de red es la correcta y pasamos a lo divertido, la programación física.
  3. Debemos identificar qué pines vamos a emplear en la Raspberry. Para ello buscamos el esquema de conexionado, que suele estar en mil millones de sitios de Internet, que se conocen como GPIO. Os presento la imagen tomada del sitio https://www.hwlibre.com/gpio-raspberry-pi/
  4. Creo que no es descabellado pensar que si utilizamos relés de 5V, una de las conexiones que debemos realizar es, precisamente, uno de esos pines. Luego el Ground, o GND, también ha de conectarse, y podemos elegir cualquiera de los múltiples existentes en la parrilla de conexiones físicas. Por úlimo, seleccionamos el puerto de salida que necesitamos.
  5. En el lado del PC, debemos actuar en los 2 cablecitos que vienen del pulsador de arranque, normalmente tipografiado como PWR o POWER. Con un montaje que dejo para otra ocasión, podríamos no perder siquiera el botón de la caja. En este caso, sustituyo los que vienen de la caja por los que proceden del relé.
  6. RECOMENDACIÓN: Aunque estamos trabajando con tensiones seguras (todas las que están por debajo de los 24 voltios lo son), se aconseja realizar todas ellas con los dispositivos apagados y desconectados de la red, no sea que por un calambrazo se estropeen.
GPIO de Raspberry Pi 4 y 3

3) Programación en Python

Podríamos utilizar C, pero Python es lo suficientemente polivalente como para hacer el trabajo él solito, y no necesitamos más. La única pega es que debemos actualizar Raspbian, con las siguientes instrucciones:

Por supuesto, toca instalar un par de cosillas más, el instalador pip y la librería que nos permite acceder a los puertos GPIO:

En nuestro editor favorito de código, tecleamos las siguientes líneas de programación, que os las dejo comentadas.

En realidad, queda más bonito meter ese código en una función que llamemos a voluntad:

Ahora debemos hacer un poco de programación mixta, es decir, por una parte necesitamos que Python mire una determinada URL ( = dirección) de Internet, y en función de lo que encuentre en ella, realice una tarea:

¿Qué contiene el archivo gpiorasberry.php? Pues código PHP, junto a sentencias SQL de manejo de bases de datos. No me extiendo porque no os he hecho un tutorial sobre PHP (algún día de éstos…).

Ya casi funcionaría… Sólo queda decirle a la Raspberry que ejecute el programa de Python cada cierto tiempo, para eso utilizamos la instrucción del sistema operativo «cron»:

De esta manera, se ejecutaría el script de python cada minuto, y si en la URL existe un 1 se activará el relé durante el tiempo que lo hemos establecido, y si existe cualquier otra cosa, no hará nada. Si queréis profundizar en la programación con «cron», os recomiendo visitar una página en la que viene fenomenalmente bien explicado:

https://extassisnetwork.com/tutoriales/como-ejecutar-trabajos-cron-cada-5-10-o-15-minutos/

Montaje casi terminado, a excepción de la conexión con el PC
Conexiones del relé con la placa base

Infinitas posibilidades

Si alguno de vosotros me ha «soportado» cuando hablo de las virtudes de saber programar, sabrá que las posibilidades son ahora ya infinitas.

  • Si configuramos la Raspberry para, cuando se encienda, te envíe un correo electrónico indicándote que los sistemas están operativos, podrías irte a la web y, mediante un panel de control bien programado y siguiendo las OWASP TOP 10, que no fuese vulnerable a inyecciones de cualquier tipo, podrías colocar un botón con el que actuar sobre el relé.
  • Si sabes algo de programación móvil, casi no cuesta hacer una app que desde él puedas dirigirte a la web y cambiar los valores necesarios para tener un botón en el móvil.
  • Si mides el tiempo que tarda en arrancar el equipo a activar, podrías comprobar cuándo está en funcionamiento comprobando su conectividad de red
  • También podríamos conectar a través de una VPN, como las que os explicaba en el artículo de «Conectar Equipos Remotos», y descartar la web, por ejemplo.
  • Si colocas sensores adicional a la Raspberry Pi, por ejemplo, el DHT11, podrías tener valores de temperatura y humedad ambiente, y podrías tener un valor aproximado de lo que está ocurriendo en la habitación donde tengas la Raspberry Pi. Evidentemente hay sensores más exactos, ya es lo que quieras gastarte.

Espero que os haya gustado, esta solución ya la tengo implementada en varios equipos y funciona de lujo.