IFPR-Labtelecom: FailsafePi (FsP/FsPi)

FailsafePi (FsP ou FsPi) é uma plataforma instalada no Labtelecom desde 19/11/2018 e consiste na utilização de um Raspberry Pi com um dispositivo de rede para manter o funcionamento básico da rede de computadores do laboratório, visando o monitoramento contínuo (com o maior uptime possível), baixo consumo (até 5W) e outras facilidades que visam otimizar o funcionamento da rede de computadores. Alguns dados dessa plataforma são enviados periodicamente para o servidor local e nuvem conforme o projeto: CMS - Nuvem. Além disso, o dispositivo funciona como um Servidor DNS local e também realiza a captura de imagens de algumas câmeras IPs do laboratório.

Ensino

Crontab:

O dispositivo usa o Crontab para realizar a execução períodica de scripts de monitoramento. Conforme arquivo apresentado abaixo, são executados os scripts períodicos a cada 2 e 20 minutos e o script_boot_route.sh a cada 30 min de cada hora cheia, ou seja, 1:30 hrs, 2:30 hrs, 3:30 hrs sucessivamente.

#*****************************************************************

#FsP - CRONTAB ***************************************************

#*****************************************************************

30 * * * * cd /home/pi/Dropbox-Uploader/; ./script_boot_route.sh;

*/20 * * * * cd /home/pi/Dropbox-Uploader/; ./script_pi.sh;

*/2 * * * * cd /home/pi/Dropbox-Uploader/; ./script_cam.sh;

Crontab - script_boot_route.sh:

Esse script é executado uma vez por hora como segurança para renovar a tabela de roteamento caso ocorra alguma problema de comunicação na rede. Basicamente são adicionados os dois gateways e as rotas reversas das redes internas do laboratório:

sudo ip route add 192.168.7.0/24 via 192.168.1.252;

sudo ip route add 192.168.30.0/24 via 192.168.1.30;

sudo ip route add 192.168.40.0/24 via 192.168.1.40;

sudo ip route add 192.168.50.0/24 via 192.168.1.50;

sudo ip route add 192.168.238.0/23 via 192.168.1.252;

sudo ip route add 192.168.240.0/23 via 192.168.1.252;

sudo ip route add 192.168.242.0/23 via 192.168.1.252;

Crontab - script_cam.sh:

O sistema utiliza o projeto VideoLan (VLC) para capturar imagens das câmeras IPs do laboratório. Essa técnica consiste em utilizar o protocolo RTSP ou HTTP para estabelecer a conexão entre as câmeras e equipamentos. Nesse caso, são realizadas capturas de imagem da câmera do armário principal e armazenado no próprio equipamento, conforme script apresentado abaixo:

killall -9 vlc; sleep 4; vlc -V dummy --intf=dummy http://USER:PASSWORD@192.168.1.22:8080/video --video-filter scene --scene-path /media/pi/aa5e5d6d-65f8-4521-81d2-0195823b3d603 --scene-ratio=50 --scene-prefix sala303_$(date +%Y)$(date +%m)$(date +%d)_$(date +%H):$(date +%M)_ --scene-format jpeg --scene-width 640 --scene-height 480 vlc://quit;

O parâmetro -scene-ratio= 50 determina uma captura de 1 imagem a cada 2 segundos, conforme fórum do VLC, a quantidades de fotos por segundo é igual a scene-ratio*24/600. Além disso a foto capturada de largura de 640 pixels (scene-width 640) e comprimento de 480 pixels (--scene-height 480).

Crontab - script_pi.sh:

Esse script é executado a cada 20 minutos pelo Crontab visando enviar um log de algumas informações da rede. Inicialmente é removido o arquivo de log antigo e gerado um novo arquivo com informações de temperatura, resposta de conectividade (ping) e capacidade dos disco (df -h) no arquivo log_pi.txt. Na sequência é enviado para o Dropbox.

cd /home/pi/Dropbox-Uploader/;((uptime;date;vcgencmd measure_temp);(ping 192.168.1.1 -q -c 5);(ping 192.168.1.9 -q -c 5);((df -h | grep sda1); (df -h | grep root); (df -h | grep mmcblk0p1);)) > /home/pi/Dropbox-Uploader/log_pi.txt; ./dropbox_uploader.sh upload log_pi.txt /;

Esse script também verifica e muda automaticamente o gateway principal caso ocorra algum problema na conectividade. Nesse caso um ping é disparado para o gateway principal (192.168.1.253/24) e se não houver resposta a rota default é excluída e adicionada a rota para o gateway secundário (192.168.1.254/24) conforme script abaixo:

ping 192.168.1.253 -c 1 | grep packets > acc_check_gw.txt; ACC1=$( awk '{print $4} ' acc_check_gw.txt); if [ "$ACC1" -eq 0 ] ; then sudo ip route del default via 192.168.1.253 dev eth0; sleep 1; sudo ip route add default via 192.168.1.254 dev eth0; echo "ALARME ASA5512, PERDA DE CONECTIVIDADE" >> /home/pi/Dropbox-Uploader/log_pi.txt; else sudo ip route del default via 192.168.1.254 dev eth0; sleep 1; sudo ip route add default via 192.168.1.253 dev eth0; echo "gateway ASA5512-X" >> /home/pi/Dropbox-Uploader/log_pi.txt; fi; ip ro >> /home/pi/Dropbox-Uploader/log_pi.txt;

Com o VLC mediante o protocolo RTSP é estabelecida uma conexão com a câmera IP da sala 305 e enviada uma imagem para o Dropbox, conforme script apresentado abaixo:

cd /home/pi/Dropbox-Uploader; vlc -V dummy --intf=dummy rtsp://192.168.1.1:554/ucast/11 --video-filter scene --scene-path /home/pi/Dropbox-Uploader/ --scene-ratio=10000 --scene-prefix log_telecom_FsP_ --scene-format jpg --scene-width 800 --scene-height 600 vlc://quit --run-time=2; ./dropbox_uploader.sh delete log_telecom_FsP_00001.jpg; ./dropbox_uploader.sh upload log_telecom_FsP_00001.jpg /;

Na sequência é selecionado a imagem mais recente da captura da câmera (realizada pelo script_cam.sh) e enviada a imagem para o Dropbox, conforme apresentado abaixo:

cd /media/pi/aa5e5d6d-65f8-4521-81d2-0195823b3d603/; cp $(ls -t | head -n1) /home/pi/Dropbox-Uploader/log_tablet303_FsP_0001.jpg; cd /home/pi/Dropbox-Uploader; ./dropbox_uploader.sh delete log_tablet303_FsP_0001.jpg; ./dropbox_uploader.sh upload log_tablet303_FsP_0001.jpg /;

No final é realizado o envio das informações para o Dropbox, conforme abaixo

./dropbox_uploader.sh delete log_pi.txt; sleep 1; ./dropbox_uploader.sh upload log_pi.txt /;


Dropbox-Uploader:

Conforme utilizado no scripts descritos anteriomente, o envio de arquivos é realizado pelo Dropbox Uploader. Apesar do aplicativo não sincronizar as pastas igual no computador, é possível enviar, modificar e baixar arquivos do Raspberry Pi para os servidores do Dropbox, conforme alguns exemplos descritos abaixo:

1) Envia arquivo file.txt para diretório raiz do Dropbox

./dropbox_uploader.sh upload file.txt /

2) Remove arquivo file.txt do equipamento:

./dropbox_uploader.sh delete file.txt

3) Baixa o arquivo do Dropbox para o equipamento

./dropbox_uploader.sh download /file.txt

Pi Hole - Servidor DNS, Filtro (dnsmasq):

A plataforma instalada permite também o monitoramento do tráfego DNS e o bloqueio de conteúdos desnecessário com base no projeto Pi Hole. O sistema permite o monitoramento da rede, por exemplo na figura abaixo é apresentada as requisições DNS no período de 18/11/2018 até 24/11/2018.

Nesse período foram totalizados 92381 acessos, sendo que 17,4% dos conteúdos foram bloqueados conforme relatório abaixo.

Manutenção:

Atualização: para atualizar a versão do Raspian no terminal digite

sudo apt update

sudo apt dist-upgrade

Configurações básicas: no terminal digite

sudo raspi-config

se desejar atualizar todo o sistema digite:

sudo apt full-upgrade

Endereço IPv4 fixo: no arquivo /etc/dhcpcd.conf adicione os parâmetros:

interface eth0 static ip_address=192.168.40.4/24 static routers=192.168.40.1 static domain_name_servers=127.0.0.1

Troubleshooting:

01) No dia 27/07/2020: o sistema PiHole travou parando os serviços DHCP e DNS. Para resolver esse problema foram realizados dois procedimentos:

01.a) Mudança do DNS do arquivo resolv.conf: Com o comando sudo nano /etc/resolv.conf foi editada a linha nameserver de 127.0.0.1 para 8.8.8.8

01.b) Na sequência foi atualizado o sistema com o comando: pihole -up