Tinc
| Author: | MauricioPasquier |
|---|---|
| Date: | 2011-06-25 04:47:43 |
| url: | http://wiki.buenosaireslibre.org/Tinc |
Contents
Tinc es un demonio que genera una VPN mesh con túneles y encriptación entre varios nodos corriendo el demonio. Es mesh en el sentido de que eventualmente crea enlaces virtuales entre todos los nodos de la red, más allá de cuáles sean las conexiones iniciales entre nodos. Tiene licencia GPL.
Características principales
- Encriptación, autenticación y compresión: se puede comprimir con zlib o LZO, y se usa OpenSSL para encriptar y proteger el tráfico.
- Ruteo mesh automático: más allá de cómo se configuren los demonios para conectarse entre sí, el tráfico por la VPN siempre se manda directamente al destino, si es posible.
- Facilidad para expandir la red: para agregar un nodo a la red lo único que hace falta es un archivo extra con la llave y el nombre del nuevo nodo.
- El ruteo por olsrd funciona perfectamente sobre tinc.
Configuración
En los archivos de configuración, la variable $INTERFACE toma el valor de la VPN automáticamente del nombre del directorio donde están los archivos. Asique si queremos hacer la red para BAL, creamos un directorio /etc/tinc/bal y ahí adentro configuramos todo.
El rango usado para los nodos es el reservado para ejemplos y documentación en SubredesAsignadas:
| Subred | 172.16.167.0 |
| CIDR | 28 |
| Máscara de red | 255.255.255.240 |
| Primera IP | 172.16.167.1 |
| Última IP | 172.16.167.14 |
| Broadcast | 172.16.167.15 |
| Responsable | BuenosAiresLibre |
| Comentarios | Reservado para ejemplos y documentación. |
Asumimos que este rango es el asignado a NodoFalso, y este "presta" IPs a los nodos NodoEjemplo y NodoInventado para realizar la conexión. Luego, estos nodos pueden prestar de su rango a otros nodos, a los que NodoFalso va a tener acceso transparentemente. Por supuesto, un enlace real tiene prioridad, pero muchas veces estas IPs están sin uso. ¿Por qué no darle redundancia a la red y/o conectar un AP Aislado?
tinc.conf
01 # BuenosAiresLibre.org por VPN! 02 03 # El nombre de este host tinc (o sea el nombre del nodo) 04 Name = NodoFalso 05 06 # Los nodos con los que queremos conectarnos. 07 # Por cada nodo debemos tener un archivo de configuración en 08 # el directorio /etc/tinc/bal/hosts 09 ConnectTo = NodoEjemplo 10 ConnectTo = NodoInventado 11 12 # tinc funciona tanto en modo switch como router (el modo por omisión), 13 # pero ya que usamos olsrd no necesitamos el modo router 14 Mode = switch
tinc-up
1 #!/bin/sh 2 3 # En este archivo levantamos la interfaz por la que se conectan los nodos de la VPN. 4 # La subred del dispositivo tiene que ser mayor que las subredes asignadas a cada nodo, 5 # asique usamos la máscara que FreeNetworks le asignó a BuenosAiresLibre para 6 # interconexión de nodos (172.16.166.0/20), que engloba todas las direcciones ruteables 7 # por BAL, y una IP del rango asignado a NodoFalso 8 9 ifconfig $INTERFACE 172.16.167.1 netmask 255.255.240.0
tinc-down
1 #!/bin/sh 2 # Este archivo baja la interfaz. Normalmente no hay que tocarlo. 3 4 ifconfig $INTERFACE down
llaves
Para generar las llaves usamos el comando tincd -n nombredered -K. Previamente hay que haber creado el directorio /etc/tinc/nombredered:
tincd -n bal -K
El comando pregunta la ubicación de la llave. El valor por omisión suele ser el correcto (el directorio /etc/tinc/bal en este caso). Con esto ya tenemos las llaves rsa_key.priv y rsa_key.pub que identifican al nodo.
hosts
Los archivos de configuración de cada host (el nuestro y a los que nos conectamos) van en el directorio /etc/tinc/bal/hosts. Deben llamarse exactamente como los definimos en tinc.conf. En nuestro caso, tenemos los archivos NodoFalso, NodoEjemplo y NodoInventado.
NodoFalso
01 # Address puede ser una IP en el caso de que tengamos una fija, pero 02 # lo más probable es que tengamos IP dinámica. Lo mejor es configurar 03 # un dominio que siempre haga referencia a esa IP dinámica (con DynDNS 04 # o CDmon, por ejemplo) 05 Address = nodofalso.com.ar 06 07 # Tinc escucha por omisión en el puerto 655. Recuerden abrirlo en el 08 # firewall 09 Port = 655 10 11 # En Subnet vamos a asignarle a cada nodo una de las IP del rango para 12 # enlaces nodo-nodo específico de NodoFalso 13 Subnet = 172.16.167.1/32 14 15 # Después viene la llave pública que generamos antes. 16 -----BEGIN RSA PUBLIC KEY----- 17 MIICCgKCAgEAu2ZRQQXz5J5l5g3JGjEclWmoIV+fpEBklJ9cx8AFdKuxfRYIeN+z 18 hxHNnUENVbD+imEPI+jPtYGsh4iP9ysIXqIPGoOLYDXKnDSYYbup6VNEvtOztUB2 19 DrTShcvXcKz1nDtG6u/oT+SKiHrkrJdLNaPFYZ2BYP4GJJy/c80HgjYwuhZ3mN0M 20 Qo+4MMzurFHmEvT9MUXiAmEwKCaLh3QJJ5XZxT5hck4PsjVVkEN3TmB9Fqf4u6fW 21 eZOPl+lYCshkcYvz2Vh4sMfk0/PxHvMJg9iFKt/9WqRIcmsbn3v1Pnql3TwYlzCs 22 4bnN+KF069hKNnI6M5G6eFvp2TkXnGtqG5a1OqfABoFE5GlmCW7DOizOn2xuwkJE 23 LMkSSFj36a0LPrVV1VitFLlkAnfC4p0TGL/dYPGpqEBIWKD+/RcNiAeeB90X1t27 24 CbBuUP7N02XBPbssyQT6tSSsA33JpeJWHebVjiwNQyXr//9kgKYLS9AbkgqyDlgJ 25 StvJoKXuycNPs9ljGnVVtz3/ccqX7n7jgOWhHUrq7/bn8ZuigMWVmUd/cIpO9f/c 26 ZLt2o1TBtb7M4jpG3AhhT/j5eNCzTqY8aw8hOBLDfZICwWo0Jw8MmFKuZTACrS9A 27 tbG8JrsabS8h7JllNkszALefJQUJCLchA9Ss5Pn8EbPWXMh3CxvxvjkCAwEAAQ== 28 -----END RSA PUBLIC KEY-----
La llave pública podemos agregarla al archivo con el comando:
cat rsa_key.pub >> hosts/NodoFalso
NodoEjemplo y NodoInventado
La IP de los nodos a los que nos conectamos la determinamos nosotros (como administrador del NodoFalso), pero las llaves públicas tienen que generarla los administradores de NodoEjemplo y NodoInventado respectivamente.:
01 Address = nodoejemplo.dyndns.org 02 Subnet = 172.16.167.15/32 03 04 -----BEGIN RSA PUBLIC KEY----- 05 MIICCgKCAgEAyQkyZjmC+NsO2xCLecbLPaD0vSE8+csWtp/gxmHJr37g/FBqsVJ/ 06 uRZaFmSoMemaZavyqDEAWDAW9RQQVu/R4E3aCXOWItuQB6pA/+RiUqfOZXeP7ayy 07 /xQTrnYDeFmycR4aXgu456OVL4ifsKgMGspaOHJ/Kg1f61x5cOAJnwS6PltSIGwL 08 +K7jKUPmYPfsuLh+uYlxSFMi6pAHwTX9TUNLLvwiH2MD6ASDLKQWOIUQDWd0QO7b 09 yAq04ivdGC8PRG9TwwXdJdRrNxWutZNzYHL975JW37RaWJ5Mdf0F22JIR5L8YezT 10 QwrdiFrxEw0UOdOuu8qbtgUw4cJp3rkUez5bqbP3jeTX7LkPnwmbrGwSNwE2n0ti 11 eBgpXpZINdIgXI17wlEEFVweYv6YbQdsgldO7xezm6tsRELklL+0cKKY5xSj6xLJ 12 PEdBIbWVvKfEJs04xaZtPNi4sgNodNCxYH37ohLiRN90FI8nSFOUHB2Q3VHiirE1 13 fUsdbDNXUTMNWPlo+M7dxOO4bxhD5jy7jiOn4Dr+vbjGuMNFZHSvzixiX3cymM5f 14 In1MsFIlp28xdB1h8tUE7vvDwvCaJFF9D1w36nYzpqephjQNxsw8kkLNxoDwcnkN 15 R9mUund/5vqokBpb9U8ZuOd/RuRsU6v3mUnMcBKASDOIWQBzc3WC7YsCAwEAAQ== 16 -----END RSA PUBLIC KEY----- 1 Address = nodoinventado.org 2 Subnet = 172.16.167.14/32 3 4 -----BEGIN RSA PUBLIC KEY----- 5 MIICCgKCAgEAyQkyZjmC+NsO2xCLecbLPaD0vSE8+csWtp/gxmHJr37g/FBqsVJ/ 6 uRZaFmSoMemaZavyqUVJZ0+99RQQVu/R4E3aCXOWItuQB6pA/+RiUqfOZXeP7ayy 7 /xQTrnYDeFmycR4aaASDwqeiqwe098123mkacsdlkmcadioadsjafsFASdfkjSDL 8 +K7jKUPmYPfsuLh+uYlxSFMi6pAHwTX9TUNLLvwiH2MD6W2nkHNozL+e3vd0QO7b 9 yAq04ivdGC8PRG9TwwXdJdRrNxWutZNzYHL975JW37RaWJ5Mdf0F22JIR5L8YezT 10 Qwrsm68slWdfhowEu8qbtgUw4cJp3rkUez5bqbP3jeTX7LkPnwmbrGwSNwE2n0ti 11 eBgpXpZINdIgXI17wlEEFVweYv6YbQdsgldO7xezm6tsRELklL+0cKKY5xSj6xLJ 12 PEdBIbWVvKfEJs04xaZtPNi4sgNodNCxYH37ohLiRN90FI8nSFOUHB2Q3VHiirE1 13 fUsdbDNXUTMNWPlo+M7dxOO4bxhD5jy7jiOn4Dr+vbjGuMNFZHSvzixiX3cymM5f 14 In1MsFIlp28xdB1h8tUE7vvDwvCaJFF9D1w36nYzpqephjQNxsw8kkLNxoDwcnkN 15 R9mUund/5vqokBpb9U8ZuOd/RuRsU6v3mUnMctaZPqRy7QBzc3WC7YsCAwEAAQ== 16 -----END RSA PUBLIC KEY-----
Iniciar el demonio
Se inicia con el comando:
tincd -n bal
Si queremos ver cómo es el proceso de conexión y asegurarnos de que está funcionando, podemos pasarle -D -d 2 como parámetros.
Si queremos conectarnos a diferentes VPNs (por ejemplo, con una máquina que rutee entre MontevideoLibre y BuenosAiresLibre, necesitamos 2 demonios, uno por red, con configuraciones diferentes para cada red.
Configuración de olsrd
Podemos agregar este bloque al olsrd.conf para que de menor prioridad a los enlaces por VPN:
01 Interface "bal"
02 {
03 LinkQualityMult default 0.2
04 }
Agregando un nodo
Ahora supongamos que NodoInventado quiere conectarse con NodoNuevo, prestándole una IP de su rango asignado, que suponemos es:
| Subred | 172.16.166.28 |
| CIDR | 28 |
| Máscara de red | 255.255.255.240 |
| Primera IP | 172.16.166.17 |
| Última IP | 172.16.166.30 |
| Broadcast | 172.16.166.31 |
| Responsable | BuenosAiresLibre |
| Comentarios | Reservado para ejemplos y documentación. |
Los pasos a seguir son:
NodoNuevo configura su tinc con la IP que le asignó NodoInventado:
172.16.166.18
tinc.conf:
01 Name = NodoNuevo 02 ConnectTo = NodoInventado 03 Mode = switchtinc-up:
01 #!/bin/sh 02 ifconfig $INTERFACE 172.16.166.18 netmask 255.255.240.0tinc-down:
01 #!/bin/sh 02 ifconfig $INTERFACE downhosts/NodoNuevo:
01 Address = nodonuevo.com.ar 02 Port = 655 03 Subnet = 172.16.166.18/32 04 05 -----BEGIN RSA PUBLIC KEY----- 06 MIICCgKCAgEAu2ZRQQXz5J5l5g3JGjEclWmoIV+fpEBklJ9cx8AFdKuxfRYIeN+z 07 hxHNnUENVbD+imEPI+jPtYGsh4iP9ysIXqIPGoOLYDXKnDSYYbup6VNEvtOztUB2 08 DrTShcvXcKz1nDtG6u/oT+SKiHrkrJdLNaPFYZ2BYP4GJJy/c80HgjYwuhZ3mN0M 09 Qo+4MMzurFHmEvT9MUXiAmEwKCaLh3QJJ5XZxT5hck4PsjVVkEN3TmB9Fqf4u6fW 10 eZOPl+lYCshkcYvz2Vh4sMfk0/PxHvMJg9iFKt/9WqRIcmsbn3v1Pnql3TwYlzCs 11 4bnN+KF069hKNnI6M5G6eFvp2TkXnGtqG5a1OqfABoFE5GlmCW7DOizOn2xuwkJE 12 LMkSSFj36a0LPrVV1VitFLlkAnfC4p0TGL/dYPGpqEBIWKD+/RcNiAeeB90X1t27 13 CbBuUP7N02XBPbssyQT6tSSsA33JpeJWHebVjiwNQyXr//9kgKYLS9AbkgqyDlgJ 14 StvJoKXuycNPs9ljGnVVtz3/ccqX7n7jgOWhHUrq7/bn8ZuigMWVmUd/cIpO9f/c 15 ZLt2o1TBtb7M4jpG3AhhT/j5eNCzTqY8aw8hOBLDfZICwWo0Jw8MmFKuZTACrS9A 16 tbG8JrsabS8h7JllNkszALefJQUJCLchA9Ss5Pn8EbPWXMh3CxvxvjkCAwEAAQ== 17 -----END RSA PUBLIC KEY-----hosts/NodoInventado:
01 Address = nodoinventado.org 02 Subnet = 172.16.167.14/32 03 04 -----BEGIN RSA PUBLIC KEY----- 05 MIICCgKCAgEAyQkyZjmC+NsO2xCLecbLPaD0vSE8+csWtp/gxmHJr37g/FBqsVJ/ 06 uRZaFmSoMemaZavyqUVJZ0+99RQQVu/R4E3aCXOWItuQB6pA/+RiUqfOZXeP7ayy 07 /xQTrnYDeFmycR4aaASDwqeiqwe098123mkacsdlkmcadioadsjafsFASdfkjSDL 08 +K7jKUPmYPfsuLh+uYlxSFMi6pAHwTX9TUNLLvwiH2MD6W2nkHNozL+e3vd0QO7b 09 yAq04ivdGC8PRG9TwwXdJdRrNxWutZNzYHL975JW37RaWJ5Mdf0F22JIR5L8YezT 10 Qwrsm68slWdfhowEu8qbtgUw4cJp3rkUez5bqbP3jeTX7LkPnwmbrGwSNwE2n0ti 11 eBgpXpZINdIgXI17wlEEFVweYv6YbQdsgldO7xezm6tsRELklL+0cKKY5xSj6xLJ 12 PEdBIbWVvKfEJs04xaZtPNi4sgNodNCxYH37ohLiRN90FI8nSFOUHB2Q3VHiirE1 13 fUsdbDNXUTMNWPlo+M7dxOO4bxhD5jy7jiOn4Dr+vbjGuMNFZHSvzixiX3cymM5f 14 In1MsFIlp28xdB1h8tUE7vvDwvCaJFF9D1w36nYzpqephjQNxsw8kkLNxoDwcnkN 15 R9mUund/5vqokBpb9U8ZuOd/RuRsU6v3mUnMctaZPqRy7QBzc3WC7YsCAwEAAQ== 16 -----END RSA PUBLIC KEY-----NodoInventado agrega el archivo de configuración de NodoNuevo a su directorio /etc/tinc/bal/hosts
Y eso es todo! Ahora NodoFalso y NodoEjemplo tienen una ruta directa por VPN hasta NodoNuevo, sin tener que tocar ninguna configuración.
Referencias
Otros enfoques de VPN en BAL
- con OpenVPN
- con SSH
Otras redes comunitarias que usan olsrd sobre Tinc
- Ninux
- Freifunk
