Skip to main content

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

image-1601583746008.png

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:

image-1602092599567.png

5.3) Raspberry Pi reiniciando sem motivo

O superaquecimento pode ser uma das causas de reboot aleatório do equipamento, assim como 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.