chiark / gitweb /
Distribute the manpages.
[tripe] / doc / tripe.8
1 .\" -*-nroff-*-
2 .\".
3 .de hP
4 .IP
5 \h'-\w'\fB\\$1\ \fP'u'\fB\\$1\ \fP\c
6 ..
7 .de VS
8 .sp 1
9 .RS
10 .nf
11 .ft B
12 ..
13 .de VE
14 .ft R
15 .fi
16 .RE
17 .sp 1
18 ..
19 .ie t \{\
20 .  ds o \(bu
21 .  ds ss \s8\u
22 .  ds se \d\s0
23 .  if \n(.g \{\
24 .    fam P
25 .  \}
26 .\}
27 .el \{\
28 .  ds o o
29 .  ds ss ^
30 .  ds se
31 .\}
32 .TH tripe 8 "10 February 2001" "Straylight/Edgeware" "TrIPE: Trivial IP Encryption"
33 .SH "NAME"
34 tripe \- a simple VPN daemon
35 .SH "SYNOPSIS"
36 .B tripe
37 .RB [ \-D ]
38 .RB [ \-p
39 .IR port ]
40 .RB [ \-T
41 .IR trace-opts ]
42 .RB [ \-d
43 .IR dir ]
44 .RB [ \-a
45 .IR socket ]
46 .br
47         
48 .RB [ \-k
49 .IR priv-keyring ]
50 .RB [ \-K
51 .IR pub-keyring ]
52 .RB [ \-t
53 .IR key-tag ]
54 .SH "DESCRIPTION"
55 The
56 .B tripe
57 program is a server which can provide strong IP-level encryption and
58 authentication between two co-operating hosts.  The program and its
59 protocol are deliberately very simple, to make analysing them easy and
60 to help build trust rapidly in the system.
61 .SS "Overview"
62 The
63 .B tripe
64 server manages a number of secure connections to other `peer' hosts.
65 Each daemon is given a private key of its own, and a file of public keys
66 for the peers with which it is meant to communicate.  It is responsible
67 for negotiating sets of symmetric keys with its peers, and for
68 encrypting, encapsulating and sending IP packets to its peers, and
69 decrypting, checking and de-encapsulating packets it receives from
70 them.
71 .PP
72 When the server starts, it creates a Unix-domain socket on which it
73 listens for administration commands.  It also logs warnings and
74 diagnostic information to the programs connected to its admin socket.
75 Clients connected to the socket can add new peers, and remove or find
76 out about existing peers.  The textual protocol used to give the
77 .B tripe
78 server admin commands is described in
79 .BR tripe\-admin (5).
80 A client program
81 .BR tripectl (1)
82 is provided to allow commands to be sent to the server either
83 interactively or by simple scripts.
84 .SS "Command-line arguments"
85 If not given any command-line arguments,
86 .B tripe
87 will initialize by following these steps:
88 .hP \*o
89 It changes directory to
90 .BR /var/lib/tripe .
91 .hP \*o
92 It acquires a UDP socket with an arbitrary kernel-selected port number.
93 It will use this socket to send and receive all communications with its
94 peer servers.  The port chosen may be discovered by means of the
95 .B PORT
96 admin command (see
97 .BR tripe\-admin (5)).
98 .hP \*o
99 It loads the private key with the tag or type name
100 .B tripe\-dh
101 from the Catacomb-format file
102 .BR keyring ,
103 and loads the file
104 .B keyring.pub
105 ready for extracting the public keys of peers as they're introduced.
106 (The format of these files is described in
107 .BR keyring (5).
108 They are maintained using the program
109 .BR key (1)
110 provided with the Catacomb distribution.)
111 .hP \*o
112 It creates and listens to the Unix-domain socket
113 .BR tripesock .
114 .PP
115 Following this, the server enters its main loop, accepting admin
116 connections and obeying any administrative commands, and communicating
117 with peers.  It also treats its standard input and standard output
118 streams as an admin connection, reading commands from standard input and
119 writing responses and diagnostics messages to standard output.
120 .PP
121 Much of this behaviour may be altered by giving
122 .B tripe
123 suitable command-line options:
124 .TP
125 .B "\-h, \-\-help"
126 Writes a brief description of the command-line options available to
127 standard output and exits with status 0.
128 .TP
129 .B "\-v, \-\-version"
130 Writes
131 .BR tripe 's
132 version number to standard output and exits with status 0.
133 .TP
134 .B "\-u, \-\-usage"
135 Writes a brief usage summary to standard output and exits with status 0.
136 .TP
137 .B "\-D, \-\-daemon"
138 Dissociates from its terminal and starts running in the background after
139 completing the initialization procedure described above.  If running as
140 a daemon,
141 .B tripe
142 will not read commands from standard input or write diagnostics to
143 standard output.  A better way to start
144 .B tripe
145 in the background is with
146 .BR tripectl (1).
147 .TP
148 .BI "\-d, \-\-directory=" dir
149 Makes
150 .I dir
151 the current directory, instead of
152 .BR /var/lib/tripe .
153 Give a current directory of
154 .B .
155 if you don't want it to change directory at all.
156 .TP
157 .BI "\-p, \-\-port=" port
158 Use the specified UDP port for all communications with peers, rather
159 than an arbitarary kernel-assigned port.
160 .TP
161 .BI "\-k, \-\-priv\-keyring=" file
162 Reads the private key from
163 .I file
164 rather than the default
165 .BR keyring .
166 .TP
167 .BI "\-K, \-\-pub\-keyring=" file
168 Reads public keys from
169 .I file
170 rather than the default
171 .BR keyring.pub .
172 This can be the same as the private keyring, but that's not recommended.
173 .TP
174 .BI "\-t, \-\-tag=" tag
175 Uses the private key whose tag or type is
176 .I tag
177 rather than the default
178 .BR tripe\-dh .
179 .TP
180 .BI "\-a, \-\-admin\-socket=" socket
181 Accept admin connections to a Unix-domain socket named
182 .I socket
183 rather than the default
184 .BR tripesock .
185 .TP
186 .BI "\-T, \-\-trace=" trace-opts
187 Allows the enabling or disabling of various internal diagnostics.  See
188 below for the list of options.
189 .SS "Setting up a VPN with tripe"
190 The
191 .B tripe
192 server identifies peers by name.  While it's
193 .I possible
194 for each host to maintain its own naming system for its peers, this is
195 likely to lead to confusion, and it's more sensible to organize a naming
196 system that works everywhere.  How you manage this naming is up to you.
197 The only restriction on the format of names is that they must be valid
198 Catacomb key tags, since this is how
199 .B tripe
200 identifies which public key to use for a particular peer: they may not
201 contain whitespace characters, or a colon
202 .RB ` : '
203 or dot
204 .RB ` . ',
205 .PP
206 Allocating IP addresses for VPNs can get quite complicated.  I'll
207 attempt to illustrate with a relatively simple example.  Our objective
208 will be to set up a virtual private network between two sites of
209 .BR example.com .
210 The two sites are using distinct IP address ranges from the private
211 address space described in RFC1918: site A is using addresses from
212 10.0.1.0/24 and site B is using 10.0.2.0/24.  Each site has a gateway
213 host set up with both an address on the site's private network, and an
214 externally-routable address from the public IP address space.  Site A's
215 gateway machine,
216 .BR alice ,
217 has the addresses 10.0.1.1 and 200.0.1.1; site B's gateway is
218 .B bob
219 and has addresses 10.0.2.1 and 200.0.2.1.
220 .PP
221 This isn't quite complicated enough.  Each of
222 .B alice
223 and
224 .B bob
225 needs an extra IP address which we'll use when setting up the
226 point-to-point link.  These addresses need to be routable, at least
227 within the virtual private network: unfortunately, you can't just use
228 the same pair everywhere.  We'll assign
229 .B alice
230 the point-to-point address 192.168.0.1, and
231 .B bob
232 the address 192.168.0.2.
233 .hP 1.
234 Install
235 .B tripe
236 on both of the gateway hosts.  Create the directory
237 .BR /var/lib/tripe .
238 .hP 2.
239 On
240 .BR alice ,
241 make
242 .B /var/lib/tripe
243 the current directory and generate a Diffie-Hellman group:
244 .RS
245 .VS
246 key add \-adh\-param \-LS \-b2048 \-B256 \e
247         \-eforever \-tparam tripe\-dh\-param
248 .VE
249 (See
250 .BR key (1)
251 from the Catacomb distribution for details about the
252 .B key
253 command.)  Also generate a private key for
254 .BR alice :
255 .VS
256 key add \-adh \-pparam \-talice \e
257         \-e"now + 1 year" tripe\-dh
258 .VE
259 Extract the group parameters and
260 .BR alice 's
261 public key to
262 .I separate
263 files, and put the public key in
264 .BR keyring.pub :
265 .VS
266 key extract param param
267 key extract \-f\-secret alice alice.pub
268 key \-kkeyring.pub merge alice.pub
269 .VE
270 Send the files
271 .B param
272 and
273 .B alice.pub
274 to
275 .B bob
276 in some secure way (e.g., in PGP-signed email, or by using SSH), so that
277 you can be sure they've not been altered in transit.
278 .RE
279 .hP 3.
280 On
281 .B bob
282 now, make
283 .B /var/lib/tripe
284 the current directory, and import the key material from
285 .BR alice :
286 .RS
287 .VS
288 key merge param
289 key \-kkeyring.pub merge alice.pub
290 .VE
291 Generate a private key for
292 .B bob
293 and extract the public half, as before:
294 .VS
295 key add \-adh \-pparam \-tbob \e
296         \-e"now + 1 year" tripe\-dh
297 key extract \-f\-secret bob bob.pub
298 key \-kkeyring.pub merge bob.pub
299 .VE
300 and send
301 .B bob.pub
302 back to
303 .B alice
304 using some secure method.
305 .RE
306 .hP 4
307 On
308 .BR alice ,
309 merge
310 .B bob 's
311 key into the public keyring.  Now, on each host, run
312 .RS
313 .VS
314 key \-kkeyring.pub fingerprint
315 .VE
316 and check that the hashes match.  If the two sites have separate
317 administrators, they should read the hashes to each other over the
318 telephone (assuming that they can recognize each other's voices).
319 .RE
320 .hP 5.
321 Start the
322 .B tripe
323 servers up.  Run
324 .RS
325 .VS
326 tripectl \-slD \-S\-P23169
327 .VE
328 on each of
329 .B alice
330 and
331 .BR bob .
332 (The
333 .RB ` \-P23169 '
334 forces the server to use UDP port 23169: use some other number if 23169
335 is inappropriate for your requirements.  I chose it by reducing the
336 RIPEMD160 hash of
337 .RB ` tripe\-port\-number\e0 '
338 modulo 2\*(ss16\*(se.)
339 .RE
340 .hP 6.
341 To get
342 .B alice
343 talking to
344 .BR bob ,
345 run this shell script (or one like it):
346 .RS
347 .VS
348 #! /bin/sh
349
350 tripectl add bob 200.0.2.1 23169
351 ifname=`tripectl ifname bob`
352 ifconfig $ifname \e
353         192.168.0.1 \e
354         pointopoint 192.168.0.2
355 route add -net \e
356         10.0.2.0 netmask 255.255.255.0 \e
357         gw 192.168.0.2
358 .VE
359 Read
360 .BR ifconfig (8)
361 and
362 .BR route (8)
363 to find out about your system's variants of these commands.  The
364 versions shown above assume a Linux system.
365 Run a similar script on
366 .BR bob ,
367 to tell its
368 .B tripe
369 server to talk to
370 .BR alice .
371 .RE
372 .hP 7.
373 Congratulations.  The two servers will exchange keys and begin sending
374 packets almost immediately.  You've set up a virtual private network.
375 .SS "About the name"
376 The program's name is
377 .BR tripe ,
378 all in lower-case.  The name of the protocol it uses is `TrIPE', with
379 four capital letters and one lower-case.  The name stands for `Trivial
380 IP Encryption'.
381 .SH "BUGS"
382 The code hasn't been audited.  It may contain security bugs.  If you
383 find one, please inform the author
384 .IR immediately .
385 .SH "SEE ALSO"
386 .BR key (1),
387 .BR tripectl (1),
388 .BR tripe\-admin (5).
389 .PP
390 .IR "The Trivial IP Encryption Protocol" ,
391 .IR "The Wrestlers Protocol" .
392 .SH "AUTHOR"
393 Mark Wooding, <mdw@nsict.org>