contrib: Add the Maemo init config for upstart.
[tripe] / server / tripe.8.in
CommitLineData
74eb47db 1.\" -*-nroff-*-
2.\".
fc916a09
MW
3.\" Manual for the server
4.\"
5.\" (c) 2008 Straylight/Edgeware
6.\"
7.
8.\"----- Licensing notice ---------------------------------------------------
9.\"
10.\" This file is part of Trivial IP Encryption (TrIPE).
11.\"
12.\" TrIPE is free software; you can redistribute it and/or modify
13.\" it under the terms of the GNU General Public License as published by
14.\" the Free Software Foundation; either version 2 of the License, or
15.\" (at your option) any later version.
16.\"
17.\" TrIPE is distributed in the hope that it will be useful,
18.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
19.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20.\" GNU General Public License for more details.
21.\"
22.\" You should have received a copy of the GNU General Public License
23.\" along with TrIPE; if not, write to the Free Software Foundation,
24.\" Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25.
26.\"--------------------------------------------------------------------------
e99aedcf 27.so ../common/defs.man \" @@@PRE@@@
fc916a09
MW
28.
29.\"--------------------------------------------------------------------------
74eb47db 30.TH tripe 8 "10 February 2001" "Straylight/Edgeware" "TrIPE: Trivial IP Encryption"
fc916a09
MW
31.
32.\"--------------------------------------------------------------------------
74eb47db 33.SH "NAME"
fc916a09 34.
74eb47db 35tripe \- a simple VPN daemon
fc916a09
MW
36.
37.\"--------------------------------------------------------------------------
74eb47db 38.SH "SYNOPSIS"
fc916a09 39.
74eb47db 40.B tripe
46dde080 41.RB [ \-DF ]
74eb47db 42.RB [ \-d
43.IR dir ]
d13e5724 44.RB [ \-b
45.IR addr ]
33ced0d3 46.RB [ \-p
47.IR port ]
42da2a58 48.RB [ \-n
49.IR tunnel ]
d13e5724 50.br
85b1ebd6 51 \c
33ced0d3 52.RB [ \-U
53.IR user ]
54.RB [ \-G
55.IR group ]
d13e5724 56.RB [ \-a
57.IR socket ]
a9279e37
MW
58.RB [ \-m
59.IR mode ]
d13e5724 60.RB [ \-T
61.IR trace-opts ]
74eb47db 62.br
85b1ebd6 63 \c
74eb47db 64.RB [ \-k
65.IR priv-keyring ]
66.RB [ \-K
67.IR pub-keyring ]
68.RB [ \-t
69.IR key-tag ]
fc916a09
MW
70.
71.\"--------------------------------------------------------------------------
74eb47db 72.SH "DESCRIPTION"
fc916a09 73.
74eb47db 74The
75.B tripe
76program is a server which can provide strong IP-level encryption and
1a19f865 77authentication between co-operating hosts. The program and its protocol
78are deliberately very simple, to make analysing them easy and to help
79build trust rapidly in the system.
74eb47db 80.SS "Overview"
81The
82.B tripe
83server manages a number of secure connections to other `peer' hosts.
84Each daemon is given a private key of its own, and a file of public keys
85for the peers with which it is meant to communicate. It is responsible
86for negotiating sets of symmetric keys with its peers, and for
87encrypting, encapsulating and sending IP packets to its peers, and
88decrypting, checking and de-encapsulating packets it receives from
89them.
90.PP
91When the server starts, it creates a Unix-domain socket on which it
92listens for administration commands. It also logs warnings and
93diagnostic information to the programs connected to its admin socket.
94Clients connected to the socket can add new peers, and remove or find
95out about existing peers. The textual protocol used to give the
96.B tripe
97server admin commands is described in
98.BR tripe\-admin (5).
99A client program
100.BR tripectl (1)
101is provided to allow commands to be sent to the server either
102interactively or by simple scripts.
103.SS "Command-line arguments"
104If not given any command-line arguments,
105.B tripe
106will initialize by following these steps:
1a19f865 107.hP 1.
108It sets the directory named by the
109.B TRIPEDIR
110environment variable (or
f7b5d108 111.B "\*(/c"
1a19f865 112if the variable is unset) as the current directory.
113.hP 2.
74eb47db 114It acquires a UDP socket with an arbitrary kernel-selected port number.
115It will use this socket to send and receive all communications with its
116peer servers. The port chosen may be discovered by means of the
117.B PORT
118admin command (see
119.BR tripe\-admin (5)).
1a19f865 120.hP 3.
74eb47db 121It loads the private key with the tag or type name
fc5f4823
MW
122.B tripe
123(or, failing that,
74eb47db 124.B tripe\-dh
fc5f4823 125for backwards compatibility reasons) from the Catacomb-format file
74eb47db 126.BR keyring ,
127and loads the file
128.B keyring.pub
129ready for extracting the public keys of peers as they're introduced.
130(The format of these files is described in
131.BR keyring (5).
132They are maintained using the program
133.BR key (1)
134provided with the Catacomb distribution.)
1a19f865 135.hP 4.
74eb47db 136It creates and listens to the Unix-domain socket
137.BR tripesock .
138.PP
139Following this, the server enters its main loop, accepting admin
140connections and obeying any administrative commands, and communicating
141with peers. It also treats its standard input and standard output
142streams as an admin connection, reading commands from standard input and
33ced0d3 143writing responses and diagnostics messages to standard output. Finally,
144it will reload keys from its keyring files if it notices that they've
145changed (it checks inode number and modification time) \- there's no
146need to send a signal.
74eb47db 147.PP
148Much of this behaviour may be altered by giving
149.B tripe
150suitable command-line options:
151.TP
152.B "\-h, \-\-help"
153Writes a brief description of the command-line options available to
154standard output and exits with status 0.
155.TP
156.B "\-v, \-\-version"
157Writes
158.BR tripe 's
159version number to standard output and exits with status 0.
160.TP
161.B "\-u, \-\-usage"
162Writes a brief usage summary to standard output and exits with status 0.
163.TP
42da2a58 164.B "\-\-tunnels"
165Writes to standard output a list of the configured tunnel drivers, one
166per line, and exits with status 0. This is intended for the use of the
3cdc3f3a 167start-up script, so that it can check that it will actually work.
168.TP
74eb47db 169.B "\-D, \-\-daemon"
170Dissociates from its terminal and starts running in the background after
171completing the initialization procedure described above. If running as
172a daemon,
173.B tripe
174will not read commands from standard input or write diagnostics to
175standard output. A better way to start
176.B tripe
177in the background is with
178.BR tripectl (1).
179.TP
46dde080
MW
180.B "\-F, \-\-foreground"
181Runs the server in the `foreground'; i.e.,
182.B tripe
183will quit if it sees end-of-file on its standard input. This is
184incompatible with
185.BR \-D .
186.TP
74eb47db 187.BI "\-d, \-\-directory=" dir
188Makes
189.I dir
797cf76b
MW
190the current directory. The default directory to change to is given by
191the environment variable
192.BR TRIPEDIR ;
193if that's not specified, a default default of
f7b5d108 194.B "\*(/c"
797cf76b 195is used. Give a current directory of
74eb47db 196.B .
197if you don't want it to change directory at all.
198.TP
d13e5724 199.BI "\-b, \-\-bind-address="addr
200Bind the UDP socket to IP address
201.I addr
202rather than the default of
203.BR INADDR_ANY .
204This is useful if your main globally-routable IP address is one you want
205to tunnel through the VPN.
206.TP
74eb47db 207.BI "\-p, \-\-port=" port
208Use the specified UDP port for all communications with peers, rather
209than an arbitarary kernel-assigned port.
210.TP
42da2a58 211.BI "\-n, \-\-tunnel=" tunnel
212Use the specified tunnel driver for new peers by default.
213.TP
33ced0d3 214.BI "\-U, \-\-setuid=" user
215Set uid to that of
216.I user
217(either a user name or integer uid) after initialization. Also set gid
218to
219.IR user 's
220primary group, unless overridden by a
221.B \-G
aa2405e8
MW
222option. The selected user (and group) will also be the owner of the
223administration socket.
33ced0d3 224.TP
225.BI "\-G, \-\-setgid=" group
226Set gid to that of
227.I group
228(either a group name or integer gid) after initialization.
229.TP
74eb47db 230.BI "\-k, \-\-priv\-keyring=" file
231Reads the private key from
232.I file
233rather than the default
234.BR keyring .
235.TP
236.BI "\-K, \-\-pub\-keyring=" file
237Reads public keys from
238.I file
239rather than the default
240.BR keyring.pub .
241This can be the same as the private keyring, but that's not recommended.
242.TP
243.BI "\-t, \-\-tag=" tag
244Uses the private key whose tag or type is
245.I tag
246rather than the default
fc5f4823
MW
247.B tripe
248or
74eb47db 249.BR tripe\-dh .
250.TP
251.BI "\-a, \-\-admin\-socket=" socket
252Accept admin connections to a Unix-domain socket named
797cf76b
MW
253.IR socket .
254The default socket, if this option isn't specified, is given by the
255environment variable
256.BR TRIPESOCK ;
257if that's not set either, then a default default of
f7b5d108 258.B "\*(/s/tripesock"
797cf76b 259is used instead.
74eb47db 260.TP
a9279e37
MW
261.BI "\-m, \-\-admin\-perms=" mode
262Permissions (as an octal number) to set on the administration socket. The
263default is 600, which allows only the socket owner. Setting 660 allows
264members of the
265.I group
266configured through the
267.B \-G
268option to connect to the socket, which may be useful. Allowing world access
269is a terrible idea.
270.TP
74eb47db 271.BI "\-T, \-\-trace=" trace-opts
272Allows the enabling or disabling of various internal diagnostics. See
273below for the list of options.
fc5f4823 274.SS "Key exchange group types"
d6623498 275The
276.B tripe
fc5f4823
MW
277server uses Diffie\(en\&Hellman key exchange to agree the symmetric keys
278used for bulk data transfer. Currently
d6623498 279.B tripe
fc5f4823
MW
280can do Diffie\(en\&Hellman in two different kinds of cyclic groups:
281.I "Schnorr groups"
282(denoted
283.BR dh )
284and
285.I "elliptic curve groups"
286(denoted
287.BR ec ).
d6623498 288.PP
fc5f4823
MW
289A Schnorr group is a prime-order subgroup of the multiplicative group of
290a finite field; this is the usual
291.I g\*(ssx\*(se
292mod
293.I p
294kind of Diffie\(en\&Hellman. An elliptic curve group is a prime-order
295subgroup of the abelian group of
296.BR K -rational
297points on an elliptic curve defined over a finite field
298.BR K .
299.PP
300Given current public knowledge, elliptic curves can provide similar or
301better security to systems based on integer discrete log problems,
302faster, and with less transmitted data. It's a matter of controversy
303whether this will continue to be the case. The author uses elliptic
304curves.
305.PP
306The server works out which it should be doing based on the key's
307.B kx-group
308attribute, which should be either
309.B dh
310or
311.BR ec .
312If this attribute isn't present, then the key's type is examined: if
313it's of the form
314.BR tripe\- group
315then the
316.I group
317is used. If no group is specified,
318.B dh
319is used as a fallback.
320.PP
321To create usual Schnorr-group keys, say something like
74eb47db 322.VS
fc5f4823
MW
323key add \-adh-param \-LS \-b3072 \-B256 \e
324 \-eforever \-tparam tripe\-param kx-group=dh
74eb47db 325.VE
fc5f4823 326to construct a parameters key; and create the private keys by
d6623498 327.VS
328key add \-adh \-pparam \-talice \e
fc5f4823 329 \-e"now + 1 year" tripe
d6623498 330.VE
fc5f4823 331To create elliptic curve keys, say something like
d6623498 332.VS
fc5f4823
MW
333key add \-aec\-param \-Cnist-p256 \-eforever \e
334 \-tparam tripe\-param kx-group=ec
52c03a2a 335.VE
336to construct a parameters key, using your preferred elliptic curve in
337the
338.B \-C
339option (see
340.BR key (1)
341for details); and create the private keys by
342.VS
343key add \-aec \-pparam \-talice \e
fc5f4823 344 \-e"now + 1 year" tripe
52c03a2a 345.VE
fc5f4823
MW
346Note that the
347.BR tripe-keys (8)
348program provides a rather more convenient means for generating and
349managing keys for
350.BR tripe .
b5c45da1 351.SS "Using other symmetric algorithms"
352The default symmetric algorithms
353.B tripe
354uses are Blowfish (by Schneier) for symmetric encryption, and RIPEMD-160
355(by Dobbertin, Bosselaers and Preneel) for hashing and as a MAC (in HMAC
356mode, designed by Bellare, Canetti and Krawczyk). These can all be
357overridden by setting attributes on your private key, as follows.
358.TP
359.B cipher
360Names the symmetric encryption scheme to use. The default is
361.BR blowfish\-cbc .
362.TP
363.B hash
364Names the hash function to use. The default is
365.BR rmd160 .
366.TP
367.B mac
368Names the message authentication code to use. The name of the MAC may
369be followed by a
370.RB ` / '
371and the desired tag length in bits. The default is
372.IB hash \-hmac
373at half the underlying hash function's output length.
374.TP
375.B mgf
376A `mask-generation function', used in the key-exchange. The default is
377.IB hash \-mgf
378and there's no good reason to change it.
b9066fbb 379.SS "Using SLIP interfaces"
380Though not for the faint of heart, it is possible to get
381.B tripe
382to read and write network packets to a pair of file descriptors using
383SLIP encapsulation. No fancy header compression of any kind is
98fdb08d 384supported.
385.PP
386Two usage modes are supported: a preallocation system, whereby SLIP
387interfaces are created and passed to the
388.B tripe
389server at startup; and a dynamic system, where the server runs a script
390to allocate a new SLIP interface when it needs one. It is possible to
391use a mixture of these two modes, starting
b9066fbb 392.B tripe
98fdb08d 393with a few preallocated interfaces and having it allocate more
394dynamically as it needs them.
395.PP
396The behaviour of
397.BR tripe 's
398SLIP driver is controlled by the
399.B TRIPE_SLIPIF
1f68dfc5 400environment variable. The server will not create SLIP tunnels if this
401variable is not defined. The variable's value is a colon-delimited list
402of preallocated interfaces, followed optionally by the filename of a
403script to run to dynamically allocate more interfaces.
b9066fbb 404.PP
98fdb08d 405A static allocation entry has the form
b9066fbb 406.IR infd [ \c
407.BI , outfd \c
408.RB ] \c
409.BI = \c
98fdb08d 410.IR ifname ,
b9066fbb 411If the
412.I outfd
413is omitted, the same file descriptor is used for input and output.
414.PP
98fdb08d 415The dynamic allocation script must be named by an absolute or relative
e04c2d50 416pathname, beginning with
98fdb08d 417.RB ` / '
418or
419.RB ` . '.
420The server will pass the script an argument, which is the name of the
421peer for which the interface is being created. The script should
422allocate a new SLIP interface (presumably by creating a pty pair),
423configure it appropriately, and write the interface's name to its
424standard output, followed by a newline. It should then read and write
425SLIP packets on its stdin and stdout. The script's stdin will be closed
426when the interface is no longer needed, and the server will attempt to
427send it a
428.B SIGTERM
429signal (though this may fail if the script runs with higher privileges
430than the server).
431.PP
b9066fbb 432The output file descriptor should not block unless it really needs to:
433the
434.B tripe
1f68dfc5 435daemon assumes that it won't, and will get wedged waiting for it to
436accept output.
74eb47db 437.SS "About the name"
438The program's name is
439.BR tripe ,
440all in lower-case. The name of the protocol it uses is `TrIPE', with
441four capital letters and one lower-case. The name stands for `Trivial
442IP Encryption'.
fc916a09
MW
443.
444.\"--------------------------------------------------------------------------
74eb47db 445.SH "BUGS"
fc916a09 446.
74eb47db 447The code hasn't been audited. It may contain security bugs. If you
448find one, please inform the author
449.IR immediately .
fc916a09
MW
450.
451.\"--------------------------------------------------------------------------
74eb47db 452.SH "SEE ALSO"
fc916a09 453.
74eb47db 454.BR key (1),
455.BR tripectl (1),
fc5f4823
MW
456.BR tripe\-admin (5),
457.BR tripe\-keys (8).
74eb47db 458.PP
459.IR "The Trivial IP Encryption Protocol" ,
460.IR "The Wrestlers Protocol" .
fc916a09
MW
461.
462.\"--------------------------------------------------------------------------
74eb47db 463.SH "AUTHOR"
fc916a09 464.
d36eda2a 465Mark Wooding, <mdw@distorted.org.uk>
fc916a09
MW
466.
467.\"----- That's all, folks --------------------------------------------------