jumpgate -- a TCP connection forwarder

[ Introduction ]

Jumpgate is a TCP connection forwarder that provides many enhancements and improvements over the existing programs that do the same thing. It provides an interactive mode that queries the connected party for the forwarding information it needs. Also, there is the option to log the entire forwarded session in a file for later inspection. Furthermore, it can log information about the forwarded session via the syslog(3) facility. If you improve it further, please send me the diffs. As always, published under a BSD-style license, see the included LICENSE file.

[ Supported platforms ]

Jumpgate has been tested on the following platforms:

OpenBSD 3.2 (i386).
OpenBSD 3.1 (i386).
OpenBSD 3.0 (i386).
Solaris 8, thanks to John Weekley and Jesper Peterson.
Solaris 7, thanks to Chris Donovan.
AIX, thanks to feedback from Michael Pacey.
FreeBSD 4.2-STABLE (i386), thanks to Kiriakos Oikonomakos for the shell account.
NetBSD 1.4.2 (i386).
Linux, various distributions and platforms, thanks to feedback from many people.
I have been told that it compiles and runs on Windows using Cygwin, but I have not tested it myself.

[ Compilation and installation ]

Since jumpgate now utilizes autoconf you can compile and install it simply with:

$ ./configure
$ make
$ su
# make install

This will install the jumpgate binary to /usr/local/sbin and the jumpgate manual page to /usr/local/man/man8. If you want to put them somewhere else, you can call configure with a provided prefix:

$ ./configure --prefix=/opt

In order to uninstall jumpgate type:

# make uninstall

In order to compile jumpgate with debugging support, call configure with --enable-debug, e.g.:

$ ./configure --enable-debug

[ Usage ]

By invoking jumpgate without arguments you get the following:

usage: ./jumpgate [-hsvi] [-b <local host or IP address>] [-l <local port #>]
	[-r <remote port #>] [-a <remote host or IP address>] [-f <filename>]
	[-c <number of connections>] [-L <microseconds>]

With the -h option you get more help on the command line arguments:

jumpgate v0.7 by Patroklos Argyroudis <argp at domain cs.tcd.ie>

usage: ./jumpgate [-hsvi] [-b <local host or IP address>] [-l <local port #>]
	[-r <remote port #>] [-a <remote host or IP address>] [-f <filename>]
	[-c <number of connections>] [-L <microseconds>]

-h              this help message
-s              log jumpgate use via syslog(3)
-v              display version number and exit
-i              interactively ask the user where to forward
-b              specify the local IP to bind to
-l              specify the local listening port
-r              specify the remote port to forward the connection
-a              specify the host to forward the connection
-f              specify the filename to log the connection
-c              specify the maximum number of the connections backlog
-L              specify the latency in microseconds

So, a simple invocation of jumpgate could be the following:

$ ./jumpgate -s -l 4000 -r 21 -a bsd.gr

This forwards all connections coming to the local machine on port 4000 to bsd.gr port 21 and logs the connected party via syslog(3). Another invocation is the following:

$ ./jumpgate -i -l 4000 -f jumpgate.log

The jumpgate waits for connections on port 4000 on the local machine, then asks the connected party where to forward the connection, and logs the entire forwarding session to the jumpgate.log file. I'm sure you got the idea.

[ Documentation ]

Other documentation sources for jumpgate: README, TODO, ChangeLog.

[ Acquisition ]

The latest version of jumpgate is 0.7 and can be downloaded here.

[ Acknowledgments ]

Ioanna Stamouli, for continuous testing and feedback.
Georgios Kargiotakis, for his helpful feedback.
Oliver Fromme, for his great additions to the program.
Jesper Peterson, for his fixes regarding Solaris.

[ Author ]

My name is Patroklos Argyroudis and I am a Ph.D. student at the Networks and Telecommunications Research Group, Department of Computer Science, University of Dublin, Trinity College in Ireland. You can find my personal page here. And, in case you're wondering, yes, I am a B5 fan.