wol_upsnap

UpSnap – Uma Aplicação de Wake on LAN Self-Hosted

Acorda! É o que dizemos aos nossos servidores em casa quando chega a hora h e eles estão desligados, felizmente o Wake on Lan é possível com o UpSnap.

Se possui vários servidores ou sistemas de laboratório em casa e precisa de uma solução que o ajude a acordar esses sistemas através da LAN, o UpSnap é a solução ideal. A capacidade de ligar ou desligar as suas máquinas através de um pacote mágico pode poupar-lhe tempo, consumo de energia e o incómodo de ter de pressionar o botão manualmente, especialmente se os seus dispositivos estiverem num sótão, cave ou num local de difícil acesso.

Fonte

O que é o UpSnap?

O UpSnap é uma simples aplicação de Wake on LAN escrita com SvelteKit, Go, PocketBase e nmap.

Principais Características

  • Painel para acordar dispositivos com um clique
  • Definir eventos programados de ativação e desativação através de cronjobs
  • Adicionar portas personalizadas a dispositivos a serem pingados
  • Descobrir dispositivos através de scans na rede
  • Esquema de cores escuro/claro ou preferido pelo sistema
  • Imagens Docker para amd64, arm64 e arm/v7

Instalar o UpSnap usando o Docker Compose

Dockerfile
version: "3"
services:
  upsnap:
    container_name: upsnap
    image: ghcr.io/seriousm4x/upsnap:4
    network_mode: host
    restart: unless-stopped
    volumes:
      - ./data:/app/pb_data
    # # Para usar um utilizador não root, crie primeiro o ponto de montagem (mkdir data) para que tenha as permissões corretas.
    # user: 1000:1000
    # environment:
    #   - TZ=Europe/Berlin # Definir o fuso horário do container para agendamentos do cron
    #   - UPSNAP_INTERVAL=@every 10s # Define o intervalo em que os dispositivos são pingados
    #   - UPSNAP_SCAN_RANGE=192.168.1.0/24 # A faixa de scan é usada para descobrir dispositivos na rede local
    #   - UPSNAP_WEBSITE_TITLE=Nome Personalizado # Título personalizado do site
    # # O DNS é usado para resolução de nomes durante o scan de rede
    # dns:
    #   - 192.18.0.1
    #   - 192.18.0.2
    # # Pode alterar o IP:porto de escuta dentro do comtainer desta forma:
    # entrypoint: /bin/sh -c "./upsnap serve --http 0.0.0.0:5000"
    # healthcheck:
    #   test: curl -fs "http://localhost:5000/api/health" || exit 1
    #   interval: 10s
    # # Ou instalar pacotes personalizados para desligamento
    # entrypoint: /bin/sh -c "apk update && apk add --no-cache <O_SEU_PACOTE> && rm -rf /var/cache/apk/* && ./upsnap serve --http 0.0.0.0:8090"

Após executar a instalação, basta aceder ao endereço IP do seu host Docker na porta 8090.

Mudar porta de acesso

Se desejar alterar a porta de 8090 para outra, basta descomentar a linha abaixo e definir a porta pretendida, neste caso será 4141.

Dockerfile
entrypoint: /bin/sh -c "./upsnap serve --http 0.0.0.0:4141"

Adicionar Dispositivos ao UpSnap

Considero que a maneira mais simples de adicionar dispositivos é utilizando a funcionalidade de scan incorporada.

Conforme indicado na página, se instalou através do Docker, deve funcionar de imediato. Basta clicar em “SCAN” e aguardar que a aplicação o faça. Assim que estiver concluído, verá uma lista de dispositivos e poderá adicioná-los facilmente com um simples clique num botão.

Tenha em mente que, se desejar utilizar as funcionalidades de Wake on LAN, a placa de rede do dispositivo deve suportar o WOL (Wake on LAN) ou simplesmente não funcionará.

Também pode utilizar o UpSnap para desligar os seus dispositivos usando o seguinte comando Linux:

Bash
sshpass -p p4lavr@_pass3 ssh -o "StrictHostKeyChecking=no" user@host "sudo poweroff"

Coloque o comando na caixa “Comando de Desligamento”. Certifique-se de substituir a senha e os detalhes do servidor pelos seus próprios. Em seguida, a partir do seu painel, pode tanto acordar como desligar o dispositivo.

Se desejar, pode até configurar cronjobs aqui para acordar e desligar os dispositivos automaticamente, para que não tenha de o fazer manualmente.

O seu dispositivo suporta a funcionalidade de Wake on LAN (WOL)?

A sua placa de rede (NIC) deve suportar o Wake on LAN (WOL) e estar configurada para aceitar pacotes mágicos. Pode também ser necessário certificar-se de que o WOL está ativado na BIOS da motherboard. Por padrão, essas funcionalidades estão ativadas no Debian, e podemos confirmar isso ao executar o seguinte comando:

Bash
ethtool eth0

Onde “eth0” é o nome da sua placa de rede (NIC). Este comando fornece informações sobre as configurações da placa de rede, incluindo se o WOL está ativado. Certifique-se de que as configurações estão de acordo com os requisitos do WOL para o seu sistema.

Não tem ethtool?

De modo a verificar a compatiblidade com o WOL, instalei o software ethtool no meu servideo Debian (em Proxmox).

Bash
apt install ethtool -y

Depois escrever ethtool e selecionar TAB 2 vezes de modo a verificar as possíveis interfaces de rede, obtive como resultado:

Plaintext
root@prox:~# ethtool 
--change               enp3s0                 fwbr1100i1             fwln2000i0@fwpr2000p0 
--change-eeprom        --features             fwbr2000i0             fwpr1000p0@fwln1000i0 
--coalesce             --flash                fwln1000i0@fwpr1000p0  fwpr1000p1@fwln1000i1 
--config-nfc           fwbr1000i0             fwln1000i1@fwpr1000p1  fwpr101p0@fwln101i0   
--driver               fwbr1000i1             fwln101i0@fwpr101p0    fwpr1100p0@fwln1100i0 
--dump-module-eeprom   fwbr101i0              fwln1100i0@fwpr1100p0  fwpr1100p1@fwln1100i1 
--eeprom-dump          fwbr1100i0             fwln1100i1@fwpr1100p1  fwpr2000p0@fwln2000i0 

Através do comando ip a foi possível verificar qual a interface corresponde à pretendida.

Sendo esta a enp3s0, obtive o seguinte resultado:

Makefile
root@prox:~# ethtool enp3s0 
Settings for enp3s0:
        Supported ports: [ TP    MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Advertised pause frame use: Symmetric Receive-only
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                             100baseT/Half 100baseT/Full
                                             1000baseT/Half 1000baseT/Full
        Link partner advertised pause frame use: Symmetric
        Link partner advertised auto-negotiation: Yes
        Link partner advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full
        Auto-negotiation: on
        master-slave cfg: preferred slave
        master-slave status: slave
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: external
        MDI-X: Unknown
        Supports Wake-on: g
        Wake-on: g
        Link detected: yes

Wake-on: g” indica que o Wake on LAN (WOL) está ativado, isto significa que a placa de rede está configurada para aceitar pacotes mágicos que podem acordar o dispositivo remotamente.

Outros usos para o UpSnap

Embora o foco principal do UpSnap seja a função Wake on LAN, também funciona como um verificador de estado online. Ele enviará pings para as suas máquinas no intervalo que definir nas configurações e informará se estão contactáveis.

Se as máquinas estiverem online, verá o botão de energia verde exibido no painel. Se estiverem offline, serão exibidos como um botão de energia vermelho.

Poderá também criar utilizadores e gerir as permissões dos mesmos.

Testar o UpSnap

Configurei o UpSnap num ambiente local utilizando o Docker e consegui acordar e desligar com sucesso os meus servidores.
Configurei um subdomínio e um túnel para a aplicação utilizando o Cloudflared com uma aplicação de acesso. Consegui acordar e desligar com sucesso os meus servidores remotamente.

Notas Finais e Reflexões

Uma solução eficaz de Wake on LAN tem sido uma necessidade há algum tempo para mim. Embora existam outras soluções disponíveis, nenhuma delas se equipara à simplicidade de configuração proporcionada pelo UpSnap.

Se considerar o UpSnap uma ferramenta valiosa, por favor, visite o repositório UpSnap no GitHub e conceda-lhe uma estrela como sinal de reconhecimento!

Artigos Relacionados