Table of Contents

VPN con Tinc

Tinc es un software de código abierto para crear redes privadas virtuales (VPN), las VPN a través de otro canal físico como Internet, donde los nodos (hosts) participantes individuales aparecen en las aplicaciones como si estuvieran conectados por cable en LAN.

Visión general

Tinc utiliza criptografía asimétrica. Cada nodo tiene su propia llave privada, una llave publica y otra llave publica; para cada participante del nodo. Estos archivos son, junto con algunos archivos de configuración, almacenados en el directorio /etc/tinc/<nombre de la VPN>.

Cada nodo también corre como un demonio (o múltiples demonios, uno para cada VPN por separado). Los demonios escuchan sobre el puerto configurado (por defecto es 655) para conexiones entrantes desde otros nodos. Solo los nodos con claves privadas validas pueden producir datos descifrables con claves publicas que coincidan y de esta forma se concede el acceso.

El archivo de clave pública puede contener no solo la clave en sí, sino también la dirección IP pública (y el puerto) del nodo al que pertenece. Si se configura, el demonio no esperará las conexiones, pero intentará conectarse a estos nodos conocidos.

Cada nodo tiene su propia dirección IP (en el espacio de direcciones privado) que, una vez que el demonio se está ejecutando, se asigna a la interfaz de red virtual. Cualquier tráfico proveniente de la VPN es procesado por el demonio y proviene de esa interfaz de red, y cualquier tráfico enviado a través de esa interfaz también es procesado por el demonio y enviado a la VPN, de forma totalmente transparente para las aplicaciones. Una característica importantes de Tinc es que el demonio puede (y por defecto lo hace) reenviar tráfico para otros nodos, por ejemplo, si los nodos A y B están detrás de NAT y pueden comunicarse directamente solo con el nodo C, que tiene acceso irrestricto a Internet, o incluso no saben la clave pública de cada uno, pero C los conoce a ambos, C felizmente reenviará el tráfico entre ellos / para ellos.

Sólo necesitan saber las direcciones IP (en el espacio de direcciones privadas).

Instalación

# ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
# make
# make install
$ make DESTDIR=/somewhere/else install

Configuración

# tinc -n VPNtest init node1
$ tinc -c . generate-keys
$ mkdir -p VPNtest/hosts
$ mv *.priv VPNtest/.
$ cat rsa_key.pub ecdsa_key.pub > VPNtest/hosts/node1
$ rm rsa_key.pub ecdsa_key.pub
tinc.conf
Name = node1
ConnectTo = node2
Interface = vpnNIC
Port = 6655
tinc-up
#!/bin/sh
ip addr add 192.168.1.1/24 dev vpnNIC
ip link set vpnNIC up
node1
Address = <public IP address> [port]
Subnet = 192.168.1.1/32
-----BEGIN RSA PUBLIC KEY-----
...
# tincd -n VPNtest --debug=5 --logfile=/var/log/VPNtest.log

Windows

En aras de la integridad, como por ejemplo, construir una VPN con una máquina Linux como servidor de archivos al que acceda Windows, administrar remotamente un grupo de Windows detrás de NAT de Linux, jugar a juegos, lo que sea, vamos a cubrir también Windows (XP, 7 y 8 son conocidos por su funcionamiento).

Instalación

C:\path\to\tapinstall.exe remove tap0901
C:\path\to\tapinstall.exe install OemWin2k.inf tap0901

Configuración

Existen unas pequeñas diferencias en la configuración de Windows.

netsh interface ip set address name="Local Area Connection number" static <IP address> <mask>
C:\path\to\tincd.exe --debug=5 --logfile=C:\path\to\file.log -n VPNtest
cmd> net start tinc.VPNtest

script RC

Aquí hay algunos scripts para iniciar todas las VPNs en el arranque.

#!/bin/sh
 
VPNS=$(ls /etc/tinc)
 
start () {
	for VPN in $VPNS; do
		echo "Starting tinc daemon for $VPN..."
		/usr/sbin/tincd -n "$VPN" -d1 --logfile=/var/log/tinc."$VPN"
	done
}
 
stop () {
	for VPN in $VPNS; do
		echo "Stopping tinc daemon for $VPN..."
		/usr/sbin/tinc -n "$VPN" stop
	done
}
 
restart () {
	stop
	sleep 1
	start
}
 
case "$1" in
	("start")
		start
		;;
	("stop")
		stop
		;;
	("restart")
		restart
		;;
	(*)
		echo "Usage: $0 <start|stop|restart>"
		exit 1
esac
 
exit 0

Salve esto como por ejemplo /etc/rc.d/rc.tinc, hacer ejecutable y luego agregar una línea a rc.local.

rc.local
/etc/rc.d/rc.tinc start

Fuentes

Documentación/sitio web de Tinc http://www.tinc-vpn.org