VDI Remoto com Raspberry Pi e VPN Forcepoint
Versão do Hardware tratado no documento: Raspberry Pi 3B+
Versão do Software tratado no documento: Raspbian GNU/Linux 10 (buster)
1.0) Introdução
Diante da perspectiva crescente de trabalho remoto e de acesso a poder de computação, dados e serviços independente do local, iniciamos experimentos para proporcionar estes recursos através de técnicas de VDI ( Infraestrutura de Desktop Virtual) utilizando o Raspberry Pi e Firewall Forcepoint de forma a proporcionar um acesso barato e livre aos recursos internos da instituição.
Através da solução abaixo, podemos criar um acesso a uma estação Windows remota e segura utilizando apenas um Raspberry Pi e alguns softwares Livres pré configurados.
O acesso remoto a uma estação Windows exigirá a aquisição de licenciamento para tal com a Microsoft.
Os experimentos demonstrados abaixo fazem referencia a conexão de VDI com estação da Reitoria do IFSP e deve ser adaptada para outros ambientes.
2.0) Implantação em RP3B+ (Raspberry Pi 3B+) com interface gráfica pré instalada
Os procedimentos abaixo permitem a implantação do serviço em um RP3B+ com sistema operacional configurado com interface gráfica em sua instalação.
Esta solução possui como pré-requisito a implantação da VPN C2S com a reitoria, os procedimentos para tal podem ser encontrados AQUI.
2.1) Instalação dos pacotes necessários
Instale o software necessário para realizar a conexão remota com Windows via protocolo RDP com os comandos abaixo:
sudo apt-get update && sudo apt-get install rdesktop
2.2) Configuração e inicialização do serviço
Agora vamos criar um serviço do SystemD que ficará encarregado de verificar se a conexão VPN já está pronto para utilização e iniciará o serviço de conexão Remote Desktop:
Crie e edite o arquivo "/lib/systemd/system/remote.service":
sudo nano /lib/systemd/system/remote.service
Adicione o conteúdo a seguir no arquivo:
[Unit]
Description=Remote Desktop
Requires=network-online.target
[Service]
Type=idle
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/pi/.Xauthority
ExecStart=/usr/bin/rdesktop -k pt-br -n <HOSTNAME-DO-RASPBERRY-PI> -g 100% -z -r sound:local -x 0x80 -u <USUARIO-REMOTO> -P -f <IP-DO-SERVIDOR-DE-DESTINO>
ExecStartPre=/bin/sh -c 'until ping -c1 <IP-DO-SERVIDOR-DE-DESTINO>; do sleep 1; done;'
Restart=always
RestartSec=3
[Install]
WantedBy=graphical.target
Não se esqueça de alterar os parâmetros para seu ambiente.
O serviço acima fará todas as checagens necessárias e também irá reiniciar o terminal remoto caso ele seja fechado pelo cliente.
Agora temos que instalar o serviço e inicializa-lo:
Reload das configurações do serviço:
sudo systemctl daemon-reload
Instalação do serviço:
sudo systemctl enable remote.service
Iniciar o serviço:
systemctl start remote.service
DICA: Você pode verificar o status do serviço trocando o "start" do comando anterior por "status"
Está feito! ao reiniciar o equipamento, se estiver tudo certo, o sistema irá inicializar e logo em seguida realizar a conexão RDP com a estação remota!
3.0) Implantação em RP3B+ (Raspberry Pi 3B+) sem interface gráfica pré instalada
Fonte: SITE
Até o presente momento esta solução não foi validada completamente pela nossa equipe.
Os procedimentos abaixo permitem a implantação do serviço em um RP3B+ com sistema operacional configurado sem interface gráfica em sua instalação.
3.1) Instalação dos pacotes necessários
Instale o software necessário para realizar a conexão remota com Windows via protocolo RDP com os comandos abaixo:
sudo apt-get update && sudo apt-get install xinit xserver-xorg xserver-xorg-video-fbdev rdesktop
3.2) Configuração e inicialização do serviço
Crie o arquivo ".xinitrc" que irá servir para executarmos o Remote Desktop automaticamente, uma vez que o ambiente gráfico inicie:
nano /home/pi/.xinitrc
Adicione a seguinte linha neste arquivo e salve (Substitua o IP com o o endereço IP do seu Desktop, lembre de configura-lo com um IP Fixo para que você não tenha que ficar mudando isso no futuro):
exec /usr/bin/rdesktop -k pt-br -n <HOSTNAME-DO-RASPBERRY-PI> -g <RESOLUCAO-DESEJADA> -z -r sound:local -x 1 -u <USUARIO-REMOTO> -f <IP-DO-SERVIDOR-DE-DESTINO>
Agora vamos criar um serviço do SystemD que ficará encarregado de verificar se a conexão VPN já está pronto para utilização e iniciará o serviço de conexão Remote Desktop:
Crie e edite o arquivo "/lib/systemd/system/remote.service":
sudo nano /lib/systemd/system/remote.service
Adicione o conteúdo a seguir no arquivo:
[Unit]
Description=Remote Desktop
Requires=network-online.target
[Service]
Type=idle
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/pi/.Xauthority
ExecStart=xinit /home/pi/.xinitrc
ExecStartPre=/bin/sh -c 'until ping -c1 <IP-DO-SERVIDOR-DE-DESTINO>; do sleep 1; done;'
Restart=always
RestartSec=3
KillMode=process
TimeoutSec=infinity
[Install]
WantedBy=graphical.target
Não se esqueça de alterar os parâmetros para seu ambiente.
O serviço acima fará todas as checagens necessárias e também irá reiniciar o terminal remoto caso ele seja fechado pelo cliente.
Agora temos que instalar o serviço e inicializa-lo:
Reload das configurações do serviço:
sudo systemctl daemon-reload
Instalação do serviço:
sudo systemctl enable remote.service
Iniciar o serviço:
systemctl start remote.service
DICA: Você pode verificar o status do serviço trocando o "start" do comando anterior por "status"
Está feito! ao reiniciar o equipamento, se estiver tudo certo, o sistema irá inicializar e logo em seguida realizar a conexão RDP com a estação remota!
4.0) Aumento do tempo de espera por login na estação remota
Fonte: SITE
Para que a tela de login fique esperando as credenciais por mais tempo (normalmente 1 minuto), você pode criar uma chave no registro do Windows.
Crie uma chave DWORD chamada LogonTimeout no container:
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
Coloque o valor da chave em segundos (3600 segundos = 1 hora):
Dessa forma quando o Raspberry Pi iniciar e a sessão RDP começar ele aguardará por 1 hora até que você faça o login.
Se você não logar em tempo, o rdesktop vai fechar, reinicie o Raspberry Pi ou o serviço remote.service:
sudo systemctl restart remote.service
5.0) Extras
5.1) Escala de tela
Se o seu Raspberry Pi não estiver preenchendo a tela inteira quando ligado a um monitor, exibindo barras pretas nas laterais, execute a seguinte alteração:
Altere o arquivo de configuração padrão do RP:
sudo nano /boot/config.txt
Em seguida descomente a linha abaixo e salve as alterações:
...
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
disable_overscan=1
...
Reinicie o equipamento e a tela deve agora estar com a cobertura correta.
5.2) Login sem senha no RDP do Windows Server
Para que o login sem senha funcione no Windows server, de forma a apresentar a tela de login somente após a conexão RDP, execute as seguinte alteração no sistema:
Você deve desabilitar o "Network Level Authentication (NLA)" logo após ativar a permissão para acesso remoto via RDP:
5.3) Raspberry Pi reiniciando sem motivo
O superaquecimento pode ser uma das causas de reboot aleatório do equipamento, assim como uma fonte de energia insuficiente e/ou equipamentos que demandam muita energia ligados ao USB ou GPIO do equipamento, tais como HDs externos, etc.
Para verificar que houve throttling (redução de frequência do processador devido a temperatura), execute:
sudo vcgencmd get_throttled
Se o resultado for 0x0 está tudo bem neste quesito, caso não seja é melhor verificar a refrigeração do equipamento.
No Comments