OpenVPN en Debian
Una red privada virtual (VPN) es usada para establecer una conexión encriptada, punto-a-punto, entre dos computadores. El uso más común de una VPN es para exportar en forma remota aplicaciones X, o incluso el escritorio completo del servidor. Por ejemplo, podemos correr en el computador de casa aplicaciones o el escritorio del servidor del trabajo.
El escritorio se puede levantar en forma remota con XDMCP, de hecho es la manera de usarlo dentro de una red interna, pero cuando la conexión viaja por Internet, en donde no se puede suponer que existe privacidad alguna, una VPN es la manera de asegurarlo.
En la configuración a continuación, el servidor remoto y computador local (cliente) pueden ser intercambiados sin mayores consideraciones.
Instalando y configurando OpenVPN
Instala el paquete openvpn en servidor y cliente,
# apt-get install openvpn
Genera una llave secreta,
# openvpn --genkey --secret /etc/openvpn/static.key
en uno y cópiala en forma segura al segundo, por ejemplo, con Secure Copy,
# scp -p /etc/openvpn/static.key root@servidor.debian:/etc/openvpn/
En el servidor remoto (el que va a servir el escritorio), crea el archivo /etc/openvpn/tun0.conf y agrega,
dev tun0 ifconfig 10.9.8.1 10.9.8.2 secret static.key
Los números IP 10.x.x.x pueden modificarse a gusto. Lo importante es asignarle, dentro de una misma subred (10.x.x), un IP a cada computador. La llave secreta se encarga que solo aquellos computadores que tienen la llave puedan crear el túnel. Por eso es importante proteger la llave bien (como cualquier otra llave encriptada). En este caso, 10.9.8.1 es el IP del servidor remoto, 10.9.8.2 el IP del cliente.
En el computador cliente (local), crea también el archivo /etc/openvpn/tun0.conf y agrega,
remote 100.10.2.10 dev tun0 ifconfig 10.9.8.2 10.9.8.1 secret static.key
en donde "remote" es el IP público del servidor remoto. En la configuración del cliente, los IPs asignados van revertidos.
Inicia el servidor OpenVPN en servidor remoto y cliente,
# /etc/init.d/openvpn start
El servidor OpenVPN va a crear en ambos una interfase de red llamada tun0,
# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.9.8.2 P-t-P:10.9.8.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)que hay que tratar igual que una interfase de red normal. En particular, hay que incluirla en el cortafuegos[1]. Usa como guía la versión servidor de http://man-es.debianchile.org/cortafuego.html.
Edita /etc/network/if-pre-up.d/firewall y agrega en la cadena INPUT,
# VPN $IPTABLES -A INPUT -i tun0 -s 10.9.8.1 -j ACCEPT
en el cliente y,
# VPN $IPTABLES -A INPUT -i tun0 -s 10.9.8.2 -j ACCEPT
en el servidor.
Es también necesario abrir el puerto 1194 UDP en la interfase externa. Edita /etc/network/if-up.d/firewall y agrega,
# VPN $IPTABLES -A pqtes-udp-permitidos -p UDP -m state --state NEW --dport 1194 -j ACCEPT
El cortafuegos se puede reiniciar con,
# export IFACE=lo ; /etc/network/if-pre-up.d/firewall ; export IFACE=eth0 ; /etc/network/if-up.d/firewall
Eso es todo. Ahora prueba conexiones desde el cliente hacia el servidor remoto, por ejemplo,
$ ping -c3 10.9.8.1 PING 10.9.8.1 (10.9.8.1) 56(84) bytes of data. 64 bytes from 10.9.8.1: icmp_seq=1 ttl=64 time=25.2 ms 64 bytes from 10.9.8.1: icmp_seq=2 ttl=64 time=28.2 ms 64 bytes from 10.9.8.1: icmp_seq=3 ttl=64 time=27.0 ms --- 10.9.8.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2005ms rtt min/avg/max/mdev = 25.274/26.834/28.206/1.204 ms
De aquí en adelante establece cualquier conexión privada con el IP 10.9.8.1.
Escritorio Remoto
En el servidor remoto, como root, corre gdmsetup y habilita el servidor XDMCP,
De aqui en adelante el escritorio remoto estará habilitado y accesible al cliente bajo el número IP 10.9.8.1.
En el login GDM del cliente, en vez de ingresar a una cuenta local, marca "Actions" y luego, "Run XDMCP chooser". Agrega el IP (10.9.8.1) del servidor remoto. Marca el escritorio e ingresa a la cuenta remota.