ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/README
Revision: 1.6
Committed: Mon Jun 7 03:21:16 2004 UTC (19 years, 11 months ago) by pcg
Branch: MAIN
Changes since 1.5: +38 -2 lines
Log Message:
*** empty log message ***

File Contents

# Content
1
2 ==== NAME ====
3
4 GNU-VPE - Overview of the GNU Virtual Private Ethernet suite.
5
6
7 ==== DESCRIPTION ====
8
9 Vpe is a suite designed to provide a virtual private network for
10 multiple nodes over an untrusted network.
11
12 "Virtual" means that no physical network is created (of course), but an
13 ethernet is emulated by creating multiple tunnels between the member
14 nodes.
15
16 "Private" means that non-participating nodes cannot decode ("sniff)" nor
17 inject ("spoof") packets.
18
19 In the case of vpe, even participating nodes cannot sniff packets send
20 to other nodes or spoof packets as if sent from other nodes.
21
22 "Network" means that more than two parties can participate in the
23 network, so for instance it's possible to connect multiple branches of a
24 company into a single network. Many so-called "vpn" solutions only
25 create point-to-point tunnels.
26
27
28 == DESIGN GOALS ==
29
30 : SIMPLE DESIGN
31 Cipher, HMAC algorithms and other key parameters must be selected at
32 compile time - this makes it possible to only link in algorithms you
33 actually need. It also makes the crypto part of the source very
34 transparent and easy to inspect.
35
36 : EASY TO SETUP
37 A few lines of config (the config file is shared unmodified between
38 all hosts) and a single run of ``vpectrl'' to generate the keys
39 suffices to make it work.
40
41 : MAC-BASED SECURITY
42 Since every host has it's own private key, other hosts cannot spoof
43 traffic from this host. That makes it possible to filter packest by
44 MAC address, e.g. to ensure that packets from a specific IP address
45 come, in fact, from a specific host.
46
47
48 ==== PROGRAMS ====
49
50 Vpe comes with two programs: one daemon (``vped'') and one control
51 program (``vpectrl'').
52
53 : vpectrl
54 Is used to generate the keys, check and give an overview of of the
55 configuration and contorl the daemon (restarting etc.).
56
57 : vped
58 Is the daemon used to establish and maintain conenctions to the
59 other network members. It should be run on the gateway machine.
60
61
62 ==== COMPILETIME CONFIGURATION ====
63
64 Please have a look at the ``vpe.osdep(5)'' manpage for platform-specific
65 information.
66
67 Here are a few recipes for compiling your vpe:
68
69
70 == AS LOW PACKET OVERHEAD AS POSSIBLE ==
71
72 ./configure --enable-hmac-length=4 --enable-rand-length=0
73
74 Minimize the header overhead of VPN packets (the above will result in
75 only 4 bytes of overhead over the raw ethernet frame).
76
77
78 == MINIMIZE CPU TIME REQUIRED ==
79
80 ./configure --enable-cipher=bf --enable-digest=md4
81
82 Use the fastest cipher and digest algorithms currently available in vpe.
83
84
85 == MAXIMIZE SECURITY ==
86
87 ./configure --enable-hmac-length=16 --enable-rand-length=8 --enable-digest=sha1
88
89 This uses a 16 byte HMAC checksum to authenticate packets (I guess 8-12
90 would also be pretty secure ;) and will additionally prefix each packet
91 with 8 bytes of random data.
92
93 In general, remember that AES-128 seems to be more secure and faster
94 than AES-192 or AES-256, more randomness helps against sniffing and a
95 longer HMAC helps against spoofing. MD4 is a fast digest, SHA1 or
96 RIPEMD160 are better, and Blowfish is a fast cipher (and also quite
97 secure).
98
99
100 ==== HOW TO SET UP A SIMPLE VPN ====
101
102 In this section I will describe how to get a simple VPN consisting of
103 three hosts up and running.
104
105
106 == STEP 1: configuration ==
107
108 First you have to create a daemon configuation file and put it into the
109 configuration directory. This is usually ``/etc/vpe'', depending on how
110 you configured vpe, and can be overwritten using the ``-c'' commandline
111 switch.
112
113 Put the following lines into ``/etc/vpe/vped.conf'':
114
115 udp-port = 50000 # the external port to listen on (configure your firewall)
116 mtu = 1400 # minimum MTU of all outgoing interfaces on all hosts
117 ifname = vpn0 # the local network device name
118
119 node = first # just a nickname
120 hostname = first.example.net # the DNS name or IP address of the host
121
122 node = second
123 hostname = 133.55.82.9
124
125 node = third
126 hostname = third.example.net
127
128 The only other file neccessary if the ``if-up'' script that initializes
129 the local ethernet interface. Put the following lines into
130 ``/etc/vpe/if-up'' and make it execute (``chmod 755 /etc/vpe/if-up''):
131
132 #!/bin/sh
133 ip link set $IFNAME address $MAC mtu $MTU up
134 [ $NODENAME = first ] && ip addr add 10.0.1.1 dev $IFNAME
135 [ $NODENAME = second ] && ip addr add 10.0.2.1 dev $IFNAME
136 [ $NODENAME = third ] && ip addr add 10.0.3.1 dev $IFNAME
137 ip route add 10.0.0.0/16 dev $IFNAME
138
139 This script will give each node a different IP address in the
140 ``10.0/16'' network. The internal network (e.g. the ``eth0'' interface)
141 should then be set to a subset of that network, e.g. ``10.0.1.0/24'' on
142 node ``first'', ``10.0.2.0/24'' on node ``second'', and so on.
143
144 By enabling routing on the gateway host that runs ``vped'' all nodes
145 will be able to reach the other nodes. You can, of course, also use
146 proxy arp or other means of pseudo-bridging (or even real briding), or
147 (best) full routing - the choice is yours.
148
149
150 == STEP 2: create the RSA key pairs for all hosts ==
151
152 Run the following command to generate all key pairs (that might take a
153 while):
154
155 vpectrl -c /etc/vpe -g
156
157 This command will put the public keys into
158 ``/etc/vpe/pubkeys/*nodename*'' and the private keys into
159 ``/etc/vpe/hostkeys/*nodename*''.
160
161
162 == STEP 3: distribute the config files to all nodes ==
163
164 Now distribute the config files to the other nodes. This should be done
165 in two steps, since the private keys should not be distributed. The
166 example uses rsync-over-ssh
167
168 First all the config files without the hostkeys should be distributed:
169
170 rsync -avzessh /etc/vpe first.example.net:/etc/. --exclude hostkeys
171 rsync -avzessh /etc/vpe 133.55.82.9:/etc/. --exclude hostkeys
172 rsync -avzessh /etc/vpe third.example.net:/etc/. --exclude hostkeys
173
174 Then the hostkeys should be copied:
175
176 rsync -avzessh /etc/vpe/hostkeys/first first.example.net:/etc/hostkey
177 rsync -avzessh /etc/vpe/hostkeys/second 133.55.82.9:/etc/hostkey
178 rsync -avzessh /etc/vpe/hostkeys/third third.example.net:/etc/hostkey
179
180 You should now check the configration by issuing the command ``vpectrl
181 -c /etc/vpe -s'' on each node and verify it's output.
182
183
184 == STEP 4: starting vped ==
185
186 You should then start vped on each node by issuing a command like:
187
188 vped -D -linfo first # first is the nodename
189
190 This will make the vped stay in foreground. You should then see
191 "connection established" messages. If you don't see them check your
192 firewall and routing (use tcpdump ;).
193
194 If this works you should check your networking setup by pinging various
195 endpoints.
196
197 To make vped run more permanently you can either run it as a daemon (by
198 starting it without the ``-D'' switch), or, much better, from your
199 inittab. I use a line like this on my systems:
200
201 t1:2345:respawn:/opt/vpe/sbin/vped -D -L first >/dev/null 2>&1
202
203
204 == STEP 5: enjoy ==
205
206 ... and play around. Sending a -HUP (``vpectrl -kHUP'') to the daemon
207 will make it try to connect to all other nodes again. If you run it from
208 inittab, as is recommended, ``vpectrl -k'' (or simply ``killall vped'')
209 will kill the daemon, start it again, making it read it's configuration
210 files again.
211
212
213 ==== SEE ALSO ====
214
215 vpe.osdep(5) for OS-depedendent information, vped.conf(5), vpectrl(8),
216 and for a description of the protocol and routing algorithms,
217 vpe.protocol(7).
218
219
220 ==== AUTHOR ====
221
222 Marc Lehmann <vpe@plan9.de>
223
224
225 ==== COPYRIGHTS AND LICENSES ====
226
227 Vpe itself is distributed under the GENERAL PUBLIC LICENSE (see the file
228 COPYING that should be part of your distribution).
229
230 In some configurations it uses modified versions of the tinc vpn suite,
231 which is also available under the GENERAL PUBLIC LICENSE.
232
233 In some configurations (notably darwin), it uses a poll emulation
234 library that comes with the following license notice:
235
236 Copyright (c) 1995-2002 Brian M. Clapper
237 All rights reserved.
238
239 Redistribution and use in source and binary forms are permitted
240 provided that: (1) source distributions retain this entire
241 copyright notice and comment; (2) modifications made to the
242 software are prominently mentioned, and a copy of the original
243 software (or a pointer to its location) are included; and (3)
244 distributions including binaries display the following
245 acknowledgement: "This product includes software developed by Brian
246 M. Clapper <bmc@clapper.org>" in the documentation or other
247 materials provided with the distribution. The name of the author
248 may not be used to endorse or promote products derived from this
249 software without specific prior written permission.
250
251 THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
252 IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
253 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
254