From my basic understanding of SSH port forwarding, the SSH client software opens a listening socket on an IP:PORT, say 188.8.131.52:80. So if I go to my web browser and access somewebsite.com that resolves to 184.108.40.206, then my web browser will open a socket to talk to 220.127.116.11:80.
Alas, unbeknownst to the browser, it is not talking to the webserver, but the SSH client. The SSH client will send it over the SSH connection (through port 22, which is the only one allowed through the NAT and firewall) and the SSH server will relay it to localhost:80.
However, as I know from experience and a few google searches, you cannot bind a listening socket to an external IP. You get some "IP not valid in this context" error.
So, how does this actually work?