dtcps
—
Dynamic Tunnel Configuration Protocol daemon
dtcps |
[-cdDoU ] [-b
udp-port] [-g
address] [-i
interfaces] [-I
udp-interface] [-p
port] [prefix] |
dtcps
implements Dynamic Tunnel Configuration Protocol
(DTCP for short) proposed by Trumpet. This listens to IPv4 TCP port 20200 (or
port specified by port), for DTCP client connections.
dtcps
will use APOP password database file
(pop.auth) as password database.
Clients requesting tunnel typed
“tunnelonly
” will get simple
IPv6-over-IPv4 tunnel. No global address will be assigned to the configured
tunnel link. It is up to administrators to assign global IPv6 address to the
client host, or to the client network. Static assignment by hand or use of
router advertisement packet should do the trick. Use of router renumbering
protocol may be a candidate.
Clients requesting tunnel typed
“network
” aka
“tunnelroute
” will get IPv6-over-IPv4
tunnel with appropriate static route for the connected user installed. This
can be used for prefix delegation. The routes for each user is specified in
/usr/local/etc/routetable. No global address will be assigned to the
configured tunnel link.
If prefix argument is specified,
dtcps
will accept tunnel request for
“host
” tunnel type. The tunnel type
needs a pair of temporary global IPv6 address for the configured tunnel
link, like 3ffe:ffff:ffff:ffff::5
and
3ffe:ffff:ffff:ffff::6
. The address pair will be
assigned from specified prefix. Prefixlen for the
temporary global address will be 128, and it will be computed by using
interface number of tunnel interface.
dtcps
assumes all gif interfaces are
available to use. If -i
interfaces argument is specified,
dtcps
will use only specified interfaces.
interfaces accepts regular expression.
If interfaces is not regular expression but
an exact interface name, dtcps
acts as interface
cloning mode which dtcps
creates and deletes
interfaces appropriately. In this mode, interfaces
means a lower interface to be created.
With interface cloning mode, if -o
is
specified, dtcps
creates the interfaces
appropriately, but prevents destroying and reuses created interfaces.
If -U
is specified,
dtcps
accepts request for an IPv6 over an UDP/IPv4
tunnel as well. The lower value of an UDP port is specified by
-b
, and its default is “4028”.
dtcps
assumes all netgraph interfaces are available
to use. If -I
interface
argument is specified, dtcps
creates and deletes
interfaces appropriately. interface means a lower
interface to be created. An IPv6 over an UDP/IPv4 tunnel requires
Netgraph
. (Experimental)
You may want to use specific interface for certain user. You can
specify the interface to 3rd field of /usr/local/etc/routetable. It
can be used not only for tunnel typed
“network
” but also
“tunnelonly
” and
“host
”. If you don't want to assign
prefix for your user, you can specify ‘-’ for 2nd field.
-D
prevents dtcps
from daemonizing on invocation.
-c
disables interface cloning mode.
-d
puts dtcps
into
debug mode.
In normal situation, you cannot serv DTCP from behind your NAT
box. However, you may serv DTCP in such situation with the help of NAT box.
In such case, you need to respond actual global address to a client.
-g
address is specified,
dtcps
responds the address as
the actuall IPv4 global address of your NAT box.
dtcps
will exit with positive value on errors.
- /usr/local/etc/routetable
- This file is used for “
network
”
tunnel type, and maps between the user and the assigned IPv6 prefix for
the user. The format is a space separated list of the user name, the
assigned IPv6 prefix and the interface. The IPv6 prefix is a pair of IPv6
address and prefixlen like addr/prefixlen. Multiple IPv6 prefixes can be
specified by using comma as separator. The interface is optional, and if
interface is specified, the interface is used for the user.
- /usr/local/etc/qpopper/pop.auth
- The APOP password database.
- /var/run/dtcps.pid
- Contains the process ID of the
dtcps
listening for
connections. The content of this file is not sensitive; it can be
world-readable.
The dtcps
command first appeared in WIDE/KAME IPv6
protocol stack kit.
“network
” tunnel type and
other useful facilities were added by Hajimu UMEMOTO
⟨ume@mahoroba.org⟩.
DTCP needs to keep TCP connection between server and client. Therefore, maximum
number of client served by single dtcps
will be
bounded by the maximum number of filehandle allowed to a process (100 or so).
dtcps
invokes several external commands,
like
ifconfig(8)
and
gifconfig(8).
Command search path must be configured properly before invoking
dtcps
.
dtcps
requires
qpopauth
shipped with
qpopper
to maintain APOP password database. There is
dtcpauth
for this purpose. Though the ability of
dtcpauth
is still limitted, you can use it for the
replacement for qpopauth
.
dtcps
was written in Ruby. :-)