![]() |
Instalando y Configurando Tincd | ||
1 |
Introduccion | |
2 |
Instalacion | |
1 |
Recompilando el Kernel | |
2 |
Terminando de prepararnos para instalar tinc | |
3 |
Otras cosas necesarias | |
4 |
Instalando tinc | |
3 |
Configuracion | |
1 |
Hosts y Keys | |
2 |
Tinc.conf | |
4 |
Arrancando tinc y ejemplo final | |
1 |
Ejemplo final |
Instalando y Configurando Tincd
1. Introduccion(arriba)Bueno, en este documento voy a explicar como junto a unos amigos instalamos una vpn, basada en GNU/Linux y Tinc, para nuestro uso personal. En este documento no se explica como funciona una vpn o como funciona tinc, solo se explica como instalarlo y configurarlo, para entender bien el funcionamiento de las VPNs y de Tinc se recomienda leer el manual oficial de Tinc (en ingles) y los links a otras Soluciones VPN y HowTo's.
En este caso en particular se usaron 3 computadoras conectadas a internet por cablemodem/dsl, las mismas son:
- [Anita] Debian Sid - 2.4.20
- [Phoenix] Red Hat 8 - 2.4.18
- [Flor] Debian Sid - 2.4.20
Anita hace de servidor; phoenix y flor se conectaran a ella, y una vez establecidas las conexiones las 3 maquinas y sus respectivas LANs podran verse entre si a traves de nuestra vpn.
2.0 Instalacion (arriba)
Ahora vamos a preparar nuestras maquinas para poder instalar tinc y crear nuestra vpn. En este documento se asume que se tiene un manejo basico de GNU/Linux y un conocimiento basico de redes (TCP/IP).
Lo primero va a ser preparar nuestro kernel para poder usar el tinc, para esto vamos a usar el driver tun/tap. Para verificar si tenemos este driver en nuestro kernel podemos usar el comando:
~# modprobe tun
~#
Si no nos arroja nada quiere decir que esta todo bien, sino nos devolveria un mensaje como este:
~# modprobe: Can't locate module tun
Para verificar que nuestro driver haya sido cargado con exito usamos "lsmod" que nos tendria que devolver algo asi:
:~# lsmod | grep tun
Module Size Used by Tainted: PF
tun 4416 3 (autoclean)
Si vemos el modulo de tun significa que todo salio bien y podemos seguir con la instalacion de tinc, de lo contrario tendremos que recompilar nuestro kernel.
2.1 Recompilando el kernel
En las instalaciones de Debian que se realizan con la guia no tenemos que recompilar el kernel porque ya viene incluido por default.
Esto es una tarea relativamente sencilla solo deberemos agregar el driver de tun/tap a nuestro kernel y recompilar de manera normal. Las cosas que deberemos agregar a nuestro kernel son:
Code maturity level options
[*] Prompt for development and/or incomplete code/drivers
Network device support
<M> Universal tun/tap device driver support
Luego recompilamos normalmente reiniciamos y verificamos como se explico antes que el driver funcione correctamente.
2.2 Terminando de prepararnos para instalar tinc
Bueno ya tenemos nuestro kernel preparado, ahora tenemos que verificar que el device de tun/tap este creado o de lo contrario crearlo. Hacemos lo siguiente para ver si el device existe
:~# ls -l /dev/net/tun
crw-r----- 1 root root 10, 200 Apr 5 06:02 /dev/net/tun
~#
o
:~# ls -l /dev/tun
crw-r----- 1 root root 10, 200 Apr 5 06:02 /dev/net/tun
:~#
Si ese device existe ya estamos casi listos para instalar tinc, de lo contrario debemos crearlo. En Debian si vamos a usar apt-get para instalar el tinc, y el device no existe, nos preguntara si deseamos que el instalador lo cree por nosotros, le decimos que si y listo. En otras distribuciones deberemos crearlo nosotros, para esto vamos a usar el comando "mknod" de la siguiente manera:
:~# mknod -m 600 /dev/net/tun c 10 200
Con eso ya tenemos creado nuestro device y podemos continuar con la instalacion.
2.3 Otras cosas necesarias
Para que tinc funcione correctamente nuestro sistema tiene que tener instalado OpenSSL y Zlib, de lo contrario cuando tratemos de compilar el tinc nos dara un error. Estos paquetes y sus instrucciones de instalacion se pueden obtener en sus respectivas paginas:
Para Debian podemos buscar los paquetes en: http://packages.debian.org/ o usando apt-get.
2.4 Instalando tinc
Podemos instalar tinc de varias maneras. Podemos optar por usar el source y compilarlo, el source lo podemos obtener de la pagina oficial del tinc.
Tambien si usamos redhat podemos obtener los rpms en esa misma pagina, aunque no son la ultima version (tienen que ser todos de la misma version, no puede usarse por ejemplo la version 1.0pre7 en una maquina y la pre8 en otra maquina ya que no son compatibles).
Si usamos Debian podemos obtener el paquete de tinc desde:
O podemos usar apt-get de esta manera:
~# apt-get install tinc
Eso instalara tinc en nuestro sistema y lo dejara listo para configurar y usar.
3.0 Configuracion (arriba)
Ya tenemos tinc instalado y listo para configurar. Lo primero es explicar que tinc nos da la facilidad de crear varias VPN`s, y darles un nombre a cada una, en este documento vamos a trabajar de esa manera, nuestra red tendra el nombre "aevpn", por eso todos nuestros archivos de configuracion se situaran en:
/etc/tinc/aevpn/
o si instalamos tinc en "/usr/local/"
/usr/local/etc/tinc/aevpn/
3.1 Hosts y Keys
Los archivos de los hosts contienen los datos de las maquinas que participaran de nuestra vpn y las public keys, estos archivos de hosts estaran situados en:
/etc/tinc/aevpn/hosts/
o si instalamos en "/usr/local/"
/usr/local/etc/tinc/aevpn/hosts/
Estos archivos de los hosts tendran nuestros datos de la siguiente manera:
Variable = valor
Nuestros archivos de hosts tendran que estar en todas las maquinas de la vpn y tiene que existir uno con los datos de cada maquina de la vpn, osea que anita tendra los archivos hosts de ella misma, el de phoenix y el de flor, phoenix tendra el de el, el de anita y el de flor, y flor tendra el suyo, el de anita y el de phoenix, se entiende mas o menos? =). Caulquiera diria que una tabla resolvia todo :P
Bueno nuestros archivos de host tienen el nombre de cada maquina, el de anita se llama anita, el de phoenix, phoenix, y el de flor, flor. Estos archivos tienen las siguientes variables adentro.
- Address = 24.232.111.111
Esta variable tiene el ip de internet de la maquina o
podemos especificarle un dominio si tuviesemos por ej. mihost.com
- Port = 655
Esta variable indica el puerto que va a usar el tinc.
- SubNet = 10.1.0.0/16
Esta variable indica la subred que usara esta maquina dentro de la vpn. (En el ejemplo esta maquina tiene el ip 10.1.52.3 por eso tiene esa subnet, ustedes tendran que adaptarlo a sus necesidades).
Como veran en el ejemplo figura SubNet dos veces..en este caso usamos la primera para indicar la subred de la VPN y la segunda para indicar la subred de la LAN.
Esto ultimo que vamos a ver es la llave publica, esta llave publica tiene un par que es la llave privada. Crearemos nuestro juego de llaves de la siguiente manera:
~# tincd -n aevpn -K
(aevpn es el nombre de nuestra red o sitio VPN como prefieran, el nombre que usamos en el ejemplo, ustedes tendran que poner su nombre)
Esto nos preguntara donde queremos guardar nuestra llave publica primero y luego donde queremos poner nuestra llave privada. Esta ultima tiene que ser guardada en un archivo solo para ella. Bueno una vez generadas nuestras llaves tendremos que ponerlas en su lugar, la publica la copiamos y la pegamos en el archivo de hosts y la privada la guardamos en /etc/tinc/aevpn/ o /usr/local/etc/tinc/aevpn/ si instalamos tinc en /usr/local/. Notese que tanto la llave publica como la privada tienen que ser la misma en TODAS las maquinas de la vpn, osea tendremos que transladarlas de alguna manera segura por ejemplo usando scp o un diskette =P(???).
Al final nuestro archivo de host quedaria parecido a esto:
Address = 24.232.111.111 o mihost.com Port = 655 SubNet = 10.1.0.0/16 SubNet = 10.0.0.0/24 -----BEGIN RSA PUBLIC KEY----- BQiTJGgzG3UewrAmgYuE1+YeYhsWtyzCwlzj3GbvnxdDGa3cnfdq5J8WIpvz 0IM/K5oZCJWJR62wDiwMIGJAHvNLj6USv9iZ0A6CvNMYwjzp65+BAKXEzobde5 ug1b3tDHgQ+xLe3nXz1FTrjcUiHjveGVmr5RioZGmEpxXffGosPdFiTunHMk3C ------END RSA PUBLIC KEY------ |
Existen otras variables que se pueden usar en los archivos de los hosts, estas variables pueden ser encontradas en el manual oficial del tinc (en ingles):
3.2 tinc.conf
tinc.conf tiene muchas mas variables de las que vamos a mostrar aca, ellas se pueden encontrar en el manual oficial de tinc (en ingles):
Nuestro tinc.conf estara conformado de la siguiente manera:
Name = hostlocal
Esta variable indica el nombre de NUESTRO host, el cual tiene que coincidir con el nombre de nuestro archivo host que creamos en el paso anterior.
- Device = /dev/net/tun
Esta variable indica el nombre de nuestro device, el que creamos en el paso 3.0.
- PrivateKeyFile = /etc/tinc/aevpn/rsa_key.priv
Esta variable indica el path de nuestra llave privada que creamos en el paso anterior. (La llave privada tiene que tener 644 de permisos ya que sino tinc nos dara un error al iniciar diciendo que la llave privada no es segura).
- ConnectTo = hostserver
Esta variable se usara para indicarle al tinc con quien debe intentar conectarse, solo es necesaria en los clientes. En el ejemplo del final veremos cuando se usa y cuando no.
En total nuestro archivo tinc.conf quedaria mas o menos asi:
Name = hostlocal Device = /dev/net/tun PrivateKeyFile = /etc/tinc/aevpn/rsa_key.priv ConnectTo = hostserver |
Este ultimo se usara solo en caso de los clientes.
4.0 Iniciando tinc y ejemplo final(arriba)
Bueno una vez que tenemos configurados nuestros tincs podemos arrancarlos de la siguiente manera:
~# tincd -d LEVEL -n aevpn
Este comando lleva 2 flags, el primero le indica que inicie en modo debug, asi podremos ver con mas detalle si hay un error en los logs. (tinc loguea con syslog, osea veremos sus logs mirando el archivo /var/log/syslog). El segundo flag le indica que red o sitio VPN tiene que arrancar, en nuestro caso el nombre era aevpn por eso usamos "-n aevpn" ustedes deberan usar el nombre de su red. No es necesario arrancar el tinc en algun orden en especial, se puede arrancar un cliente primero, despues el server y despues otro cliente, una vez funcionando tinc seguira intentando conectarse al server.
Otros flags utiles pueden ser:
--bypass-security
Este arranca tinc sin que se realice autenticacion o encapsulasion de los paquetes, solo es util para hacer pruebas.
Otra cosa necesaria para hacer funcionar nuestra vpn es, una vez arrancado el tinc, levantar la interfaz virtual, esto se hace como si fuera una interfaz comun (eth0). Para esto vamos a crear un script en bash que va a ser asi:
#!/bin/bash
ifconfig aevpn hw ether fe:fd:0:0:0:0
ifconfig aevpn 10.1.32.1 netmask 255.0.0.0
ifconfig aevpn -arp
Copiamos esto, lo modificamos y lo guardamos con el nombre "tinc-up" y le damos permisos de ejecucion, luego lo copiamos a /etc/tinc/aevpn/ y listo.. cuando arranquemos tinc la interfaz se levantara automaticamente. El script se puede llamar de otra manera,
pero en ese caso tendremos que levantarlo nosotros manualmente.
Podemos ejecutar ese comando y verificar que todo funciona bien usando el comando "ifconfig -a aevpn" que nos devolvera algo asi:
aevpn Link encap:Ethernet HWaddr FE:FD:00:00:00:00 inet addr:10.1.32.1 Bcast:10.255.255.255 Mask:255.0.0.0 UP BROADCAST RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:18667 errors:0 dropped:0 overruns:0 frame:0 TX packets:19291 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:1385552 (1.3 MiB) TX bytes:1590235 (1.5 MiB) |
4.1 Ejemplo final
Bueno aca vamos a dar el ejemplo de como quedo configurada nuestra vpn. Recordemos que anita va a hacer de server y Flor y phoenix se conectaran a ella.
Nota: vamos a poner el nombre del archivo y su contenido, asi ven todos los archivos de configuracion usados.
- CONFIGURACION EN ANITA -
~# cat /etc/tinc/aevpn/tinc-up #!/bin/bash
ifconfig aevpn hw ether fe:fd:0:0:0:0
ifconfig aevpn 10.1.32.1 netmask 255.0.0.0
ifconfig aevpn -arp
~# cat /etc/aetinc/vpn/tinc.conf
Name = anita
Device = /dev/net/tun
PrivateKeyFile = /etc/tinc/aevpn/rsa_key.priv
~# cat /etc/tinc/aevpn/hosts/anita
Address = 24.232.222.222
Port = 655
SubNet = 10.9.0.0/16
SubNet = 10.0.0.0/24
-----BEGIN RSA PUBLIC KEY-----
BQiTJGgzG3UewrAmgYuE1+YeYhsWtyzCwlzj3GbvnxdDGa3cnfdq5J8WIpvz
0IM/K5oZCJWJR62wDiwMIGJAHvNLj6USv9iZ0A6CvNMYwjzp65+BAKXEzobde5
ug1b3tDHgQ+xLe3nXz1FTrjcUiHjveGVmr5RioZGmEpxXffGosPdFiTunHMk3C
------END RSA PUBLIC KEY------
~# cat /etc/tinc/aevpn/hosts/phoenix
Address = 24.232.111.111
Port = 655
SubNet = 10.8.0.0/16
SubNet = 10.1.0.0/24
-----BEGIN RSA PUBLIC KEY-----
BQiTJGgzG3UewrAmgYuE1+YeYhsWtyzCwlzj3GbvnxdDGa3cnfdq5J8WIpvz
0IM/K5oZCJWJR62wDiwMIGJAHvNLj6USv9iZ0A6CvNMYwjzp65+BAKXEzobde5
ug1b3tDHgQ+xLe3nXz1FTrjcUiHjveGVmr5RioZGmEpxXffGosPdFiTunHMk3C
------END RSA PUBLIC KEY------
~# cat /etc/tinc/aevpn/hosts/flor
Address = 24.232.333.333
Port = 655
SubNet = 10.7.0.0/16
SubNet = 10.2.0.0/24
-----BEGIN RSA PUBLIC KEY-----
BQiTJGgzG3UewrAmgYuE1+YeYhsWtyzCwlzj3GbvnxdDGa3cnfdq5J8WIpvz
0IM/K5oZCJWJR62wDiwMIGJAHvNLj6USv9iZ0A6CvNMYwjzp65+BAKXEzobde5
ug1b3tDHgQ+xLe3nXz1FTrjcUiHjveGVmr5RioZGmEpxXffGosPdFiTunHMk3C
------END RSA PUBLIC KEY------
- CONFIGURACION EN PHOENIX -
~# cat /etc/tinc/aevpn/tinc-up
#!/bin/bash
ifconfig aevpn hw ether fe:fd:0:0:0:0
ifconfig aevpn 10.8.0.1 netmask 255.0.0.0
ifconfig aevpn -arp
~# cat /etc/tinc/aevpn/tinc.conf Name = phoenix
Device = /dev/net/tun
PrivateKeyFile = /etc/tinc/aevpn/rsa_key.priv
ConnectTo = anita
~# cat /etc/tinc/aevpn/hosts/anita
Address = 24.232.222.222
Port = 655
SubNet = 10.9.0.0/16
SubNet = 10.0.0.0/24
-----BEGIN RSA PUBLIC KEY-----
BQiTJGgzG3UewrAmgYuE1+YeYhsWtyzCwlzj3GbvnxdDGa3cnfdq5J8WIpvz
0IM/K5oZCJWJR62wDiwMIGJAHvNLj6USv9iZ0A6CvNMYwjzp65+BAKXEzobde5
ug1b3tDHgQ+xLe3nXz1FTrjcUiHjveGVmr5RioZGmEpxXffGosPdFiTunHMk3C
------END RSA PUBLIC KEY------
~# cat /etc/tinc/aevpn/hosts/phoenix
Address = 24.232.111.111
Port = 655
SubNet = 10.8.0.0/16
SubNet = 10.1.0.0/24
-----BEGIN RSA PUBLIC KEY-----
BQiTJGgzG3UewrAmgYuE1+YeYhsWtyzCwlzj3GbvnxdDGa3cnfdq5J8WIpvz
0IM/K5oZCJWJR62wDiwMIGJAHvNLj6USv9iZ0A6CvNMYwjzp65+BAKXEzobde5
ug1b3tDHgQ+xLe3nXz1FTrjcUiHjveGVmr5RioZGmEpxXffGosPdFiTunHMk3C
------END RSA PUBLIC KEY------
~# cat /etc/tinc/aevpn/hosts/flor
Address = 24.232.333.333
Port = 655
SubNet = 10.7.0.0/16
SubNet = 10.2.0.0/24
-----BEGIN RSA PUBLIC KEY-----
BQiTJGgzG3UewrAmgYuE1+YeYhsWtyzCwlzj3GbvnxdDGa3cnfdq5J8WIpvz
0IM/K5oZCJWJR62wDiwMIGJAHvNLj6USv9iZ0A6CvNMYwjzp65+BAKXEzobde5
ug1b3tDHgQ+xLe3nXz1FTrjcUiHjveGVmr5RioZGmEpxXffGosPdFiTunHMk3C
------END RSA PUBLIC KEY------
- CONFIGURACION EN FLOR -
~# cat /etc/tinc/aevpn/tinc-up
#!/bin/bash
ifconfig aevpn hw ether fe:fd:0:0:0:0
ifconfig aevpn 10.7.0.1 netmask 255.0.0.0
ifconfig aevpn -arp
~# cat /etc/tinc/aevpn/tinc.conf
Name = flor
Device = /dev/net/tun
PrivateKeyFile = /etc/tinc/aevpn/rsa_key.priv
ConnectTo = anita
~# cat /etc/tinc/aevpn/hosts/anita
Address = 24.232.222.222
Port = 655
SubNet = 10.9.0.0/16
SubNet = 10.0.0.0/24
-----BEGIN RSA PUBLIC KEY-----
BQiTJGgzG3UewrAmgYuE1+YeYhsWtyzCwlzj3GbvnxdDGa3cnfdq5J8WIpvz
0IM/K5oZCJWJR62wDiwMIGJAHvNLj6USv9iZ0A6CvNMYwjzp65+BAKXEzobde5
ug1b3tDHgQ+xLe3nXz1FTrjcUiHjveGVmr5RioZGmEpxXffGosPdFiTunHMk3C
------END RSA PUBLIC KEY------
~# cat /etc/tinc/aevpn/hosts/phoenix
Address = 24.232.111.111
Port = 655
SubNet = 10.8.0.0/16
SubNet = 10.1.0.0/24
-----BEGIN RSA PUBLIC KEY-----
BQiTJGgzG3UewrAmgYuE1+YeYhsWtyzCwlzj3GbvnxdDGa3cnfdq5J8WIpvz
0IM/K5oZCJWJR62wDiwMIGJAHvNLj6USv9iZ0A6CvNMYwjzp65+BAKXEzobde5
ug1b3tDHgQ+xLe3nXz1FTrjcUiHjveGVmr5RioZGmEpxXffGosPdFiTunHMk3C
------END RSA PUBLIC KEY------
~# cat /etc/tinc/aevpn/hosts/flor
Address = 24.232.333.333
Port = 655
SubNet = 10.9.0.0/16
SubNet = 10.2.0.0/24
-----BEGIN RSA PUBLIC KEY-----
BQiTJGgzG3UewrAmgYuE1+YeYhsWtyzCwlzj3GbvnxdDGa3cnfdq5J8WIpvz
0IM/K5oZCJWJR62wDiwMIGJAHvNLj6USv9iZ0A6CvNMYwjzp65+BAKXEzobde5
ug1b3tDHgQ+xLe3nXz1FTrjcUiHjveGVmr5RioZGmEpxXffGosPdFiTunHMk3C
-----END RSA PUBLIC KEY-----
Notas
Nota(1):
Las direcciones IP de internet que utilizamos son ficticias.
Nota(2):
Notese que la mascara es 255.0.0.0 porque debe ser para toda la red y no solo para la IP de una maquina.
Nota(3):
Las direcciones IPs de las SubRedes, en nuestro caso tuvimos que usar subredes diferentes para cada Host porque si usabamos IPs de la misma subred para cada host no funcionaba (ejemplo anita = 10.1.1.1 y phoenix = 10.1.1.2).
Nota(4):
Variable ConnectTo = anita. Esta variable solo se usa en los clientes (flor y phoenix) porque especifica quien es el servidor (anita).
Nota(5):
Las Public y Private Keys deben estar en todas las maquinas que realizan la conexion y ser las mismas.
Nota(6):
Tinc-up. Este archivo, es un script bash que mencionamos anteriormente con el cual seteamos la IP del adaptador tun para la VPN. El archivo debe llamarse tinc-up y estar dentro de /etc/tinc/aevpn o /usr/local/tinc/aevpn dependiendo de donde se instalo el tinc para que se ejecute automaticamente al iniciar tincd. Sino pueden ponerle cualquier nombre y ejecutarlo manualmente o desde linea de comandos.
Nota(7):
Con este comando como usuario root le damos los permisos necesarios: chmod 644 /etc/tinc/aevpn/rsa_key.priv
Final(1):
Con esto terminamos el mini-how-to del tinc, espero que les sirva de algo y recuerden qe esto es solo una version minima y en castellano del manual original, y un poco la historia de como montamos la vpn con mis amigos, tambien aclaro que no soy ningun guru de las redes ni de linux, cualquier duda, comentario o aporte: info@aepn.com.ar
Este documento fue generado y reeditado de nuestro original por ruc & equisca en Agosto, 20 del 2004 en AEPN Lab's usando nano.
(arriba)
by
XKLiB8u2R equisca |
[ ATENCIÓN: Toda la información y el software que pudieras encontrar aquí, únicamente está permitido utilizarlos con fines formativos, no haciéndonos responsables del mal uso, que por desconocimiento o malicia, se pudiera hacer. Tampoco nos responsabilizamos de los daños ocasionados por una utilización inapropiada o con fines delictivos. Con esta ezine no se pretende fomentar, ni la violencia, ni una conducta ilegal, sino dar a conocer el fascinante mundo de la informática, la electrónica y las telecomunicaciones. ] |