Cubehub Tunnel

This is an alpha version of my tunnelling software that comprises the following features:

First, be aware this software is not guaranteed to work, it's in a development state, and may end up crashing, taking 100% CPU, etc. The previous (more stable) version of the tunnel is located here.
Please report all bugs to me.

Download binary tunnel.jar (191KB) (Download this if you're not sure!)

Download cubehub source and associated libraries (1.1MB)

New! Users have noted a few ms higher pings whilst playing online games using this tunnel over any previous versions. Therefore, I have made a completely stripped down version, completely free of any logging. If you are CERTAIN the previous tunnel works for you, then you can try this but be warned: IT IS IMPOSSIBLE FOR ME TO DEBUG THIS!!. Please let me know how you get on, thanks!

Download optimised log-free tunnel.jar (78KB)

Overview:

SOCKS 4 and 5 are protocols that are supposed to allow users to send data through a firewall. However, they only work like this if the SOCKS server is on the firewall itself. Whilst TCP/IP traffic is frequently permitted through firewalls, UDP/IP (required by most online games) is often blocked. When a SOCKS 5 server relays UDP data (SOCKS 4 does not support UDP), the packets are simply relayed, there is no tunnelling involved.

This application provides a solution, tunnelling the data being relayed by a SOCKS server over one or (for better gaming performance) multiple TCP connections to help applications and games to work from behind a restrictive firewall.

  1. Run the tunnel server somewhere outside the firewall with:
    java -jar tunnel.jar --server -t listenhost:port

    If you use 0.0.0.0:port as the ip, it will listen on the given port on all IPs.
    You need to be certain you have an unfirewalled TCP connection to the given port, try telnet <listenhost> <port> after starting the tunnel server to check you can connect. If all is well, you should be able to connect, and get disconnected if you press a key.
  2. Run the tunnel client, specifying the URL of the tunnel server
  3. Use the tunnel client's SOCKS server to connect.
    If the application does not support SOCKS servers, try one of the following to provide transparent SOCKS support for your application. I have not tested any of them, but it has been reported that FreeCap fixes a problem experienced by users of the other two, where changing map in some games kills the connection.
    1. FreeCap
    2. SocksCap
    3. ProxyCap

Usage:

The following message will be output if you type:

cmd prompt> java -jar tunnel.jar --help
Log manager configuration read
Usage: java -jar tunnel.jar [--server] [-t <tunnelIP>] [-s <SOCKSIP>] [-n <connections>]

Where the arguments are as follows:

--server

If specified, will act as a tunnel server.

If omitted, will act as a tunnel client.

-t <tunnelIP>

If we're running as a client, this tells which tunnel server to connect to.

If we're running as a server, this tells which local IP to listen on (use 0.0.0.0 for all IP addresses). The default port number is 6667.

If this is not specified, 127.0.0.1:6667 will be used.

-s <SOCKSIP>

Client only. This tells which local IP to listen on for SOCKS connections (use 0.0.0.0 for all IP addresses). The default port number is 1080.

If this is not specified, 127.0.0.1:1080 will be used.

-n <connections> How many simultaneous (multiplexed) TCP connections to open to the tunnel server. 25 tunnels has been known to work the best for games such as Quake. If other good values are found, let me know!

Step-by-step guides:

The following have been submitted by users of the tunnel to help other people out. If you have any advice/experience on setting up the tunnel, please let me know. It has been known to work with (at least) web browsing, Quake3, EverQuest, CS (see below) but should work with most/all games.

Problems:

Please report all bugs, or send questions to me, Chris Pearson (echinus).