I'm trying to help a client remotely and he's behind NAT.
You could do reverse ssh tunneling. Your client connects to your ssh server specifying something like
ssh -R 5900:localhost:5900 your-pc.
You can then connect to localhost:5900 with your vnc client and it gets tunneled back to the client (which obviously has to have a VNC server running on his computer).