Vamos a configurar un servidor vpn ubuntu con openvpn, con clientes ubuntu y windows. Los clientes podrán acceder a los recursos tanto del servidor como de los equipos de la LAN del servidor; además su configuración será tipo RoadWarrior, donde los clientes podrán acceder también unos a otros.
En primer lugar instalamos el paquete openvpn:
apt-get install openvpnSeguidamente crearemos los certificados del servidor y los clientes. Por comodidad copiamos los scripts para generar certificados al directorio de openvpn:
mkdir /etc/openvpn/easy-rsacp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsaA continuación editamos el fichero vars, para personalizar los parámetros que deseemos:
export KEY_COUNTRY="ES"export KEY_PROVINCE="03"export KEY_CITY="Alicante"export KEY_ORG="Empre S.A."export KEY_EMAIL="correo@electroni.co"Y ahora para generar los certificados, desde el directorio easy-rsa, ejecutamos los comandos:
. ./vars./clean-all./build-caAl crear los parámetros, por defecto tomará los datos que hemos introducido en el fichero vars, el único campo que debemos especificar cuando nos pregunte el script es Common Name, donde pondremos el nombre que queramos darle a la vpn.
Primero creamos el certificado y la clave privada para el servidor:
./build-key-server serverDe nuevo tomaremos los parámetros por defecto, excepto en Common Name, donde introduciremos "server". Debemos contestar yes a las preguntas: "Sign the certificate?" y "1 out of 1 certificate request certified, commit?".
Ahora creamos los certificados y llaves para los clientes, por ejemplo:
./build-key client1./build-key client2...etc
Y por último para generar los parámetros de Diffie Hellman ejecutamos:
./build-dhYa tenemos las llaves generadas, para el servidor necesitamos los ficheros:
ca.crtca.keyserver.crtserver.keydh1024.pemLos copiamos a /etc/openvpn o al directorio de nuestra elección.
A cada cliente debemos hacerle llegar de forma segura los ficheros:
ca.crtclient1.crtclient1.keyVamos a crear los ficheros de configuración, podemos encontrar ficheros de ejemplo en /usr/share/doc/openvpn/examples/sample_config_files, los cuales podemos copiar a /etc/openvpn y modificar, o crear uno nuevo directamente. El fichero de ejemplo está bastante bien documentado con comentarios.
En el servidor creamos o modificamos el fichero /etc/openvpn/server.conf con el contenido:
port 1194proto udpdev tunpersist-tunca /etc/openvpn/ca.crtcert /etc/openvpn/server.crtkey /etc/openvpn/server.keydh /etc/openvpn/dh1024.pem#rango de direcciones que se asignará a los clientes, el server es .1server 10.99.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt#ruta para que los clientes alcancen la lan del serverpush "route 192.168.0.0 255.255.255.0"client-to-clientkeepalive 10 120comp-lzo#asegurarse que existan el usuario y grupo utilizadosuser nobodygroup nogrouppersist-keypersist-tunstatus openvpn-status.loglog-append /var/log/openvpn.logverb 4Y reiniciamos el servicio para que los cambios tomen efecto:
/etc/init.d/openvpn restartPara que podamos acceder desde internet debemos redirigir el puerto 1194 del router al del equipo del servidor vpn.
Para poder acceder a internet a través de la VPN debemos realizar un par de cambios en el servidor.
En el fichero /etc/sysctl.conf
Debemos añadir o modificar la línea:
net.ipv4.ip_forward=1Y debemos crear en iptables la regla:
iptables -t nat -A POSTROUTING -s 10.99.0.0/24 -o eth0 -j MASQUERADEPara que esta regla se ejecute cada vez que reiniciemos el servidor, vamos a salvarla en un fichero y hacer que se cargue en el arranque.
Si es necesario creamos el directorio /var/lib/iptables
Comprobamos que están activas las reglas deseadas con:
iptables -t nat -n -LLas volcamos a un fichero con:
iptables-save > /var/lib/iptables/iptablesReglasAhora crearemos un script en el directorio:
/etc/network/if-up.dLo llamaremos por ejemplo inicioIptables y el contenido será el siguiente:
#!/bin/sh/sbin/iptables-restore < /var/lib/iptables/iptablesReglasHay que darle permisos de ejecución al fichero:
chmod a+x inicioIptablesCon esto en cada inicio del sistema, se cargaran las reglas para iptables.
Ya tenemos listo el servidor.
Para configurar un cliente ubuntu, instalamos el paquete openvpn:
apt-get install openvpnCopiamos al directorio /etc/openvpn los certificados:
ca.crtclient1.crtclient1.keyY creamos el fichero /etc/openvpn/cliente.conf con el contenido:
clientdev tunproto udpremote IP_PUBLICA_SERVIDOR_VPN 1194resolv-retry infinitenobind#asegurarse que existan el usuario y grupo utilizadosuser nobodygroup nogroupredirect-gateway def1persist-keypersist-tunca /etc/openvpn/ca.crtcert /etc/openvpn/client1.crtkey /etc/openvpn/client1.keycomp-lzoverb 4En los clientes, seguramente no nos interesará que la vpn se arranque en el inicio del sistema, por lo que editamos el fichero /etc/default/openvpn y modificamos o agregamos la línea:
AUTOSTART="none"Y para iniciar manualmente la vpn, ejecutaremos:
openvpn /etc/openvpn/cliente.conf &Y para detenerla mataremos el proceso.
También podemos configurar el network manager de gnome para establecer la conexión desde el entorno gráfico.
Insatalamos el plugin para conexiones openvpn:
apt-get install network-manager-openvpn(Nota: después de instalar el plugin, es conveniente reiniciar el sistema.)
Y en el menú del network manager seleccionamos "Conexiones VPN" y luego "Configurar VPN", le damos al botón de "Añadir", seleccionamos tipo de conexión "OpenVPN" y rellenamos los campos:
Nombre de conexión: el que queramos.
Pasarela: la ip pública del servidor vpn.
Tipo: certificados (TLS)
Certificado de usuario, Certificado CA, Clave privada: seleccionamos la ruta correspondiente.
Y en "Avanzado" marcamos "Usar compresión LZO".
Guardamos los cambios y ya podemos utilizar el network manager para conectar y desconectar a la vpn.
Para configurar un cliente windows xp, descargamos el programa cliente de
http://openvpn.se/download.html, instalándolo con las opciones por defecto.
A través del grupo de programas que crea en el menú de Inicio de windows, podremos acceder a la carpeta de configuración del programa, en la que copiaremos los certificados:
ca.crtclient1.crtclient1.keyY creamos el fichero client.ovpn con el contenido:
client dev tun proto udp remote IP_PUBLICA_SERVIDOR_VPN 1194 resolv-retry infinite nobind redirect-gateway def1 persist-key
persist-tun
ca ca.crt cert client1.crt key client1.key comp-lzo verb 4A través del icono que coloca el programa en la barra de tareas podremos conectar y desconectar la conexión vpn.
No he probado con windows vista, pero parece ser que es necesario instalar y ejecutar el programa con permisos de administrador para que pueda funcionar.
Tanto en ubuntu como en windows, cuando nos conectemos a la vpn, podremos acceder al servidor, los equipos de la LAN y a los otros clientes, y navegar por internet (con la ip pública del servidor).
Si queremos crear certificados para más clientes, debemos tener ca.crt y ca.key en el directorio keys y ejecutar desde el directorio easy-rsa los comandos:
source ./vars./build-key clientXObteniendo los nuevos certificados.
Actualización:
Para configurar clientes con windows vista en ediciones de 64 bits, descargamos el cliente
OpenVPN_2.1_rc20 (o más reciente), y lo instalamos como administrador, nos creará un icono en el escritorio para lanzar el terminal, que también deberemos lanzar como administrador.