Import release 0.1.2
[secnet] / README
CommitLineData
558fa3fb
SE
1secnet - flexible VPN software
2
3* Introduction
4
5secnet allows large virtual private networks to be constructed
6spanning multiple separate sites. It is designed for the case where a
7private network connecting many hosts is 'hidden' behind a single
8globally-routable IP address, but can also be applied in other
9circumstances. It communicates entirely using UDP, and works well
10with gateways that implement network address translation.
11
12If you are installing secnet to join an existing VPN, you should read
13the 'INSTALL' file and your particular VPN's documentation now. You
14may need to refer back to this file for information on the netlink and
15comm sections of the configuration file.
16
17If you are thinking about setting up a new VPN of any size (from one
18providing complete links between multiple sites to a simple
19laptop-to-host link), read the section in this file on 'Creating a
20VPN'.
21
22* Creating a VPN
23
24XXX TODO
25
26* secnet configuration file format
27
28By default secnet on linux reads /etc/secnet/secnet.conf. The default
29may be different on other platforms.
30
31This file defines a dictionary (a mapping from keys to values) full of
32configuration information for secnet. Two keys must be defined in
33this file for secnet to start. One is "system", a dictionary
34containing systemwide control parameters. The other is "sites", a
35list of all the sites that you intend to communicate with.
36
37The configuration file has a very simple syntax; keys are defined as
38follows:
39
40key definition;
41or
42key = definition;
43
44(the "=" is optional)
45
46Keys must match the following regular expression:
47[[:alpha:]_][[:alnum:]\-_]*
48
49i.e. the first character must be an alpha or an underscore, and the
50remaining characters may be alphanumeric, '-' or '_'.
51
52Keys can be defined to be a comma-separated list of any of the
53following types:
54
55 a boolean
56 a string, in quotes
57 a number, in decimal
58 a dictionary of definitions, enclosed in { }
59 a "closure", followed by arguments
60 a path to a key that already exists, to reference that definition
61
62Note that dictionaries can be nested: a key in one dictionary can
63refer to another dictionary. When secnet looks for a key in a
64particular directory and can't find it, it looks in the dictionary's
65lexical 'parents' in turn until it finds it (or fails to find it at
66all and stops with an error).
67
68Definitions can refer to previous definitions by naming them with a
69path. Paths are key1/key2/key3... (starting from wherever we find
70key1, i.e. in the current dictionary or any of its parents), or
71alternatively /key1/key2/key3... (to start from the root).
72Definitions cannot refer to future definitions.
73
74Example:
75
76a=1;
77b=2;
78c={ d=3; e=a; };
79f={ a=4; g=c; };
80
81The following paths are valid:
82a is 1
83b is 2
84c is a dictionary:
85 c/d is 3
86 c/e is 1
87f is a dictionary:
88 f/a is 4
89 f/g is a dictionary:
90 f/g/d is 3
91 f/g/e is 1
92
93Note that f/g/e is NOT 4.
94
95In a future version of secnet it will also be permissible to list
96other dictionaries before a dictionary definition,
97eg. <defaults,otherdefaults>{definitions}. These will be searched in
98order for keys, before the lexical parent. (This is not yet
99implemented)
100
101Elements that are lists are inserted into lists in definitions, not
102referenced by them (i.e. you can't have lists of lists).
103
104Some closures may be followed by an argument list in ( ), and may
105return any number of whatever type they like (including other
106closures). Some types of closure (typically those returned from
107invokations of other closures) cannot be invoked.
108
109closure { definitions } is short for closure({definitions}).
110
111The main body of secnet, and all the additional modules, predefine
112some keys in the root dictionary. The main ones are:
113
114 yes, true, True, TRUE: the boolean value True
115 no, false, False, FALSE: the boolean value False
116 makelist: turns a dictionary (arg1) into a list of definitions
117 (ignoring the keys)
118 readfile: reads a file (arg1) and returns it as a string
119
120Keys defined by modules are described below, in the module
121documentation.
122
123Other configuration files can be included inline by writing "include
124filename" at the start of a line.
125
126After the configuration file is read, secnet looks for particular keys
127in configuration space to tell it what to do:
128
129 system: a dictionary which can contain the following keys:
130 log (log closure): a destination for system messages
131 userid (string): the userid for secnet to run as once it drops privileges
132 pidfile (string): where to store its PID
133
134 sites: a list of closures of type 'site', which define other tunnel
135 endpoints that secnet will attempt to communicate with
136
137* secnet command line options
138
139XXX TODO
140
141* secnet builtin modules
142
143** resolver
144
145Defines:
146 adns (closure => resolver closure)
147
148** random
149
150Defines:
151 randomsrc (closure => randomsrc closure)
152
153** udp
154
155Defines:
156 udp (closure => comm closure)
157
158** util
159
160Defines:
161 logfile (closure => log closure)
162 sysbuffer (closure => buffer closure)
163
164** site
165
166Defines:
167 site (closure => site closure)
168
169** transform
170
171Defines:
172 serpent256-cbc (closure => transform closure)
173
174** netlink
175
176Defines:
177 userv-ipif (closure => netlink closure)
178 tun (closure => netlink closure) [only on linux-2.4]
179 tun-old (closure => netlink closure)
180 null-netlink (closure => netlink closure)
181
182** rsa
183
184Defines:
185 rsa-private (closure => rsaprivkey closure)
186 rsa-public (closure => rsapubkey closure)
187
188** dh
189
190Defines:
191 diffie-hellman (closure => dh closure)
192
193** md5
194
195Defines:
196 md5 (hash closure)