Eu acho que você poderia jogar com várias configurações de SSH, como TCPKeepAlive, ServerAliveInterval, ServerAliveCountMax, etc, para configurar onde, se a conexão cair, isso matará tudo. Eu tenho uma configuração semelhante e tenho feito muitas modificações para ambos SSHD e SSH em ambos os lados para combinar com o que eu quero. Então eu tenho um cron job que executa a cada 5 min que reinicia o túnel, se eu precisar.
#!/bin/bash
if ps aux | grep "ssh -fnNTx" | grep -v "grep"
then
echo "Already Running"
else
echo "Starting now"
ssh -fnNTx -L 1514:127.0.0.1:514 [email protected]
fi
Até agora, esta solução funcionou bem para mim. Você também pode configurar algum tipo de verificação do Nagios ou outro script para ver se o túnel está aberto e se não, faça um kill desse pid para que ele possa ser reiniciado.
Editar:
Artigo anterior que fala muito sobre os problemas de TIME_WAIT. Como fechar forçosamente um soquete em TIME_WAIT?