nat-traverse establishes connections between hosts
which are behind NAT gateways (hosts which do not
have public IP addresses) without the need to
reconfigure the involved NAT gateways.
Additionally, you can setup a small VPN by using
pppd on top of nat-traverse.