119 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| This is the protocol documentation for tinc, a Virtual Private Network daemon.
 | |
| 
 | |
|    Copyright 2000,2001 Guus Sliepen <guus@sliepen.warande.net>,
 | |
|              2000,2001 Ivo Timmmermans <itimmermans@bigfoot.com>
 | |
| 
 | |
|    Permission is granted to make and distribute verbatim copies of
 | |
|    this documentation provided the copyright notice and this
 | |
|    permission notice are preserved on all copies.
 | |
| 
 | |
|    Permission is granted to copy and distribute modified versions of
 | |
|    this documentation under the conditions for verbatim copying,
 | |
|    provided that the entire resulting derived work is distributed
 | |
|    under the terms of a permission notice identical to this one.
 | |
| 
 | |
|    $Id: PROTOCOL,v 1.1.2.4 2001/01/07 17:08:02 guus Exp $
 | |
| 
 | |
| 
 | |
| 1.  Protocols used in tinc
 | |
| -------------------------
 | |
| 
 | |
| tinc uses several protocols to function correctly.  To enter the
 | |
| network of tinc daemons that make up the virtual private network, tinc
 | |
| makes TCP connections to other tinc daemons.  It uses the "meta
 | |
| protocol" for these connections.  To exchange packets on the virtual
 | |
| network, UDP connections are made and the "packet protocol" is used.
 | |
| Tinc also needs to exchange network packets with the kernel.  This is
 | |
| done using the ethertap device or the universal TUN/TAP device that
 | |
| can be found in various UNIX flavours.
 | |
| 
 | |
| 2.  Packet protocol
 | |
| ------------------
 | |
| 
 | |
| Normal packets are sent without any state information, so the layout
 | |
| is pretty basic.
 | |
| 
 | |
| A data packet can only be sent  if the encryption key is known to both
 | |
| parties, and the connection is  activated. If the encryption key is not
 | |
| known, a request is sent to the destination using the meta connection
 | |
| to retreive it.
 | |
| 
 | |
|  0   1   2   3
 | |
| | LEN  | DATA :   \
 | |
| : DATA        .   } encrypted
 | |
| . :               /
 | |
|   .
 | |
| 
 | |
| 
 | |
| 3.  Meta protocol
 | |
| ----------------
 | |
| 
 | |
| The meta protocol is used to tie all tinc daemons together, and
 | |
| exchange information about which tinc daemon serves which virtual
 | |
| subnet.
 | |
| 
 | |
| The meta protocol consists of requests that can be sent to the other
 | |
| side.  Each request has a unique number and several parameters.  All
 | |
| requests are represented in the standard ASCII character set.  It is
 | |
| possible to use tools such as telnet or netcat to connect to a tinc
 | |
| daemon and to read and write requests by hand, provided that one
 | |
| understands the numeric codes sent.
 | |
| 
 | |
| The authentication scheme is described in the SECURITY file. After a
 | |
| succesful authentication, the server and the client will exchange all the
 | |
| information about other tinc daemons and subnets they know of, so that both
 | |
| sides (and all the other tinc daemons behind them) have their information
 | |
| synchronised.
 | |
| 
 | |
| daemon	message
 | |
| --------------------------------------------------------------------------
 | |
| origin	ADD_HOST daemon a329e18c:655 0
 | |
|                     |         |      +--> options
 | |
|                     |         +---------> real address:port
 | |
|                     +-------------------> name of new tinc daemon
 | |
| origin	ADD_SUBNET daemon 1,0a010100/ffffff00
 | |
|                       |   |     |       +--> netmask
 | |
|                       |   |     +----------> vpn IPv4 network address
 | |
|                       |   +----------------> subnet type (1=IPv4)
 | |
|                       +--------------------> owner of this subnet
 | |
| --------------------------------------------------------------------------
 | |
| 
 | |
| In case daemons leave the VPN, DEL_HOST and DEL_SUBNET messages with exactly
 | |
| the same syntax are sent to inform the other daemons of the departure.
 | |
| 
 | |
| The keys used to encrypt VPN packets are not sent out directly. This is
 | |
| because it would generate a lot of traffic on VPNs with many daemons, and
 | |
| chances are that not every tinc daemon will ever send a packet to every
 | |
| other daemon. Instead, if a daemon needs a key it sends a request for it
 | |
| via the meta connection of the nearest hop in the direction of the
 | |
| destination. If any hop on the way has already learned the key, it will
 | |
| act as a proxy and forward it's copy back to the requestor.
 | |
| 
 | |
| daemon	message
 | |
| --------------------------------------------------------------------------
 | |
| daemon	REQ_KEY origin destination
 | |
|                    |       +--> name of the tinc daemon it wants the key from
 | |
|                    +----------> name of the daemon that wants the key      
 | |
| daemon	ANS_KEY origin destination e4ae0b0a82d6e0078179b5290c62c7d0
 | |
|                    |       |       \______________________________/
 | |
|                    |       |                      +--> 128 bits key
 | |
|                    |       +--> name of the daemon that wants the key
 | |
|                    +----------> name of the daemon that uses this key
 | |
| daemon	KEY_CHANGED origin
 | |
|                       +--> daemon that has changed it's packet key
 | |
| --------------------------------------------------------------------------
 | |
| 
 | |
| There is also a mechanism to check if hosts are still alive. Since network
 | |
| failures or a crash can cause a daemon to be killed without properly
 | |
| shutting down the TCP connection, this is necessary to keep an up to date
 | |
| connection list. Pings are sent at regular intervals, except when there
 | |
| is also some other traffic.
 | |
| 
 | |
| daemon	message
 | |
| --------------------------------------------------------------------------
 | |
| origin	PING
 | |
| dest.	PONG
 | |
| --------------------------------------------------------------------------
 | |
| 
 | |
| This basically covers everything that is sent over the meta connection by
 | |
| tinc.
 |