Right now, I am visiting Amsterdam. While Amsterdam is a nice city and I like my hotel, one of the worst parts is the hotel’s Wi-Fi.
The Wi-Fi is heavily firewalled. Meaning only mainstream TCP services are allowed. While SSH is allowed, Wireguard isn’t.
But I discovered Chisel, which lets you proxy TCP or UDP over HTTP and WebSocket.
So how do you run Chisel?
Installation
On a web server, download the latest version of Chisel.
While most of you are going to run Debian or Ubuntu, I run Rocky Linux as a server so Chisel can be installed with a single dnf command:
dnf install https://github.com/jpillora/chisel/releases/download/v1.11.8/chisel_1.11.8_linux_amd64.rpmYou can also install it as a Docker container.
Running Chisel as a Server
Assuming you aren’t running Docker or Windows:
chisel server --auth user:pass --port port --backend http://example.comReplace the following:
- userwith your desired username
- passwith your desired password
- portwith the TCP port you want Chisel to listen on
You can also set up a systemd service. I am lazy so I used tmux.
I also recommend a reverse proxy. I use Caddy, so to do it, assuming you have the DNS name domain pointed to your server, add the following server block:
domain {
encode gzip
reverse_proxy 127.0.0.1:port
}Make sure port is the Chisel port, and then restart Caddy.
If you use nginx or another reverse proxy, check the respective instructions.
Running Chisel as a Client
I am accessing Chisel on Fedora, so the dnf command also worked there.
To run Chisel as a client, run the following in your terminal:
chisel client --auth user:pass https://url local_port:remote_ip:remote_port/udp- userwith your chosen username
- passwith your chosen password
- local_portwith the UDP port you want to listen on locally
- remote_ipwith the remote IP you want to connect to
- remote_portwith the UDP port you want to connect to
You can also remove /udp to connect via TCP.
Conclusion
It always sucks when the expensive hotel your family booked blocks most TCP/IP services. But the good thing about open source is that you can tunnel raw UDP and TCP inside HTTPS.
Yes, China spends unlimited amounts of money on internet censorship. But for-profit hotels, workplaces, public libraries and ISPs who purposefully violate Net Neutrality cannot. And in the latter case, firewalling shouldn’t mean you shouldn’t be able to access your homelab.