ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/doc/gvpe.protocol.7.pod
(Generate patch)

Comparing gvpe/doc/gvpe.protocol.7.pod (file contents):
Revision 1.5 by pcg, Thu Apr 21 21:13:59 2005 UTC vs.
Revision 1.6 by pcg, Sun Aug 10 23:04:05 2008 UTC

10The first part of this document describes the transport protocols which 10The first part of this document describes the transport protocols which
11are used by GVPE to send it's data packets over the network. 11are used by GVPE to send it's data packets over the network.
12 12
13=head1 PART 1: Transport protocols 13=head1 PART 1: Transport protocols
14 14
15GVPE offers a range of transport protocols that can be used to interchange 15GVPE offers a wide range of transport protocols that can be used to
16data between nodes. Protocols differ in their overhead, speed, 16interchange data between nodes. Protocols differ in their overhead, speed,
17reliability, and robustness. 17reliability, and robustness.
18 18
19The following sections describe each transport protocol in more 19The following sections describe each transport protocol in more
20detail. They are sorted by overhead/efficiency, the most efficient 20detail. They are sorted by overhead/efficiency, the most efficient
21transport is listed first: 21transport is listed first:
33between nodes. 33between nodes.
34 34
35=head2 ICMP 35=head2 ICMP
36 36
37This protocol offers very low overhead (minimum 42 bytes), and can 37This protocol offers very low overhead (minimum 42 bytes), and can
38sometimes tunnel through firewalls when other protocols cannot. 38sometimes tunnel through firewalls when other protocols can not.
39 39
40It works by prepending a ICMP header with type C<icmp-type> and a code 40It works by prepending an ICMP header with type C<icmp-type> and a code
41of C<255>. The default C<icmp-type> is C<echo-reply>, so the resulting 41of C<255>. The default C<icmp-type> is C<echo-reply>, so the resulting
42packets look like echo replies, which looks rather strange to network 42packets look like echo replies, which looks rather strange to network
43admins. 43admins.
44 44
45This transport should only be used if other transports (i.e. raw ip) are 45This transport should only be used if other transports (i.e. raw ip) are
68most proxies do not allow connections to other ports. 68most proxies do not allow connections to other ports.
69 69
70It is an abuse of the usage a proxy was designed for, so make sure you are 70It is an abuse of the usage a proxy was designed for, so make sure you are
71allowed to use it for GVPE. 71allowed to use it for GVPE.
72 72
73This protocol also has server and client sides. If the C<tcp-port> is set 73This protocol also has server and client sides. If the C<tcp-port> is
74to zero, other nodes cannot connect to this node directly (and C<tcp-port> 74set to zero, other nodes cannot connect to this node directly. If the
75zero cannot be used). If the C<tcp-port> is non-zero, the node can act 75C<tcp-port> is non-zero, the node can act both as a client as well as a
76both as a client as well as a server. 76server.
77 77
78=head2 DNS 78=head2 DNS
79 79
80B<WARNING:> Parsing and generating DNS packets is rather tricky. The code 80B<WARNING:> Parsing and generating DNS packets is rather tricky. The code
81almost certainly contains buffer overflows and other, likely exploitable, 81almost certainly contains buffer overflows and other, likely exploitable,
89traffic even if it doesn't need to transport packets. 89traffic even if it doesn't need to transport packets.
90 90
91In addition, the same problems as the TCP transport also plague this 91In addition, the same problems as the TCP transport also plague this
92protocol. 92protocol.
93 93
94Most configuration needs to be done by editing C<src/vpn_dns.C> directly.
95
96It's only use is to tunnel through firewalls that do not allow direct 94It's only use is to tunnel through firewalls that do not allow direct
97internet access. Similar to using a HTTP proxy (as the TCP transport 95internet access. Similar to using a HTTP proxy (as the TCP transport
98does), it uses a local DNS server/forwarder (given by the C<dns-forw-host> 96does), it uses a local DNS server/forwarder (given by the C<dns-forw-host>
99configuration value) as a proxy to send and receive data as a client, 97configuration value) as a proxy to send and receive data as a client,
100and a C<NS> record pointing to the GVPE server (as given by the 98and an C<NS> record pointing to the GVPE server (as given by the
101C<dns-hostname> directive). 99C<dns-hostname> directive).
102 100
103The only good side of this protocol is that it can tunnel through most 101The only good side of this protocol is that it can tunnel through most
104firewalls undetected, iff the local DNS server/forwarder is sane (which is 102firewalls mostly undetected, iff the local DNS server/forwarder is sane
105true for most routers, wlan gateways and nameservers). 103(which is true for most routers, WLAN gateways and nameservers).
104
105Finetuning needs to be done by editing C<src/vpn_dns.C> directly.
106 106
107=head1 PART 2: The GNU VPE protocol 107=head1 PART 2: The GNU VPE protocol
108 108
109This section, unfortunately, is not yet finished, although the protocol 109This section, unfortunately, is not yet finished, although the protocol
110is stable (until bugs in the cryptography are found, which will likely 110is stable (until bugs in the cryptography are found, which will likely
128The TYPE field is a single byte and determines the purpose of the packet 128The TYPE field is a single byte and determines the purpose of the packet
129(e.g. RESET, COMPRESSED/UNCOMPRESSED DATA, PING, AUTH REQUEST/RESPONSE, 129(e.g. RESET, COMPRESSED/UNCOMPRESSED DATA, PING, AUTH REQUEST/RESPONSE,
130CONNECT REQUEST/INFO etc.). 130CONNECT REQUEST/INFO etc.).
131 131
132SRCDST is a three byte field which contains the source and destination 132SRCDST is a three byte field which contains the source and destination
133node ids (12 bits each). The protocol does not yet scale well beyond 30+ 133node IDs (12 bits each).
134hosts, since all hosts must connect to each other once on startup. But if
135restarts are rare or tolerable and most connections are on demand, much
136larger networks are feasible.
137 134
138The DATA portion differs between each packet type, naturally, and is the 135The DATA portion differs between each packet type, naturally, and is the
139only part that can be encrypted. Data packets contain more fields, as 136only part that can be encrypted. Data packets contain more fields, as
140shown: 137shown:
141 138
147the data for encryption purposes. 144the data for encryption purposes.
148 145
149SEQNO is a 32-bit sequence number. It is negotiated at every connection 146SEQNO is a 32-bit sequence number. It is negotiated at every connection
150initialization and starts at some random 31 bit value. VPE currently uses 147initialization and starts at some random 31 bit value. VPE currently uses
151a sliding window of 512 packets/sequence numbers to detect reordering, 148a sliding window of 512 packets/sequence numbers to detect reordering,
152duplication and reply attacks. 149duplication and replay attacks.
153 150
154=head2 The authentification protocol 151=head2 The authentication protocol
155 152
156Before hosts can exchange packets, they need to establish authenticity of 153Before hosts can exchange packets, they need to establish authenticity of
157the other side and a key. Every host has a private RSA key and the public 154the other side and a key. Every host has a private RSA key and the public
158RSA keys of all other hosts. 155RSA keys of all other hosts.
159 156
160A host establishes a simplex connection by sending the other host a 157A host establishes a simplex connection by sending the other host an
161RSA encrypted challenge containing a random challenge (consisting of 158RSA encrypted challenge containing a random challenge (consisting of
162the encryption key to use when sending packets, more random data and 159the encryption key to use when sending packets, more random data and
163PKCS1_OAEP padding) and a random 16 byte "challenge-id" (used to detect 160PKCS1_OAEP padding) and a random 16 byte "challenge-id" (used to detect
164duplicate auth packets). The destination host will respond by replying 161duplicate auth packets). The destination host will respond by replying
165with an (unencrypted) RIPEMD160 hash of the decrypted challenge, which 162with an (unencrypted) RIPEMD160 hash of the decrypted challenge, which
166will authentify that host. The destination host will also set the outgoing 163will authenticate that host. The destination host will also set the
167encryption parameters as given in the packet. 164outgoing encryption parameters as given in the packet.
168 165
169When the source host receives a correct auth reply (by verifying the 166When the source host receives a correct auth reply (by verifying the
170hash and the id, which will expire after 120 seconds), it will start to 167hash and the id, which will expire after 120 seconds), it will start to
171accept data packets from the destination host. 168accept data packets from the destination host.
172 169
182 179
183=head2 Retrying 180=head2 Retrying
184 181
185When there is no response to an auth request, the host will send auth 182When there is no response to an auth request, the host will send auth
186requests in bursts with an exponential backoff. After some time it will 183requests in bursts with an exponential backoff. After some time it will
187resort to PING packets, which are very small (8 bytes) and lightweight 184resort to PING packets, which are very small (8 bytes + protocol header)
188(no RSA operations required). A host that receives ping requests from an 185and lightweight (no RSA operations required). A host that receives ping
189unconnected peer will respond by trying to create a connection. 186requests from an unconnected peer will respond by trying to create a
187connection.
190 188
191In addition to the exponential backoff, there is a global rate-limit on 189In addition to the exponential backoff, there is a global rate-limit on
192a per-IP base. It allows long bursts but will limit total packet rate to 190a per-IP base. It allows long bursts but will limit total packet rate to
193something like one control packet every ten seconds, to avoid accidental 191something like one control packet every ten seconds, to avoid accidental
194floods due to protocol problems (like a RSA key file mismatch between two 192floods due to protocol problems (like a RSA key file mismatch between two
195hosts). 193hosts).
196 194
195The intervals between retries are limited by the C<max-retry>
196configuration value. A node with C<connect> = C<always> will always retry,
197a node with C<connect> = C<ondemand> will only try (and re-try) to connect
198as long as there are packets in the queue, usually this limits the retry
199period to C<max-ttl> seconds.
200
201Sending packets over the VPN will reset the retry intervals as well, which
202means as long as somebody is trying to send packets to a given node, GVPE
203will try to connect every few seconds.
204
197=head2 Routing and Protocol translation 205=head2 Routing and Protocol translation
198 206
199The gvpe routing algorithm is easy: there isn't any routing. GVPE always 207The GVPE routing algorithm is easy: there isn't much routing to speak
200tries to establish direct connections, if the protocol abilities of the 208of: When routing packets to another node, GVPE trues the following
201two hosts allow it. 209options, in order:
202 210
211=over 4
212
203If the two hosts should be able to reach each other (common protocol, ip 213=item If the two hosts should be able to reach each other directly (common
204and port all known), but cannot (network down), then there will be no 214protocol, port known), then GVPE will send the packet directly to the
205connection, point. 215other node.
216
217=item If this isn't possible (e.g. because the node doesn't have a
218C<hostname> or known port), but the nodes speak a common protocol and a
219router is available, then GVPE will ask a router to "mediate" between both
220nodes (see below).
221
222=item If a direct connection isn't possible (no common protocols) or
223forbidden (C<deny-direct>) and there are any routers, then GVPE will try
224to send packets to the router with the highest priority that is connected
225already I<and> is able (as specified by the config file) to connect
226directly to the target node.
227
228=item If no such router exists, then GVPE will simply send the packet to
229the node with the highest priority available.
230
231=item Failing all that, the packet will be dropped.
232
233=back
206 234
207A host can usually declare itself unreachable directly by setting it's 235A host can usually declare itself unreachable directly by setting it's
208port number(s) to zero. It can declare other hosts as unreachable by using 236port number(s) to zero. It can declare other hosts as unreachable by using
209a config-file that disables all protocols for these other hosts. 237a config-file that disables all protocols for these other hosts. Another
238option is to disable all protocols on that host in the other config files.
210 239
211If two hosts cannot connect to each other because their IP address(es) 240If two hosts cannot connect to each other because their IP address(es)
212are not known (such as dialup hosts), one side will send a connection 241are not known (such as dialup hosts), one side will send a I<mediated>
213request to a router (routers must be configured to act as routers!), which 242connection request to a router (routers must be configured to act as
214will send both the originating and the destination host a connection info 243routers!), which will send both the originating and the destination host
215request with protocol information and IP address of the other host (if 244a connection info request with protocol information and IP address of the
216known). Both hosts will then try to establish a connection to the other 245other host (if known). Both hosts will then try to establish a direct
217peer, which is usually possible even when both hosts are behind a NAT 246connection to the other peer, which is usually possible even when both
218gateway. 247hosts are behind a NAT gateway.
219 248
220If the hosts cannot reach each other because they have no common protocol, 249Routing via other nodes works because the SRCDST field is not encrypted,
221the originator instead use the router with highest priority and matching
222protocol as peer. Since the SRCDST field is not encrypted, the router host
223can just forward the packet to the destination host. Since each host uses 250so the router can just forward the packet to the destination host. Since
224it's own private key, the router will not be able to decrypt or encrypt 251each host uses it's own private key, the router will not be able to
225packets, it will just act as a simple router and protocol translator. 252decrypt or encrypt packets, it will just act as a simple router and
253protocol translator.
226 254
227When no router is connected, the host will aggressively try to connect to
228all routers, and if a router is asked for an unconnected host it will try
229to ask another router to establish the connection.
230 255
231... more not yet written about the details of the routing, please bug me
232...
233

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines