tnat64 is a library to allow IPv4-only application to access IPv4 hosts on IPv6-only systems by using
NAT64. It wraps the normal connect() function. When a connection is attempted, it consults the
configuration file (which is defined at configure time but defaults to /etc/tnat64.conf) and determines
if the IP address specified is local. If it is not, the library redirects the connection to an IPv6
address inside the NAT64 prefix that is specified in the configuration file. The redirection is performed
only if the destination host is unreachable (when there's no route to host). Also, after the first
successful redirection all the following connection attempts are redirected immediately without even
trying to connect to the host via IPv4. When the destination host cannot be reached via IPv6, the
redirection is disabled.
tnat64 avoids the need to recompile applications so they can use reach hosts even if they do not support
IPv6 and there's no IPv4 connectivity.
tnat64 is heavily based on the source code of tsocks, a library that intercepts outgoing TCP connections
and redirects them though SOCKS proxy. Many thanks for tsocks author, Shaun Clowes!
ARGUMENTS
Most arguments to tnat64 are provided in the configuration file (the location of which is defined at
configure time by the --with-conf=<file> argument but defaults to /etc/tnat64.conf). The structure of
this file is documented in tnat64.conf(8)
Some configuration options can be specified at run time using environment variables as follows:
TNAT64_CONF_FILE
This environment variable overrides the default location of the tnat64 configuration file. This
variable is not honored if the program tnat64 is embedded in is setuid. In addition this
environment variable can be compiled out of tnat64 with the --disable-envconf argument to
configure at build time
TNAT64_DEBUG
This environment variable sets the level of debug output that should be generated by tnat64 (debug
output is generated in the form of output to standard error). If this variable is not present by
default the logging level is set to 0 which indicates that only error messages should be output.
Setting it to higher values will cause tnat64 to generate more messages describing what it is
doing. If set to -1 tnat64 will output absolutely no error or debugging messages. This is only
needed if tnat64 output interferes with a program it is embedded in. Message output can be
permanently compiled out of tnat64 by specifying the --disable-debug option to configure at build
time
TNAT64_DEBUG_FILE
This option can be used to redirect the tnat64 output (which would normally be sent to standard
error) to a file. This variable is not honored if the program tnat64 is embedded in is setuid. For
programs where tnat64 output interferes with normal operation this option is generally better than
disabling messages (with TNAT64_DEBUG = -1)
ERRORStnat64 will generate error messages and print them to stderr when there are problems with the
configuration file if the TNAT64_DEBUG environment variable is not set to -1 or and --disable-debug was
not specified at compile time. This output may cause some problems with programs that redirect standard
error.
CAVEATStnat64 will not in the above configuration be able to provide proxying to setuid applications or
applications that are not run from a shell. You can force all applications to LD_PRELOAD the library by
placing the path to libtnat64 in /etc/ld.so.preload. Please make sure you correctly enter the full path
to the library in this file if you do this. If you get it wrong, you will be UNABLE TO DO ANYTHING with
the machine and will have to boot it with a rescue disk and remove the file (or try the saveme program,
see the INSTALL file for more info). THIS IS A ***WARNING***, please be careful. Also be sure the
library is in the root filesystem as all hell will break loose if the directory it is in is not available
at boot time.