I think we have a misunderstanding going on here, if every device in your network has a public IP, then why you would need to configure port forwarding?
Usually this works as follows, the device that has an assignet public IP is the router, then, you configure port forwarding on it to redirect incoming trafic from public_ip:8787 towards the server's local_IP:8787
If you run this command on a system terminal in your VM, does the public IP matches what you are using to connect remotely?
dig +short myip.opendns.com @resolver1.opendns.com