(18 Dec 01)
46Bouncer is a very simple tool that is able to accept TCP/UDP connections in IPv4/6 and forward them to an application in IPv6/4. In other words, it acts as a proxy between the IPv4 and IPv6 world (and vice versa).
46Bouncer belongs to the open-source paradigm and it adopts a BSD-style license.
46Bouncer comes with a small User's Manual.
There are four cases in which 46Bouncer is particularly useful:
As an example, let's take into account the second case (IPv4 server). This is a common problem since a lot of v4 applications still needs to be ported to the v6 domain. For example, a Microsoft IIS (Internet Information Server) Web Server exists only in the IPv4 domain. How to make it ready for IPv6 clients? 46Bouncer can be launched on the same machine that hosts the web server, waiting for IPv6 connections on port 80. Then, IPv6 connections will be directed to localhost - port 80 in the IPv4 domain. The server will appear able to process IPv6 queries.
In the author's belief, the second scenario is the one in which 46Bouncer is the most appropriate. Several other tools exist to translate IPv4/IPv6 streams; however 46Bouncer is very simple and it does enable an IPv4 server to become IPv6-aware without pain.
Like any other proxy, also 46Bouncer as to be addressed explicitly. If a proxy server A.COM acts as a proxy toward the web server B.COM, the end-user will have to type http://a.com in order con retrieve the content of the B.COM web server. In other words, 46Bouncer will appear such as the real web server. For this reason the fourth configuration, although possible, is discouraged: that configuration forces end-user to know the location of the proxy and type that address instead of the one of the web server.
46Bouncer does not parse the content of TCP/UDP packets. It just waits for data on a specified port, then it forwards the same data to the server. Let's imagine a web server, http://www.foo.com/bar/ waiting on port 80. A 46Bouncer server (www.46bouncer.com) waiting at port 8000 will accept a connection requiring the document http://www.46bouncer.com:8000/bar.
Why is the 46Bouncer waiting on port 8000? Just because this example requires it; in general all ports are valid choices and a single 46Bouncer can act as a "proxy" for multiple web servers (so it requires binding on several ports).
Since the server foo does not have a document called "bar", it will send back a redirect message suggesting to try the same address ending with a "/" character. However, the web server does not know that 46Bouncer is waiting for connections on port 8000, so the HTTP redirect message is wrong: the client will try to contact the server on the standard port (http://www.46bouncer.com/bar/), while the bouncer is waiting on port 8000.
The problem is due all the times an application inserts lower level parameters into the byte stream (such as the TCP port into the HTTP packet). For instance, this can be a problem for web servers that hosts several virtual sites and that use a single IP address. The http server detect which is the page required by the user (for example www.a.com instead of www.b.com) thanks to the site name, contained into the http message. In these cases 46Bouncer will fail.
A trace showing this phenomena is available here in the libpcap format (you can use tcpdump, WinDump, Analyzer, Ethereal and more to show the packets).
This is a problem that may happen on UDP packets: since the IPv6 header is 20 bytes bigger than IPv4, a maximum size (MTU) IPv4 packet does not fit into an IPv6 packet. In that case 46Bouncer uses IP fragmentation, but the final result cannot be the one's expected (depending on the application).
46Bouncer does not have many requirements, because it needs just a machine with the IPv6 stack installed.
Currently supported platforms are:
Probably 46Bouncer will work on other UNIX platforms; we didn't test it.
Version 3.0, 18 Sep 01
Version 2.0b, 10 Sep 01
Version 2.0alpha, 15 Aug 01
Version 1.0alpha, 15 Jul 01
A lot, since 46Bouncer is still in an experimental stage. Briefly:
I'll appreciate any bug report, but I'll be much more grateful if you send me the patch as well (since I provide you source code...).
You can download 46Bouncer here. You can find the Win32 executables and the complete source code. UNIX executables are not provided (you have to compile sources).
You can find also older versions.
Sources have been compiled with Microsoft Visual C++ 6.0 in Win32 and the standard gcc in UNIX. Standard project files and makefile are provided for both the environments.
46Bouncer uses an external library, Clib, currently under development at Politecnico di Torino. This library defines some classes in order to make them system-independent. So, before compiling 46Bouncer you have to compile Clib. Clib sources are inserted into the 46Bouncer source tree.
Copyright (c) 2001
Fulvio Risso (firstname.lastname@example.org), Netgroup, Politecnico di Torino. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that:
(1) source code distributions retain the above copyright notice and this paragraph in its entirety,
(2) distributions including binary code include the above copyright notice and this paragraph in its entirety in the documentation or other materials provided with the distribution, and
(3) all advertising materials mentioning features or use of this software
display the following acknowledgement:
"This product includes software developed by the Politecnico di Torino, and its contributors."
Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
...please contact Fulvio Risso at Politecnico di Torino (Italy), email@example.com.