Try connecting to the VPN on your local network (i.e., bypass the router). If it works, the problem is very likely with the router configuration. If it does not work, then try the Terminal command described in this article:
NOTE: the KB article applies to both PPTP and L2TP over IPSec even though it seems to only apply to PPTP.
Awesome - thanks so much!
I tried connecting to the VPN on my local network and it worked perfectly, so I checked out my router settings.
I have a Netgear Wireless Cable Voice Gateway CG3100. I already had ports 500 (UDP), 1701 (UDP), 1723 (TCP) and 4500 (UDP) forwarded manually so I looked a bit further.
Under the Services menu of the router I found an option called "Ipsec PassThrough" which was ticked.
First I tried deleting my manual port forward settings and leaving Ipsec PassThrough ticked. No luck.
Next I tried re-entering my manual port forward settings and unticking Ipsec PassThrough. Hurrah!
There must have been a conflict with whatever the Ipsec PassThrough setting did and the manual port forwarding I had set up.
For other users, here's some screenshots of the settings that worked for me:
(192.168.0.10 is the IP address of my Server)