Bring head revision up to date with cabal (try #3)

This commit is contained in:
Ivo Timmermans 2000-10-18 20:12:10 +00:00
parent d3ea434b36
commit 30df5e95db
35 changed files with 3091 additions and 2267 deletions

View file

@ -1,11 +1,13 @@
## Process this file with automake to get Makefile.in
SUBDIRS = es
info_TEXINFOS = tinc.texi
dyn_MANS = tincd.8
dyn_MANS =
man_aux = $(dyn_MANS:.8=.x)
man_MANS = tinc.conf.5 genauth.8 $(dyn_MANS)
man_MANS = tincd.8 tinc.conf.5 genauth.8 $(dyn_MANS)
PERL = @PERL@
HELP2MAN = help2man

View file

@ -59,67 +59,104 @@ one space character.
.PP
.SH "VARIABLES"
.PP
Here are all valid variables, listed in alphabetical order:
Here are all valid variables, listed in alphabetical order. The default
value, required or optional is given between parentheses.
.TP
\fBConnectPort = \fIport\fR
Connect to the upstream host (given with the \fBConnectTo\fR
directive) on port \fIport\fR. \fIport\fR may be given in decimal
(default), octal (when preceded by a single zero) or hexadecimal
(prefixed with \fB0x\fR). \fIport\fR is the port number for both the
UDP and the TCP (meta) connections.
\fBConnectPort\fR = <\fIport\fR> (655)
Connect to the upstream host (given with the \fBConnectTo\fR directive) on
port \fIport\fR. port may be given in decimal (default), octal (when preceded
by a single zero) or hexadecimal (prefixed with 0x). \fIport\fR is the port
number for both the UDP and the TCP (meta) connections.
.TP
\fBConnectTo = \fB(\fIIP address\fB|\fIhostname\fB)\fR
Specifies which host to connect to on startup. If the
\fBConnectPort\fR variable is omitted, then tinc will try to connect
to port 655.
\fBConnectTo\fR = <\fIIP address|hostname\fR> (optional)
Specifies which host to connect to on startup. Multiple \fBConnectTo\fR variables
may be specified, if connecting to the first one fails then tinc will try
the next one, and so on. It is possible to specify hostnames for dynamic IP
addresses (like those given on dyndns.org), tinc will not cache the resolved
IP address.
If you don't specify a host with \fBConnectTo\fR, tinc won't connect
at all, and will instead just listen for incoming connections. Only
the initiator of a tinc VPN should need this.
If you don't specify a host with \fBConnectTo\fR, regardless of whether a
value for \fBConnectPort\fR is given, tinc won't connect at all, and will
instead just listen for incoming connections.
.TP
\fBKeyExpire = \fIs\fR
The secret (and public) key expires after \fIs\fR seconds. The default
is 3600 seconds, or one hour.
\fBHostnames\fR = <\fIyes|no\fR> (no)
This option selects whether IP addresses (both real and on the VPN) should
be resolved. Since DNS lookups are blocking, it might affect tinc's
efficiency, even stopping the daemon for a few seconds everytime it does
a lookup if your DNS server is not responding.
If you make it shorter, a lot of time and bandwidth is spent
negotiating over the new keys. If you make it longer, you make
yourself more vulnerable to crackers, because they have more data to
work with. The best value depends on the speed of the link, and the
amount of data that goes over it.
This does not affect resolving hostnames to IP addresses from the configuration
file.
.TP
\fBListenPort = \fIport\fR
Listen on local port \fIport\fR. The computer connecting to this
daemon should use this number as the argument for his
\fBConnectPort\fR. Again, the default is 655.
\fBIndirectData\fR = <\fIyes|no\fR> (no)
This option specifies whether other tinc daemons besides the one you
specified with \fBConnectTo\fR can make a direct connection to you. This is
especially useful if you are behind a firewall and it is impossible
to make a connection from the outside to your tinc daemon. Otherwise,
it is best to leave this option out or set it to no.
.TP
\fBMyOwnVPNIP = \fInetwork address\fR[\fB/\fImaskbits\fR]
The \fInetwork address\fR is the number that the daemon will propagate
to other daemons on the network when it is identifying itself. Hence
this will be the file name of the passphrase file that the other end
expects to find the passphrase in.
\fBInterface\fR = <\fIdevice\fR> (optional)
If you have more than one network interface in your computer, tinc will by
default listen on all of them for incoming connections. It is possible to
bind tinc to a single interface like eth0 or ppp0 with this variable.
.TP
\fBInterfaceIP\fR = <\fIlocal address\fR> (optional)
If your computer has more than one IP address on a single interface (for example
if you are running virtual hosts), tinc will by default listen on all of them for
incoming connections. It is possible to bind tinc to a single IP address with
this variable. It is still possible to listen on several interfaces at the same
time though, if they share the same IP address.
.TP
\fBKeyExpire\fR = <\fIseconds\fR> (3600)
This option controls the time the encryption keys used to encrypt the data
are valid. It is common practice to change keys at regular intervals to
make it even harder for crackers, even though it is thought to be nearly
impossible to crack a single key.
.TP
\fBListenPort\fR = <\fIport\fR> (655)
Listen on local port \fIport\fR. The computer connecting to this daemon should
use this number as the argument for his \fBConnectPort\fR.
.TP
\fBMyOwnVPNIP\fR = <\fIlocal address[/maskbits]\fR> (required)
The \fIlocal address\fR is the number that the daemon will propagate to
other daemons on the network when it is identifying itself. Hence this
will be the file name of the passphrase file that the other end expects
to find the passphrase in.
The local address is the IP address of the tap device, not the real IP
address of the host running tincd. Due to changes in recent kernels, it
is also necessary that you make the ethernet (also known as MAC) address
equal to the IP address (see the example).
\fImaskbits\fR is the number of bits set to 1 in the netmask part.
.TP
\fBMyVirtualIP = \fInetwork address\fR[\fB/\fImaskbits\fR]
\fBMyVirtualIP\fR = <\fIlocal address[/maskbits]>
This is an alias for \fBMyOwnVPNIP\fR.
.TP
\fBPassphrases = \fIdirectory\fR
The directory where tinc will look for passphrases when someone tries
to cennect. Please see the manpage for \fBgenauth\fR(8) for more
information about passphrases as used by tinc.
\fBPassphrases\fR = <\fIdirectory\fR> (/etc/tinc/NETNAME/passphrases)
The directory where tinc will look for passphrases when someone tries to
connect. Please see the manpage for genauth(8) for more information
about passphrases as used by tinc.
.TP
\fBPingTimeout = \fInumber\fR
The number of seconds of inactivity that tinc will wait before sending
a probe to the other end. If that other end doesn't answer within that
\fBPingTimeout\fR = <\fIseconds\fR> (5)
The number of seconds of inactivity that tinc will wait before sending a
probe to the other end. If that other end doesn't answer within that
same amount of seconds, the connection is terminated, and the others
will be notified of this.
.TP
\fBTapDevice = \fIdevice\fR
\fBTapDevice\fR = <\fIdevice\fR> (/dev/tap0)
The ethertap device to use. Note that you can only use one device per
daemon. The info pages of the tinc package contain more information
about configuring an ethertap device for linux.
about configuring an ethertap device for Linux.
.TP
\fBNetMask = \fImask\fR
\fBTCPonly\fR = <\fIyes|no\fR> (no, experimental)
If this variable is set to yes, then the packets are tunnelled over a TCP
connection instead of a UDP connection. This is especially useful for those
who want to run a tinc daemon from behind a masquerading firewall, or if
UDP packet routing is disabled somehow. This is experimental code,
try this at your own risk.
.TP
\fBVpnMask\fR = <\fImask\fR> (optional)
The mask that defines the scope of the entire VPN. This option is not used
by the tinc daemon itself, but can be used by startup scripts to configure
the ethertap devices correctly.

View file

@ -1,4 +1,5 @@
\input texinfo @c -*-texinfo-*-
@c $Id: tinc.texi,v 1.9 2000/10/18 20:12:06 zarq Exp $
@c %**start of header
@setfilename tinc.info
@settitle tinc Manual
@ -12,40 +13,45 @@
This is the info manual for tinc, a Virtual Private Network daemon.
Copyright 1998,199,2000 Ivo Timmermans <itimmermans@@bigfoot.com>
Copyright @copyright{} 1998,199,2000 Ivo Timmermans
<itimmermans@@bigfoot.com>, Guus Sliepen <guus@@sliepen.warande.net> and
Wessel Dankers <wsl@@nl.linux.org>.
Permission is granted to make and distribute verbatim
copies of this manual provided the copyright notice and
this permission notice are preserved on all copies.
$Id: tinc.texi,v 1.9 2000/10/18 20:12:06 zarq Exp $
Permission is granted to copy and distribute modified
versions of this manual under the conditions for
verbatim copying, provided
that the entire resulting derived work is distributed
under the terms of a permission notice identical to this
one.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one.
@end ifinfo
@titlepage
@title tinc Manual
@subtitle Setting up a Virtual Private Network with tinc
@author Ivo Timmermans <itimmermans@@bigfoot.com>
@author Ivo Timmermans and Guus Sliepen
@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1998,1999,2000 Ivo Timmermans <itimmermans@@bigfoot.com>
@cindex copyright
Copyright @copyright{} 1998,1999,2000 Ivo Timmermans
<itimmermans@@bigfoot.com>, Guus Sliepen <guus@@sliepen.warande.net> and
Wessel Dankers <wsl@@nl.linux.org>.
Permission is granted to make and distribute verbatim
copies of this manual provided the copyright notice and
this permission notice are preserved on all copies.
$Id: tinc.texi,v 1.9 2000/10/18 20:12:06 zarq Exp $
Permission is granted to copy and distribute modified
versions of this manual under the conditions for
verbatim copying, provided
that the entire resulting derived work is distributed
under the terms of a permission notice identical to this
one.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one.
@end titlepage
@ -54,8 +60,8 @@ Copyright @copyright{} 1998,1999,2000 Ivo Timmermans <itimmermans@@bigfoot.com>
@menu
* Introduction:: Introduction
* Configuring a Linux system:: Before compiling tinc
* Installing tinc::
* Installing tinc - preparations::
* Installing tinc - installation::
* Configuring tinc::
* Running tinc::
* Technical information::
@ -63,12 +69,14 @@ Copyright @copyright{} 1998,1999,2000 Ivo Timmermans <itimmermans@@bigfoot.com>
* Concept Index:: All used terms explained
@end menu
@contents
@c ==================================================================
@node Introduction, Configuring a Linux system, Top, Top
@node Introduction, Installing tinc - preparations, Top, Top
@chapter Introduction
@c straight from the www page
@cindex tinc
tinc is a Virtual Private Network (VPN) daemon that uses tunneling and
encryption to create a secure private network between hosts on the
Internet.
@ -86,12 +94,14 @@ process of tinc itself.
@menu
* VPNs:: Virtual Private Networks in general
* tinc:: about tinc
* Supported platforms::
@end menu
@c ==================================================================
@node VPNs, tinc, Introduction, Introduction
@section Virtual Private Networks
@cindex VPN
A Virtual Private Network or VPN is a network that can only be accessed
by a few elected computers that participate. This goal is achievable in
more than just one way.
@ -100,7 +110,7 @@ more than just one way.
Private networks can consist of a single stand-alone ethernet LAN. Or
even two computers hooked up using a null-modem cable. In these cases,
it is
obvious that the network is @emph{private}, noone can access it from the
obvious that the network is @emph{private}, no one can access it from the
outside. But if your computers are linked to the internet, the network
is not private anymore, unless one uses firewalls to block all private
traffic. But then, there is no way to send private data to trusted
@ -131,9 +141,11 @@ that flows over the network.
@c ==================================================================
@node tinc, , VPNs, Introduction
@node tinc, Supported platforms, VPNs, Introduction
@section tinc
@cindex vpnd
@cindex ethertap
I really don't quite remember what got us started, but it must have been
Guus' idea. He wrote a simple implementation (about 50 lines of C) that
used the @emph{ethertap} device that Linux knows of since somewhere
@ -158,23 +170,101 @@ available too.
@c ==================================================================
@node Configuring a Linux system, Installing tinc, Introduction, Top
@chapter Configuring a Linux system
@node Supported platforms, , tinc, Introduction
@section Supported platforms
This chapter contains information on how a Linux system is configured
for the use of tinc.
tinc works on Linux, FreeBSD and Solaris. These are the three platforms
that are supported by the universial TUN/TAP device driver, so if
support for other operating systems is added to this driver, perhaps
tinc will run on them as well. Without this driver, tinc will most
likely compile and run, but it will not be able to send or receive data
packets.
@c ==================================================================
@subsection Linux
tinc was first written for Linux running on an intel x86 processor, so
this is the best supported platform. The protocol however, and actually
anything about tinc, has been rewritten to support random byte ordering
and arbitrary word length. So in theory it should run on other
processors that Linux runs on. Take care however, we haven't been able
to really test it yet. If you want to run tinc on another platform than
x86, and want to tell us how it went, please do so.
tinc uses the ethertap device that is provided in the standard kernel
since version 2.1.60, so anything above that (2.2.x, 2.3.x, and the
2.4.0-testx (which is current at the time of this writing) kernel
versions) is able to support tinc.
@c ==================================================================
@subsection FreeBSD
tinc on FreeBSD relies on the universial TUN/TAP driver for its data
acquisition from the kernel. Therefore, tinc suports the same platforms
as this driver. These are: FreeBSD 3.x, 4.x, 5.x.
@c ==================================================================
@subsection Solaris
tinc on Solaris relies on the universial TUN/TAP driver for its data
acquisition from the kernel. Therefore, tinc suports the same platforms
as this driver. These are: Solaris, 2.1.x.
@c
@c
@c
@c
@c
@c
@c Preparing your system
@c
@c
@c
@c
@c
@c ==================================================================
@node Installing tinc - preparations, Installing tinc - installation, Introduction, Top
@chapter Installing tinc: preparations
This chapter contains information on how to prepare your system to
support tinc.
@menu
* Configuring the kernel::
* Files Needed::
* Setting up the devices::
* Libraries::
@end menu
@c ==================================================================
@node Configuring the kernel, Files Needed, Configuring a Linux system, Configuring a Linux system
@node Configuring the kernel, Libraries, Installing tinc - preparations, Installing tinc - preparations
@section Configuring the kernel
If you are running Linux, chances are good that your kernel already
supports all the devices that tinc needs for proper operation. For
example, the standard kernel from Redhat Linux already has support for
ethertap and netlink compiled in. Debian users can use the modconf
utility to select the modules. If your Linux distribution supports this
method of selecting devices, look out for something called `ethertap',
and `netlink_dev'. You need both these devices.
If you can install these devices in a similar manner, you may skip this
section.
@menu
* Configuration of the Linux kernel::
* Configuration of the FreeBSD kernel::
* Configuration of the Solaris kernel::
@end menu
@c ==================================================================
@node Configuration of the Linux kernel, Configuration of the FreeBSD kernel, Configuring the kernel, Configuring the kernel
@subsection Configuring the Linux kernel
Since this particular implementation only runs on 2.1 or higher Linux
kernels, you should grab one (2.2 is current at this time). A 2.0 port
is not really possible, unless someone tells me someone ported the
@ -185,9 +275,11 @@ new kernel, you should read the
@uref{http://howto.linuxberg.com/LDP/HOWTO/Kernel-HOWTO.html, Kernel
HOWTO} first. Do that now!
Here are the options you have to turn on/off when configuring a new
Here are the options you have to turn on when configuring a new
kernel.
For kernel 2.2.x:
@example
Code maturity level options
[*] Prompt for development and/or incomplete code/drivers
@ -198,6 +290,19 @@ Network device support
<*> Ethertap network tap
@end example
For kernel 2.3.x and 2.4.x:
@example
Code maturity level options
[*] Prompt for development and/or incomplete code/drivers
Networking options
[*] Kernel/User netlink socket
<*> Netlink device emulation
Network device support
<*> Universal TUN/TAP device driver support
@end example
Any other options not mentioned here are not relevant to tinc. If you
decide to build any of these as dynamic kernel modules, it's a good idea
to add these lines to @file{/etc/modules.conf}.
@ -207,34 +312,179 @@ alias tap0 ethertap
alias char-major-36 netlink_dev
@end example
If you have a 2.4 kernel, you can also choose to use the `Ethertap
network tap' device. This is marked obsolete, because the universal
TUN/TAP driver is a newer implementation that is supposed to be used in
favor of ethertap. For tinc, it doesn't really matter which one you
choose; based on the device file name, tinc will make the right choice
about what protocol to use.
Finally, after having set up other options, build the kernel and boot
it. Unfortunately it's not possible to insert these modules in a running
kernel.
it. Unfortunately it's not possible to insert these modules in a
running kernel.
@c ==================================================================
@node Files Needed, Setting up the devices, Configuring the kernel, Configuring a Linux system
@section Files Needed
@node Configuration of the FreeBSD kernel, Configuration of the Solaris kernel, Configuration of the Linux kernel, Configuring the kernel
@subsection Configuring the FreeBSD kernel
@subsubheading Device files
This section will contain information on how to configure your FreeBSD
kernel to support the universal TUN/TAP device. For 5.0 and 4.1
systems, this is included in the kernel configuration, for earlier
systems (4.0 and 3.x), you need to install the universal TUN/TAP driver
yourself.
Unfortunately somebody still has to write the text.
@c ==================================================================
@node Configuration of the Solaris kernel, , Configuration of the FreeBSD kernel, Configuring the kernel
@subsection Configuring the Solaris kernel
This section will contain information on how to configure your Solaris
kernel to support the universal TUN/TAP device. You need to install
this driver yourself.
Unfortunately somebody still has to write the text.
@c ==================================================================
@node Libraries, , Configuring the kernel, Installing tinc - preparations
@section Libraries
@cindex requirements
Before you can configure or build tinc, you need to have the OpenSSL
library installed on your system. If you try to configure tinc without
having installed it, configure will give you an error message, and stop.
@menu
* OpenSSL::
@end menu
@c ==================================================================
@node OpenSSL, , Libraries, Libraries
@subsection OpenSSL
@cindex OpenSSL
For all cryptography-related functions, tinc uses the functions provided
by the OpenSSL library. We recommend using version 0.9.5 or 0.9.6 of
this library. Other versions may also work, but we can guarantee
nothing.
If this library is not installed, you wil get an error when configuring
tinc for build. Support for running tinc without having OpenSSL
installed @emph{may} be added in the future.
You can use your operating system's package manager to install this if
available. Make sure you install the development AND runtime versions
of this package.
If you have to install OpenSSL manually, you can get the source code
from @url{http://www.openssl.org/}. Instructions on how to configure,
build and install this package are included within the package. Please
make sure you build development and runtime libraries (which is the
default).
@c
@c
@c
@c Installing tinc
@c
@c
@c
@c
@c ==================================================================
@node Installing tinc - installation, Configuring tinc, Installing tinc - preparations, Top
@chapter Installing tinc: installation
If you use Redhat or Debian, you may want to install one of the
precompiled packages for your system. These packages are equipped with
system startup scripts and sample configurations.
If you don't run either of these systems, or you want to compile tinc
for yourself, you can use the source. The source is distributed under
the GNU General Public License (GPL). Download the source from the
@uref{http://tinc.nl.linux.org/download.html, download page}, which has
the checksums of these files listed; you may wish to check these with
md5sum before continuing.
tinc comes in a handy autoconf/automake package, which you can just
treat the same as any other package. Which is just untar it, type
`configure' and then `make'.
More detailed instructions are in the file @file{INSTALL}, which is
included in the source distribution.
@menu
* Building tinc::
* System files::
* Interfaces::
@end menu
@c ==================================================================
@node Building tinc, System files, Installing tinc - installation, Installing tinc - installation
@section Building tinc
Detailed instructions on configuring the source and building tinc can be
found in the file called @file{INSTALL}.
@c ==================================================================
@node System files, Interfaces, Building tinc, Installing tinc - installation
@section System files
Before you can run tinc, you
@menu
* Device files::
* Other files::
@end menu
@c ==================================================================
@node Device files, Other files, System files, System files
@subsection Device files
First, you'll need the special device file(s) that form the interface
between the kernel and the daemon.
The permissions for these files have to be such that only the super user
may read/write to this file. You'd want this, because otherwise
eavesdropping would become a bit too easy. This does, however, imply
that you'd have to run tincd as root.
If you use the universal TUN/TAP driver, you have to create the
following device files (unless they already exist):
@example
mknod -m 600 /dev/... c .. ..
chown 0.0 /dev/...
@end example
If you want to have more devices, the device numbers will be .. .. ...
If you use Linux, and you run the new 2.4 kernel using the devfs
filesystem, then the tap device will be automatically generated as
@file{/dev/netlink/tap0}.
If you use Linux and have kernel 2.2.x, you have to make the ethertap
devices:
@example
mknod -m 600 /dev/tap0 c 36 16
chown 0.0 /dev/tap0
@end example
The permissions now will be such that only the super user may read/write
to this file. You'd want this, because otherwise eavesdropping would
become a bit too easy. This does, however, imply that you'd have to run
tincd as root.
Any further ethertap devices have minor device number 16 through 31.
If you want to, you may also create more device files, which would be
numbered 0...15, with minor device numbers 16...31. They all should be
owned by root and have permission 600.
@c ==================================================================
@node Other files, , Device files, System files
@subsection Other files
@subsubheading @file{/etc/networks}
@ -245,6 +495,9 @@ symbolic name. For example:
myvpn 10.0.0.0
@end example
This has nothing to do with the MyVPNIP configuration variable that will be
discussed later, it is only to make the output of the route command more
legible.
@subsubheading @file{/etc/services}
@ -260,15 +513,15 @@ tinc 655/udp TINC
@c ==================================================================
@node Setting up the devices, , Files Needed, Configuring a Linux system
@section Setting up the devices
@node Interfaces, , System files, Installing tinc - installation
@section Interfaces
Before you can start transmitting data over the tinc tunnel, you must
set up the ethertap network devices.
First, decide which IP addresses you want to have associated with these
devices, and what network mask they must have. You also need these
numbers when you are going to configure tinc itself. @xref{Configuring
devices, and what network mask they must have. You also need these
numbers when you are going to configure tinc itself. @xref{Configuring
tinc}.
It doesn't matter much which part you do first, setting up the network
@ -282,42 +535,52 @@ after me:
ifconfig tap@emph{n} hw ether fe:fd:@emph{xx}:@emph{xx}:@emph{xx}:@emph{xx}
@end example
The @emph{n} here is the number of the ethertap device you want to
use. It should be the same @emph{n} as the one you use for
@file{/dev/tap@emph{n}}. The @emph{xx}s are four hexadecimal numbers
The @emph{n} here is the number of the ethertap device you want to use.
It should be the same @emph{n} as the one you use for
@file{/dev/tap@emph{n}}. The @emph{xx}s are four hexadecimal numbers
(0--ff). With previous versions of tincd, it didn't matter what they
were. But newer kernels require properly set up ethernet addresses.
In fact, the old behavior was wrong. It is required that the @emph{xx}s
match MyOwnVPNIP.
were. But newer kernels require properly set up ethernet addresses. In
fact, the old behavior was wrong. It is required that the @emph{xx}s
match the numbers of the IP address you will give to the tap device and
to the MyOwnVPNIP configuration (which will be discussed later).
@cindex MAC address
@cindex hardware address
@strong{Tip}: for finding out what the MAC address of the tap interface
should be, you can use the following command:
@example
ifconfig tap@emph{n} @emph{IP} netmask @emph{mask}
$ printf 'fe:fd:%02x:%02x:%02x:%02x' 10 1 54 1
fe:fd:0a:01:36:01
@end example
This will activate the device with an IP address @emph{IP} with network
mask @emph{mask}.
@cindex ifconfig
To activate the device, you have to assign an IP address to it. To set
an IP address @emph{IP} with network mask @emph{mask}, do the following:
@example
ifconfig tap@emph{n} @emph{xx}.@emph{xx}.@emph{xx}.@emph{xx} netmask @emph{mask}
@end example
@cindex netmask
The netmask is the mask of the @emph{entire} VPN network, not just your
own subnet. It is the same netmask you will have to specify with the
VpnMask configuration variable.
@c ==================================================================
@node Installing tinc, Configuring tinc, Configuring a Linux system, Top
@chapter Installing tinc
First download it. This is the
@uref{http://tinc.nl.linux.org/download.html, download
page}, which has the checksums of these files listed; you may wish to
check these with md5sum before continuing.
tinc comes in a handy autoconf/automake package, which you can just
treat the same as any other package. Which is just untar it, type
`configure' and then `make'.
More detailed instructions are in the file @file{INSTALL}, which is
included in the source distribution.
@c
@c
@c
@c
@c Configuring tinc
@c
@c
@c
@c
@c ==================================================================
@node Configuring tinc, Running tinc, Installing tinc, Top
@node Configuring tinc, Running tinc, Installing tinc - installation, Top
@chapter Configuring tinc
@menu
@ -327,7 +590,6 @@ included in the source distribution.
* Example::
@end menu
@c ==================================================================
@node Multiple networks, How connections work, Configuring tinc, Configuring tinc
@section Multiple networks
@ -395,31 +657,67 @@ out, remember to replace it with at least one space character.
@node Variables, , Configuration file, Configuration file
@subsection Variables
Here are all valid variables, listed in alphabetical order:
Here are all valid variables, listed in alphabetical order. The default
value, required or optional is given between parentheses.
@c straight from the manpage
@table @asis
@item ConnectPort = port
@item ConnectPort = <port> (655)
Connect to the upstream host (given with the ConnectTo directive) on
port port. port may be given in decimal (default), octal (when preceded
by a single zero) or hexadecimal (prefixed with 0x). port is the port
number for both the UDP and the TCP (meta) connections.
@item ConnectTo = (IP address|hostname)
Specifies which host to connect to on startup. If the ConnectPort
variable is omitted, then tinc will try to connect to port 655.
@item ConnectTo = <IP address|hostname> (optional)
Specifies which host to connect to on startup. Multiple ConnectTo variables
may be specified, if connecting to the first one fails then tinc will try
the next one, and so on. It is possible to specify hostnames for dynamic IP
addresses (like those given on dyndns.org), tinc will not cache the resolved
IP address.
If you don't specify a host with ConnectTo, regardless of whether a
value for ConnectPort is given, tinc won't connect at all, and will
instead just listen for incoming connections. Only the initiator of a
tinc VPN should need this.
instead just listen for incoming connections.
@item ListenPort = port
@item Hostnames = <yes|no> (no)
This option selects whether IP addresses (both real and on the VPN) should
be resolved. Since DNS lookups are blocking, it might affect tinc's
efficiency, even stopping the daemon for a few seconds everytime it does
a lookup if your DNS server is not responding.
This does not affect resolving hostnames to IP addresses from the configuration
file.
@item IndirectData = <yes|no> (no)
This option specifies whether other tinc daemons besides the one you
specified with ConnectTo can make a direct connection to you. This is
especially useful if you are behind a firewall and it is impossible
to make a connection from the outside to your tinc daemon. Otherwise,
it is best to leave this option out or set it to no.
@item Interface = <device> (optional)
If you have more than one network interface in your computer, tinc will by
default listen on all of them for incoming connections. It is possible to
bind tinc to a single interface like eth0 or ppp0 with this variable.
@item InterfaceIP = <local address> (optional)
If your computer has more than one IP address on a single interface (for example
if you are running virtual hosts), tinc will by default listen on all of them for
incoming connections. It is possible to bind tinc to a single IP address with
this variable. It is still possible to listen on several interfaces at the same
time though, if they share the same IP address.
@item KeyExpire = <seconds> (3600)
This option controls the time the encryption keys used to encrypt the data
are valid. It is common practice to change keys at regular intervals to
make it even harder for crackers, even though it is thought to be nearly
impossible to crack a single key.
@item ListenPort = <port> (655)
Listen on local port port. The computer connecting to this daemon should
use this number as the argument for his ConnectPort. Again, the
default is 655.
use this number as the argument for his ConnectPort.
@item MyOwnVPNIP = local address[/maskbits]
@item MyOwnVPNIP = <local address[/maskbits]> (required)
The local address is the number that the daemon will propagate to
other daemons on the network when it is identifying itself. Hence this
will be the file name of the passphrase file that the other end expects
@ -432,36 +730,45 @@ equal to the IP address (see the example).
maskbits is the number of bits set to 1 in the netmask part.
@item MyVirtualIP = local address[/maskbits]
@item MyVirtualIP = <local address[/maskbits]>
This is an alias for MyOwnVPNIP.
@item Passphrases = directory
@item Passphrases = <directory> (/etc/tinc/NETNAME/passphrases)
The directory where tinc will look for passphrases when someone tries to
connect. Please see the manpage for genauth(8) for more information
about passphrases as used by tinc.
@item PingTimeout = number
@item PingTimeout = <seconds> (5)
The number of seconds of inactivity that tinc will wait before sending a
probe to the other end. If that other end doesn't answer within that
same amount of seconds, the connection is terminated, and the others
will be notified of this.
@item TapDevice = device
@item TapDevice = <device> (/dev/tap0)
The ethertap device to use. Note that you can only use one device per
daemon. The info pages of the tinc package contain more information
about configuring an ethertap device for Linux.
@item VpnMask = mask
@item TCPonly = <yes|no> (no, experimental)
If this variable is set to yes, then the packets are tunnelled over a TCP
connection instead of a UDP connection. This is especially useful for those
who want to run a tinc daemon from behind a masquerading firewall, or if
UDP packet routing is disabled somehow. This is experimental code,
try this at your own risk.
@item VpnMask = <mask> (optional)
The mask that defines the scope of the entire VPN. This option is not used
by the tinc daemon itself, but can be used by startup scripts to configure
the ethertap devices correctly.
@end table
@c ==================================================================
@node Example, , Configuration file, Configuring tinc
@section Example
Imagine the following situation. An A-based company wants to connect
three branch offices in B, C and D using the internet. All four offices
have a 24/7 connection to the internet.
@ -483,17 +790,19 @@ need to run tincd, but it must do a port forwarding of TCP&UDP on port
655 (unless otherwise configured).
In this example, it is assumed that eth0 is the interface that points to
the inner LAN of the office. This could be the same as the interface
that leads to the internet.
the inner LAN of the office, although this could also be the same as the
interface that leads to the internet. The configuration of the real
interface is also shown as a comment, to give you an idea of how these
example host is set up.
@subsubheading For A
@emph{A} would be configured like this:
@example
#ifconfig eth0 10.1.54.1 netmask 255.255.0.0 broadcast 10.1.255.255
ifconfig tap0 hw ether fe:fd:0a:01:36:01
ifconfig tap0 10.1.54.1 netmask 255.0.0.0
ifconfig eth0 10.1.54.1 netmask 255.255.0.0 broadcast 10.1.255.255
@end example
and in /etc/tinc/tinc.conf:
@ -507,9 +816,9 @@ VpnMask = 255.0.0.0
@subsubheading For B
@example
#ifconfig eth0 10.2.43.8 netmask 255.255.0.0 broadcast 10.2.255.255
ifconfig tap0 hw ether fe:fd:0a:02:01:0c
ifconfig tap0 10.2.1.12 netmask 255.0.0.0
ifconfig eth0 10.2.43.8 netmask 255.255.0.0 broadcast 10.2.255.255
@end example
and in /etc/tinc/tinc.conf:
@ -528,30 +837,33 @@ connect to this node.
@subsubheading For C
@example
#ifconfig eth0 10.3.69.254 netmask 255.255.0.0 broadcast 10.3.255.255
ifconfig tap0 hw ether fe:fd:0a:03:45:fe
ifconfig tap0 10.3.69.254 netmask 255.0.0.0
ifconfig eth0 10.3.69.254 netmask 255.255.0.0 broadcast 10.3.255.255
@end example
and in /etc/tinc/A/tinc.conf:
@example
MyVirtualIP = 10.3.69.254/16
TapDevice = /dev/tap1
ConnectTo = 1.2.3.4
ListenPort = 2000
VpnMask = 255.0.0.0
@end example
C already has another daemon that runs on port 655, so they have to
reserve another port for tinc. They also use the netname to distinguish
reserve another port for tinc. It can connect to other tinc daemons on
the regular port though, so no ConnectPort variable is needed.
They also use the netname to distinguish
between the two. tinc is started with `tincd -n A'.
@subsubheading For D
@example
#ifconfig tap0 10.4.3.32 netmask 255.255.0.0 broadcast 10.4.255.255
ifconfig tap0 hw ether fe:fd:0a:04:03:20
ifconfig tap0 10.4.3.32 netmask 255.0.0.0
ifconfig tap0 10.4.3.32 netmask 255.255.0.0 broadcast 10.4.255.255
@end example
and in /etc/tinc/tinc.conf:
@ -564,7 +876,8 @@ VpnMask=255.0.0.0
@end example
D will be connecting to C, which has a tincd running for this network on
port 2000. Hence they need to put in a ConnectPort.
port 2000. Hence they need to put in a ConnectPort, but it doesn't need
to have a different ListenPort.
@subsubheading Authentication
@ -572,17 +885,17 @@ A, B, C and D all generate a passphrase with genauth 2048, the output is
stored in /etc/tinc/passphrases/local, except for C, where it should be
/etc/tinc/A/passphrases/local.
A stores a copy of B's passphrase in /etc/tinc/passphrases/10.2.0.0
A stores a copy of B's passphrase in /etc/tinc/passphrases/10.2.1.12
A stores a copy of C's passphrase in /etc/tinc/passphrases/10.3.0.0
A stores a copy of C's passphrase in /etc/tinc/passphrases/10.3.69.254
B stores a copy of A's passphrase in /etc/tinc/passphrases/10.1.0.0
B stores a copy of A's passphrase in /etc/tinc/passphrases/10.1.54.1
C stores a copy of A's passphrase in /etc/tinc/A/passphrases/10.1.0.0
C stores a copy of A's passphrase in /etc/tinc/A/passphrases/10.1.54.1
C stores a copy of D's passphrase in /etc/tinc/A/passphrases/10.4.0.0
C stores a copy of D's passphrase in /etc/tinc/A/passphrases/10.4.3.32
D stores a copy of C's passphrase in /etc/tinc/passphrases/10.3.0.0
D stores a copy of C's passphrase in /etc/tinc/passphrases/10.3.69.254
@subsubheading Starting
@ -810,16 +1123,47 @@ This chapter is a mixture of ideas, reasoning and explanation, please
don't take it too serious.
@menu
* Key Types::
* Key Management::
* Authentication::
* Protection::
@end menu
@c ==================================================================
@node Key Types, Key Management, Security, Security
@subsection Key Types
@c FIXME: check if I'm not talking nonsense
There are several types of encryption keys. Tinc uses two of them,
symmetric private keypairs and public/private keypairs.
Public/private keypairs are used in public key cryptography. It enables
someone to send out a public key with which other people can encrypt their
data. The encrypted data now can only be decrypted by the person who has
the private key that matches the public key. So, a public key only allows
@emph{other} people to send encrypted messages to you. This is very useful
in setting up private communications channels. Just send out your public key
and other people can talk to you in a secure way. But how can you know
the other person is who he says he is?
For authentication itself tinc uses symmetric private keypairs, referred
to as a passphrase. The identity of each tinc daemon is defined by it's
passphrase (like you can be identified by your social security number).
Every tinc daemon that is allowed to connect to you has a copy of your
passphrase (hence symmetrical).
It would also be possible to use public/private keypairs for authentication,
so that you could shout out your public key and don't need to keep it
secret (like the passphrase you would have to send to someone else). Also,
no one else has to know a private key from you.
Both forms have their pros and cons, and at the moment tinc just uses passphrases
(which are computationaly more efficient and perhaps in some way more
secure).
@c ==================================================================
@node Key Management, Authentication, Security, Security
@node Key Management, Authentication, Key Types, Security
@subsection Key Management
@c FIXME: recheck
@c FIXME change for the current protocol
@cindex Diffie-Hellman
You can't just send a private encryption key to your peer, because
@ -840,10 +1184,6 @@ mod p. This is then sent to B; while B computes g^b mod p, and transmits
this to A, b being generated by B. Both a and b must be smaller than
p-1.
These private keys are generated upon startup, and they are not changed
while the connection exists. A possible feature in the future is to
dynamically change the keys, every hour for example.
Both parties then calculate g^ab mod p = k. k is the new, shared, but
still secret key.
@ -864,17 +1204,25 @@ system.
We will let A transmit a passphrase that is also known to B encrypted
with g^a, before A sends this to B. This way, B can check whether A is
really A or just someone else.
B will never receive the real passphrase though, because it was
encrypted using public/private keypairs. This way there is no way an
imposter could steal A's passphrase.
@cindex passphrase
@c ehrmz... but we only use 1024 bits passphrases ourselves? [guus]
This passphrase should be 2304 bits for a symmetric encryption
system. But since an asymmetric system is more secure, we could do with
2048 bits. This only holds if the passphrase is very random.
These passphrases could be stored in a file that is non-readable by
anyone else but root; e.g. @file{/etc/vpn/passphrases}.
anyone else but root; e.g. @file{/etc/tinc/passphrases} with UID 0
and permissions mode 700.
The only thing that needs to be taken care of is how A announces its
passphrase to B.
The only thing that needs to be taken care of is how A can securely send
a copy of it's passphrase to B if B doesn't have it yet. This could be
done via mail with PGP, but you should be really convinced of the
identity of the person who owns the email address you are sending this to.
Swapping floppy disks in real life might be the best way to do this!
@c ==================================================================
@ -884,6 +1232,7 @@ passphrase to B.
Now we have securely hidden our data. But a malicious cracker may still
bother you by randomly altering the encrypted data he intercepts.
@c FIXME what the hell is this all about? remove? IT
@c ==================================================================
@node About us, Concept Index, Technical information, Top