Seu comentário em um túnel ssh reverso "stalling" após um tempo provavelmente se deve a um roteador NAT tentando minimizar sua tabela de conexões abertas e deve ser resolvido usando a diretiva "ServerAliveInterval" conforme explicado no OpenSSH FAQ .
Em alguns casos, o roteador / firewall está cortando suas sessões agressivamente de qualquer maneira (ruim!) quando o link fica ocioso por um longo tempo, o que obriga a diminuir o ServerAliveInterval (cf. nota ).
O truque neste caso é usar um tipo de wrapper monitorando o daemon ssh e reiniciá-lo quando necessário, autossh faz exatamente isso, isso deve resolver seu problema imediatamente!
note : Isso é algo que você deseja limitar, pois aumentar a frequência de pacotes keep-alive em um link instável aumenta o risco de desconexões; que são definidos como pacotes de resposta keepalive x , na realidade pacotes TCP ACK, falharam sucessivamente.
Se o seu link for confiável, sinta-se à vontade para baixar essa diretiva para sua conveniência (seja prudente, você não precisa de um pacote keepalive por segundo) para detectar desconexões mais rápidas do servidor.
PS: Para explicar o meu comentário sobre a questão, estou um pouco repelido pelas idéias de usar o ping como condição para reiniciar um serviço e usá-lo em um servidor que você não possui e, portanto, não pode garantir o disponibilidade, talvez amanhã o google decidirá parar de responder a echo pings e seu servidor continuará reinicializando indefinidamente.
Outro problema é o que você define como "conexão de internet" é, por definição, uma grande coleção de redes e testar um único ponto final pode ser muito pequeno para ter uma idéia da sua conectividade na rede É por isso que os serviços de monitoramento na Web usam vários links para acompanhar o tempo de resposta / tempo de atividade / etc ...