Uma solução para a situação parece ser alternar o estado do link da VM logo após iniciá-la, ou seja, na linha de comando:
$ VBoxManage startvm <vmid>
$ VBoxManage controlvm <vmid> setlinkstate1 off
$ VBoxManage controlvm <vmid> setlinkstate1 on
Estou executando o VirtualBox 5.0.20 em um host do OS X. Há uma variedade de sistemas convidados, incluindo Ubuntu, CentOS, Windows e OS X.
Para cada um desses sistemas, criei um instantâneo ao vivo (ou seja, enquanto a VM está em execução) no qual um processo do servidor (um script Python) está sendo executado na porta 18812. Eu configurei o encaminhamento de porta para todas as VMs via
$ VBoxManage modifyvm <vmid> --natpf1 rpyc,tcp,,18812,,18812
de modo que eu possa conectar-me a localhost:18812
no sistema host para se conectar ao processo do servidor em execução no convidado.
Isso funciona tudo bem e elegante - até eu desligar a VM, restaurar o instantâneo e iniciá-lo novamente. O processo do servidor parece estar ainda em execução e posso me conectar a ele de dentro do guest , mas a conexão do sistema host não funciona mais.
O encaminhamento de porta ainda está em vigor, mas a única maneira de tornar o processo do servidor acessível parece ser reiniciar o sistema de rede no guest (por exemplo, executando service network-manager restart
no Ubuntu) ou reiniciando o processo do servidor - nenhum dos quais é muito desejável.
Existe algum truque para configurar uma VM do VirtualBox de modo que, ao restaurar um instantâneo, o (s) processo (s) servidor (es) executável (s) seja (são) acessado (s) imediatamente? Por que vale a pena, eu notei esse problema em todos os sistemas convidados e também com simples 'servidores' como o netcat ouvindo em alguma porta.
Uma solução para a situação parece ser alternar o estado do link da VM logo após iniciá-la, ou seja, na linha de comando:
$ VBoxManage startvm <vmid>
$ VBoxManage controlvm <vmid> setlinkstate1 off
$ VBoxManage controlvm <vmid> setlinkstate1 on