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,

Screenshot-Login Window Preferences.png

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.

[1] http://man-es.debianchile.org/cortafuego.html

OpenVPN (última edición 2010-01-22 04:15:09 efectuada por RicardoYanez)