next up previous
Next: Extreme tunnelling Up: How does it work? Previous: What a firewall does

Subsections

The first attempt

The Idea

Write a server and a client that connect to each other via a TCP connection (to get through the firewall). Make the server listen for TCP connections on port 6667. Make the client listen for UDP packets on port 27960. Then, a client can connect (in quake) to localhost:27960, and all UDP data can be forwarded over the tunnel as TCP packets. The server can be run in an unfirewalled place that can exchange UDP packets happily with the Quake server, the client can be run on the PC of the person trying to play Quake.

When data is received by the client (the UDP packets from Quake) it's turned into TCP data, sent to the tunnel server, converted back to a UDP packet, and sent from there to the Quake server. Now, the quake server thinks that the tunnel server is actually where the person connecting to the quake server is, and as such sends all data back to that. The tunnel server does exactly the same thing, turns the UDP packets to TCP data, sends them over the tunnel to the tunnel client, which sends them as UDP to Quake on that PC. Cunning eh?

The Result

Lagggggggggggg. Superb :/ Whilst there was no packet loss at all, when parts of the TCP connection went astray the entire TCP stream waited for the lost parts to be replaced. Not good! Basically this tunnel was unplayable :(


next up previous
Next: Extreme tunnelling Up: How does it work? Previous: What a firewall does
Christopher Pearson 2003-01-27