
Tenho um RaspberryPi na casa dos meus pais com PiVPN instalado e configurado para fornecer um serviço VPN pessoal para mim e alguns amigos. Esta VPN funcionou perfeitamente desde o início, usei-a com o meu PC e nunca recebi nenhum erro.
Recentemente configurei outro computador com Windows10 na casa dos meus pais, para funcionar como servidor para diversos fins (caso esteja relacionado a esse problema, utilizo-o como servidor multimídia doméstico com Plex Media Server e também como Repositório Git para uso pessoal). Preciso que ele se conecte automaticamente à VPN, então fiz o seguinte:
- Configurei o PiVPN para gerar o arquivo .ovpn correspondente, instalei o cliente OpenVPN GUI na nova máquina servidor e importei o arquivo ovpn. Na verdade, configurei IPs estáticos para todas as conexões com minha VPN, pois quero que tenham sempre os mesmos IPs.
- Configurei o OpenVPN para conectar-se automaticamente na inicialização do servidor. Consegui isso colocando um link direto para a GUI do OpenVPN nesta pasta
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
, e esse link direto tinha esse argumento"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect ServerW10.ovpn
Configurei o BIOS do servidor para inicializar automaticamente sempre que o AC voltasse (para que o servidor inicializasse novamente se a eletricidade cair) e também o configurei para efetuar login automaticamente no usuário que criei ao instalar o Win10. Com isso, esperamos que o servidor esteja sempre conectado sempre que estiver ligado.
Como estou preocupado com o consumo de energia na casa dos meus pais, configurei este servidor para dormir após 3h de inatividade (configurações do Windows 10) e para dormir sempre (com script em lote) ao chegar às 2h
Devido ao problema de suspensão automática, configurei o BIOS para aceitar pacotes Wake-on-LAN para ativar o servidor. Eu testei isso várias vezes e funcionou bem. Dessa forma eu poderia ativar o servidor sempre que precisasse por 3h (o suficiente para meus propósitos).
Passei alguns dias testando o servidor: colocando-o em hibernação manualmente, deixando-o hibernar após 3h de inatividade, forçando o desligamento, etc, e o OpenVPN sempre funcionou bem e reconectou sem problemas.
Agora o problema apareceu quando testei a conexão VPN com o servidor após o "suspensão das 2h". Acordei o servidor e tentei fazer ping normalmente com seu IP VPN estático, mas não consegui alcançá-lo. Entrei no TeamViewer para verificar o que estava acontecendo e quando abri a interface do OpenVPN, descobri que ele estava preso em um loop como este:
Thu Mar 01 10:26:28 2018 OpenVPN 2.4.4 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [AEAD] built on Sep 26 2017
Thu Mar 01 10:26:28 2018 Windows version 6.2 (Windows 8 or greater) 64bit
Thu Mar 01 10:26:28 2018 library versions: OpenSSL 1.0.2l 25 May 2017, LZO 2.10
Thu Mar 01 10:26:29 2018 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Thu Mar 01 10:26:29 2018 TCP/UDP: Preserving recently used remote address: [AF_INET](my ip):(my port)
Thu Mar 01 10:26:29 2018 UDP link local: (not bound)
Thu Mar 01 10:26:29 2018 UDP link remote: [AF_INET](my ip):(my port)
Thu Mar 01 10:27:29 2018 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Thu Mar 01 10:27:29 2018 TLS Error: TLS handshake failed
Thu Mar 01 10:27:29 2018 SIGUSR1[soft,tls-error] received, process restarting
Thu Mar 01 10:27:34 2018 TCP/UDP: Preserving recently used remote address: [AF_INET](my ip):(my port)
Thu Mar 01 10:27:34 2018 UDP link local: (not bound)
Thu Mar 01 10:27:34 2018 UDP link remote: [AF_INET](my ip):(my port)
Thu Mar 01 10:28:34 2018 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Thu Mar 01 10:28:34 2018 TLS Error: TLS handshake failed
etc...
Testei a VPN com meu PC e funciona bem como sempre, então a melhor aposta é que a culpa é do servidor.
Pessoalmente, acho que talvez tenha algo a ver com o script em lote que fiz e programei para rodar às 2h para colocar o PC para hibernar às 2h, porque não tive problemas com outros métodos de suspensão (suspensão manual e suspensão por inatividade). O script em lote fica assim:
rundll32.exe powrprof.dll,SetSuspendState 0,1,0
Usei esse script porque vi um tutorial sobre como fazer um script em lote para isso. Como disse naquele tutorial, também executei o seguinte comando para dormir em vez de hibernar:
Powercfg -H OFF
Qual poderia ser o problema?
Responder1
Finalmente consertei, embora tenha tido 2 problemas na minha configuração.
Em primeiro lugar, a "Configuração VPN" tinha um problema: o servidor OpenVPN (o RaspberryPi com PiVPN) estava na mesma sub-rede que a máquina servidora.
O arquivo de configuração .ovpn apontou para meu DNS pessoal, então a máquina servidora, para se conectar à VPN do RaspberryPi, teve que acessar o DNS e depois acessar meu RaspberryPi através do IP público do roteador dos meus pais (que eu havia vinculado ao meu roteador) . Isso é um problema porque todo o tráfego da VPN é redirecionado através de uma porta UDP fixa para o IP local do RaspberryPi, o que significa que as respostas que o RaspberryPi enviou para a máquina servidora, quando chegaram ao roteador, acabaram no RaspberryPi devido para a porta UDP redirecionada, então a máquina servidoranunca recebi uma resposta.
Corrigi isso abrindo o arquivo .ovpn e modificando a linha que continha o URL de destino para conectar-se à VPN a partir disto:
remote my.personal.dns {port_number}
para isso
remote {local_raspberry_pi_IP} {port_number}
Além disso, o script de suspensão apresentava algum problema com a configuração do OpenVPN, e não sei bem por que, mas acho que teve algo a ver com a desativação da hibernação. Eu baixeiMicrosoft PsToolse fiz um novo script para colocar o pc para dormir às 2 da manhã. O novo script fica assimC:\{path_where_pstools_was_extracted}\PsTools\psshutdown.exe -d -t 0 -accepteula
Com essas modificações o servidor finalmente funciona conforme o esperado.
Responder2
Como o seu PC (servidor) com Windows poderia se conectar à VPN no Pi todas as outras vezes, não acho que o redirecionamento de porta (encaminhamento?) Foi o que causou o problema aqui. Além disso, o fato de você poder acessar a VPN (em Pi) usando IP local indica que pode haver um problema com seu roteador. Pode ser possível que seu endereço IP público tenha mudado entretanto e seu registro DNS não tenha sido atualizado apenas.