Você pode configurar o encaminhamento de porta no host para determinadas portas TCP e UDP. Parece ser impossível fazer o DNAT com o ICMP.
As alternativas são configurar um encapsulamento criptografado (SSH, OpenVPN, IPsec) ou de texto não criptografado do sistema remoto para o host e configurar o roteamento para o (s) endereço (s) da VM através deste túnel no sistema remoto.
encaminhamento de porta SSH
host_ip='10.5.135.42'
vm_ip='192.168.122.122'
vm_port=42
# on the remote system
ssh -L "127.0.0.1:1234:${vm_ip}:${vm_port}" user@$host_ip
Quando esta conexão SSH estiver ativa, você poderá se conectar no sistema remoto à porta 1234 e alcançar a porta desejada na VM:
telnet localhost 1234
DNAT com iptables
No host:
vm_ip='192.168.122.122'
vm_port=42
iptables -t nat -A PREROUTING -p tcp --dport "$vm_port" -j DNAT --to-destination "$vm_ip"
iptables -t nat -A POSTROUTING -p tcp -d "$vm_ip" --dport "$vm_port" -j MASQUERADE
Em seguida, você pode se conectar à porta no host e o pacote é redirecionado para a VM. Como a VM vê o pacote vindo do host (e não do sistema remoto devido ao mascaramento), isso funciona.