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.
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
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.
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:
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:
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).
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:
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:
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!