RoadWarrior en OpenVPN (Debian Etch)
Una configuración RoadWarrior es aquella en la cual se tiene una red privada con uno o varios clientes que accesarán a la red como si fueran parte de ella (arquitectura host-to-net). El presente tutorial explica como configurar correctamente el openvpn 2.0.9-4 en un Debian Etch que ya tiene configurado Shorewall. Tomé como base el tutorial de la configuración para CentOS y lo modifiqué de acuerdo a lo que yo quería.
Primero instalamos el openvpn:
apt-get install openvpn
El openvpn viene con un directorio llamado easy-rsa, que tiene scripts bastante útiles para la configuración. Este directorio lo copiamos a /etc/openvpn
cp -a /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn
Ahora nos vamos a ese directorio recién creado y ejecutamos los siguientes comandos
. vars
./clean-all
./build-ca
Con ellos lo que haremos es:
* Inicializar variables de ambiente para poder trabajar con los siguientes scripts de shell para generar las variables
* Inicializamos el directorio de las claves (borrando potenciales archivos viejos)
* build-ca: procedemos a generar el certificado CA
Nos pedirá datos sobre la organización. No poner cualquier cosa ya que las preguntas se van a repetir más adelante y debemos estar seguros de lo que habíamos escrito. En Common Name debemos poner cualquier cosa pero ponerla
Una vez creado el Certificate Authority (CA), creamos la llave del Servidor
./build-key-server servidor
En Common Name ponemos Servidor u otro nombre pero que sea diferente al anterior
Con este paso se crearon dos archivos (servidor.crt y servidor.key). Estos archivos debemos copiarlos al directorio /etc/openvpn
Ahora generamos las claves de los clientes. Debemos ejecutar los mismos para cada cliente:
./build-key cliente1
Esto genera los archivos cliente1.key (llave) y cliente1.crt (certificado)
Creamos los parámetros Diffie-Hellman:
./build-dh
Ahora todos los archivos creados menos los de los clientes deben ser copiados a /etc/openvpn/, es decir ca.crt, ca.key, server.crt, server.key y dh1024.pem
Ahora pasamos los archivos necesarios a los clientes. Estos archivos son clientex.crt, clientex.key y ca.crt, se los podemos pasar vía sftp o scp, pero siempre tratando de que sea seguro.
La configuración del servidor la ponemos en /etc/openvpn/server.conf
port 1194
proto udp
dev tun
persist-tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem#Direcciones que se asignaran a los
#clientes, el server es .1
server 10.1.1.0 255.255.255.0ifconfig-pool-persist ipp.txt
#Ruta para que los clientes alcancen la red local del server (1.0/24)
push “route 192.168.1.0 255.255.255.0″#Para que los clientes se visualicen entre ellos
#Debe ir junto con la opción routeback en el shorewall
client-to-clientkeepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 4
La red local de la VPN es 192.168.1.0/24 y la red de la VPN es 10.1.1.0/24. El usuario remoto, si está detrás de un NAT debe tener una dirección local no perteneciente a la red de la VPN.
La configuración de los clientes sería así:
client
dev tun
proto udp
remote host.dominio.com
float #debido a que la IP de arriba es dinamica
resolv-retry infinite
nobind
persist-key
persist-tun
ca “D:\\Archivos de programa\\OpenVPN\\ca.crt” #Tener cuidado con el doble backslash (\\)
cert “D:\\Archivos de programa\\OpenVPN\\clientx.crt”
key “D:\\Archivos de programa\\OpenVPN\\clientx.key”
comp-lzo
verb 4
Ahora solo falta inicializar en los clientes, para ello es necesario el siguiente código:
openvpn –config “ruta_cliente.ovpn”
En este caso no son necesarios los \\, con uno solo basta.
Con las líneas de arriba se arma la VPN, ahora solo falta modificar el firewall para que esa nueva interfaz sea procesada y sus paquetes sean aceptados. Uso shorewall como frontend de iptables, y las modificaciones necesarias son las siguientes:
/etc/shorewall/zones (agregamos la nueva zona llamada road)
#ZONE TYPE OPTIONS IN OUT
# OPTIONS OPTIONS
road ipv4
/etc/shorewall/interfaces
#ZONE INTERFACE BROADCAST OPTIONS
road tun+ detect routeback
El Broadcast y las opciones se ponen siempre y cuando se pueda accesar desde la red a los usuarios de la VPN
/etc/shorewall/tunnels
#TYPE ZONE GATEWAY GATEWAY ZONE
openvpnserver:1194 net 0.0.0.0/0
openvpnserver puede ser reemplazado por openvpn, aunque no se recomienda debido a que este último no soporta a clientes detrás de un NAT.
/etc/shorewall/policy
#SOURCE DESTINATION POLICY
road loc ACCEPT
Aceptamos todo el tráfico proveniente de la VPN
Reiniciamos el shorewall e iniciamos el openvpn y todo debería funcionar.




Tio.. muy buena, ahora falta instalar el bugzilla jejeje
Comment by Hernan — August 30, 2007 @ 2:07 am
Es posible utilizar esta configuración en Ubuntu 7.10
Comment by juan carlos niebles — October 25, 2007 @ 9:17 pm
Hola juan carlos,
Asi es, funciona sin problemas
Comment by RouterMaN — October 25, 2007 @ 10:01 pm
hola,
tengo configurado 1 servidor linux con openvpn y 1 cliente windows, ahora necesito configurar 2 clientes windows, pero al ejecutar openvpn, a los otros clientes les asigna la misma ip del primero? que puedo hacer? gracias.
Comment by Louis — November 19, 2007 @ 11:30 pm
tengo una duda… y creo que es tipica, tengo mi servidor ubunto y mi cliente windows xp, solo puedo hacer ping al servidor vpn y a su interface del servidor vpn que da a la red local, pero mas a dentro a cualquier host no me llega. desde el servidor vpn puedo hacer ping a cualquiera de las redes… porfa iluminenme!!!
Comment by kron — December 19, 2007 @ 9:31 am
Hola, tienes que dar permisos en tu firewall, para que puedan accesar a tu red local desde las interfaces tun+
Saludos,
Diego
Comment by RouterMaN — December 19, 2007 @ 9:40 am
Hola, estupendo artículo. Muy sencillo explicado todo, gracias. A mi me surge una duda; yo le asigno un pool dhcp de la VPN a varios clientes para que accedan a una red, con lo que solo puedo diferenciarlos mediante el certificado que he creado. Sabes si hay alguna forma de limitar el acceso con iptables según el certificado que se haya expedido? Es que solo veo la forma de limitarlo por IP, pero a los clientes se les asigna una ip aleatoria del pool y no puedo controlarlo ahi, con lo que lo único que me queda es el certificado…
Gracias en cualquier caso!
alberto.
Comment by albertillo — January 23, 2008 @ 1:10 pm
Tengo el mismo problema que Kron, solo puedo hacer ping al server y a la interface que da hacia la LAN, cuando intento un ping hacia una ip interna de la LAN, me da respuesta desde la ip remota del server diciendome que “el destino esta inaccesible”, si el problema es con el firewall, qué es lo que se puede hacer, manejo Shorewall(es decir, se tiene que definir algo en rules o en policy?), pero le he intentado varias cosas y no logro acceder a mi LAN. Y otra duda, una vez que logre hacer ping a la LAN, ya podré examinar mi red como si estuviera localmente?(es decir, si voy a poder ver el segmento de red donde está el server desde Mis sitios de red de win…o tend´re que instalar alguna herramienta mas) Mi server está en Debian Etch con Openvpn+Shorewall y en Windows manejo el OpenVPN GUI, Muchas gracias por anticipado a quien me pueda ayudar!!, he estado en ésto desde hace como 1 semana, he googleado, pero pues no encuentro referencia alguna, tuve suerte de encontrar este foro!!!Gracias de antemano!!
Saludos desde México
Comment by Rafael — January 24, 2008 @ 7:21 pm
Que tal albertillo, si de algo te sirve, creo que hay un comando que se usa para revocar los certificados, creo que si quieres restringir el acceso creo si se puede hacer con los certificados, es algo así como si estuvieras creando los certificados, solo que creo se usa la palabra revoke y se agrega una línea extra en el archivo de configuración de tu server… Puedes encontrar una explicación más amplia en
Comment by Rafael — January 24, 2008 @ 7:49 pm
Perdón, creo que no salió el link, es el siguiente http://tuxjm.net/docs/openvpn-como4slack/index.html es en la sección 20. Revocando Certificados…espero te sirva!!..Saludos!!
Comment by Rafael — January 24, 2008 @ 7:50 pm
Otra pregunta RouterMaN, en mi server una vez corriendo el Openvpn, en Dispositivos de Red me agrega “Interfaz desconocido (tun0)”, solo que a diferencia de eth0 y eth1, al darle clic en Configurar, en la ficha General(de las 3 que tiene General/Módem/Opciones) aparece Desactivado, mi duda es si la VPN funciona solo con el archivo de configuración server.conf, o hay que activar ésta interfaz con los datos que se solicitan…espero me respondas pronto, Gracias!!!
Comment by Rafael — January 25, 2008 @ 7:56 pm
Muchas Gracias por este Tutorial Me fue de mucha utilidad.
Att: Zirux
Comment by Zirux — August 6, 2008 @ 5:34 pm
Hola muy buen manuel pero el problema que tengo es q cuando se asigna una direccion ip a cliente no puedo ver la red lan que es ta dentras del server?? que puede ser no tengo ningun firewall
Comment by juan carlos — June 19, 2009 @ 5:02 pm
Hola,buen articulo.He conseguido configurar OpenVPN en debian Etch,con clientes windows ,estos se conectan,pero no responden a el ping a la interface virtual del server,(la configuracion por defecto es 10.8.0.0),es decir el cliente se conecta pero no me da respuesta a el server vpn.El firewal esta desactivado,agradeceria mucho alguna sugerencia.
Comment by Renato — September 12, 2009 @ 6:50 pm