I use Iodine, it’s super simple to set up! Say your VPS’s IP is 8.8.8.8, you set DNS as follows:
dns2.domain.com A 8.8.8.8
dns.domain.com NS dns2.domain.com
apt-get install iodine, or compile on other systems
On server run: screen iodined -fP ultrasecurepassword 10.0.0.1 dns.domain.com
On client run: iodine -fP ultrasecurepassword 8.8.8.8 dns.domain.com
You can then setup Squid or ziproxy with image compression to listen on tun0, and set the HTTP proxy for your client to 10.0.0.1. SSH tunneling with compression also works, not tried NAT
iodine lets you tunnel IPv4 data through a DNS server. This can be usable in different situations where internet access is firewalled, but DNS queries are allowed.