VPN is slight of hand, smoke and mirrors, and is easily blocked by lots of things, so don't get too frustrated. Open ports, etc., is not the simple answer to make it all work.
Richard is correct, by its very design VPN WILL NOT PASS through a NAT firewall. There are exceptions to this, as I use a SonicWall firewall that does allow the VPN clients to pass thru under NAT, but only their specific VPN software will work.
As for opening the ports, that depends on the firewall you are using, as they all do it differently. Checkpoint, for example, will bring up complete tables which allow you to pick and choose the UDP and TCP ports. My Watchguard firewall provides a place where you enter each specific ports and type. I believe SonicWall uses rules and tables(have not done it lately, just barely recall!) which can block services, etc.
If you set up the VPN to terminate on the server that is doing the NAT (I.E., the one providing the firewall functions), then the VPN link does not have to pass through the NAT, provided the data you want to access is on that system. This type of VPN link is secure betwee the two end points only, not all the way to an intewrnal server. There are also Group VPN and Single VPN tunnels, etc., all of which do things differently.
Making the VPN link go through the firewall and see a connection point at a NAT address is a lot more tricky, and there in is the problem. The NAT point changes TCP/IP values in the data stream of the traffic to replace the inside and outside addresses. You can not do this to the VPN link since it has been encrypted with the original information, and changing the bit stream values breaks the decryption of the data (very complex, but interesting).
What exactly are you trying to do?
HTH
David