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

# User Rev Content
1 pcg 1.1
2 pcg 1.2 ==== NAME ====
3    
4 pcg 1.6 GNU-VPE - Overview of the GNU Virtual Private Ethernet suite.
5 pcg 1.2
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 pcg 1.4 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 pcg 1.2
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 pcg 1.3 program (``vpectrl'').
52 pcg 1.2
53     : vpectrl
54 pcg 1.3 Is used to generate the keys, check and give an overview of of the
55     configuration and contorl the daemon (restarting etc.).
56 pcg 1.2
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 pcg 1.3 ==== COMPILETIME CONFIGURATION ====
63 pcg 1.2
64 pcg 1.6 Please have a look at the ``vpe.osdep(5)'' manpage for platform-specific
65     information.
66    
67 pcg 1.3 Here are a few recipes for compiling your vpe:
68 pcg 1.2
69    
70     == AS LOW PACKET OVERHEAD AS POSSIBLE ==
71    
72 pcg 1.3 ./configure --enable-hmac-length=4 --enable-rand-length=0
73 pcg 1.2
74 pcg 1.3 Minimize the header overhead of VPN packets (the above will result in
75     only 4 bytes of overhead over the raw ethernet frame).
76 pcg 1.2
77    
78     == MINIMIZE CPU TIME REQUIRED ==
79    
80 pcg 1.3 ./configure --enable-cipher=bf --enable-digest=md4
81 pcg 1.2
82 pcg 1.3 Use the fastest cipher and digest algorithms currently available in vpe.
83 pcg 1.2
84    
85     == MAXIMIZE SECURITY ==
86    
87 pcg 1.3 ./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 pcg 1.2
93     In general, remember that AES-128 seems to be more secure and faster
94 pcg 1.3 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 pcg 1.2
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 pcg 1.3 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 pcg 1.2
119 pcg 1.3 node = first # just a nickname
120     hostname = first.example.net # the DNS name or IP address of the host
121 pcg 1.2
122 pcg 1.3 node = second
123     hostname = 133.55.82.9
124 pcg 1.2
125 pcg 1.3 node = third
126     hostname = third.example.net
127 pcg 1.2
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 pcg 1.3 #!/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 pcg 1.2
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 pcg 1.3 vpectrl -c /etc/vpe -g
156 pcg 1.2
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 pcg 1.3 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 pcg 1.2
174     Then the hostkeys should be copied:
175    
176 pcg 1.3 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 pcg 1.2
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 pcg 1.3 vped -D -linfo first # first is the nodename
189 pcg 1.2
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 pcg 1.3 t1:2345:respawn:/opt/vpe/sbin/vped -D -L first >/dev/null 2>&1
202 pcg 1.2
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 pcg 1.6 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 pcg 1.2
219    
220     ==== AUTHOR ====
221    
222     Marc Lehmann <vpe@plan9.de>
223 pcg 1.6
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 pcg 1.2