2- Configuración de RoadWarrior

Imagen de Epe

[b]Si usted ya configuró y probó algún tipo de conexión openVPN anteriormente, por ejemplo la conexión host a host, no olvide borrar los contenidos del directorio /etc/openvpn especialmente los archivos .key y .conf puesto que nos pueden molestar o confundir para la siguiente configuración.[/b]

[b]Consideraciones preliminares[/b]
En el servidor de openvpn no te olvides de activar el ip_forwarding.

Edita /etc/sysctl.conf y cambia ip_forwarding a 1 (está normalmente en 0).

Entonces ejecuta:

sysctl -p

De olvidar lo anterior la vpn no hará ping hacia la red interna!

Ahora lo lento:
En el servidor openvpn necesitamos crear una serie de claves y certificados iniciales, para poder autenticar y encriptar la información que transitará desde/hacia el servidor/clientes

Contamos con una serie de scripts en el directorio /usr/share/openvpn*/easy-rsa los cuales nos ayudarán mucho a ejecutar ésta tarea inicial.

Como primer paso, sugerimos copiar ese directorio (easy-rsa) hacia /etc/openvpn y cambiarnos a ese directorio, al final copiaremos un archivo que en centos-6 ha cambiado de nombre, quizá en versiones futuras este paso de copiar openssh-1.0.0.cnf con otro nombre no sea necesario:

cp -a /usr/share/easy-rsa /etc/openvpn
cd /etc/openvpn/easy-rsa/2.0
cp openssl-1.0.0.cnf openssl.cnf

[b]Creando el CA[/b]

Una vez dentro de éste directorio procedemos a ejecutar los siguientes pasos:
. vars
sh clean-all
sh 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

En éste último paso se nos pedirá una serie de información sobre nuestra red/empresa que debemos llenar lo más fielmente posible:

Generating a 1024 bit RSA private key
...........................................................................................
.................................++++++.....................++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [KG]:EC
State or Province Name (full name) [NA]:Pichincha
Locality Name (eg, city) [BISHKEK]:Quito
Organization Name (eg, company) [OpenVPN-TEST]:EcuaLinux
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:ecualinux
Email Address [me@myhost.mydomain]:info@ecualinux.com

[b]La variable que debemos explícitamente llenar (no dejar en blanco!) es: Common Name.[/b]

[b]Generación del certificado y de la clave de encriptación para el servidor[/b]
Siguiente a la generación del Certificado de autoridad, procedemos a crear el certificado del servidor y de su clave de encriptación:

sh build-key-server server
Generating a 1024 bit RSA private key
......................++++++
.........................++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [KG]:EC
State or Province Name (full name) [NA]:Pichincha
Locality Name (eg, city) [BISHKEK]:Quito
Organization Name (eg, company) [OpenVPN-TEST]:EcuaLinux
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:server
Email Address [me@myhost.mydomain]:info@ecualinux.com
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'EC'
stateOrProvinceName :PRINTABLE:'Pichincha'
localityName :PRINTABLE:'Quito'
organizationName :PRINTABLE:'EcuaLinux'
organizationalUnitName:PRINTABLE:'IT'
commonName :PRINTABLE:'server'
emailAddress :IA5STRING:'info@ecualinux.com'
The stateOrProvinceName field needed to be the same in the CA certificate
(Pichincha) and the request (Pichincha)

En éste paso, también se nos pedirá nuevamente información sobre el certificado propio del servidor. En éste caso por favor, escoger en Common Name un nombre diferente al anteriormente escogido. En mi caso escogí: server

Este paso nos generará dos archivos en el directorio [i]/etc/openvpn/easy-rsa/2.0/keys/[/i] que se copiarán dentro del mismo servidor hacia /etc/openvpn, ellos son:

[i]* server.crt
* server.key[/i]

[b]Generando certificados y claves privadas para los clientes[/b]

Cada cliente debe tener su propio certificado y clave de seguridad, para cara cliente que tengamos deberemos repetir el siguiente paso. [b]Los archivos obtenidos debemos copiarlos hacia el directorio /etc/openvpn/ de los clientes![/b]

En el caso de que nuestros clientes sean en windows, debemos copiarlos hacia c:\program files\openvpn\

Para generar el certificado y claves privadas ejecutamos en nuestro servidor, dentro del directorio [i]/etc/openvpn/easy-rsa/2.0/[/i]

sh build-key client1

Generating a 1024 bit RSA private key

...............................................................................................++++++

......++++++

writing new private key to 'client1.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [KG]:EC

State or Province Name (full name) [NA]:Pichincha

Locality Name (eg, city) [BISHKEK]:Quito

Organization Name (eg, company) [OpenVPN-TEST]:EcuaLinux

Organizational Unit Name (eg, section) []:IT

Common Name (eg, your name or your server's hostname) []:client1

Email Address [me@myhost.mydomain]:info@ecualinux.com

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

Using configuration from /etc/openvpn/easy-rsa/2.0/openssl.cnf

Check that the request matches the signature

Signature ok

The Subject's Distinguished Name is as follows

countryName :PRINTABLE:'EC'

stateOrProvinceName :PRINTABLE:'Pichincha'

localityName :PRINTABLE:'Quito'

organizationName :PRINTABLE:'EcuaLinux'

organizationalUnitName:PRINTABLE:'IT'

commonName :PRINTABLE:'client1'

emailAddress :IA5STRING:'info@ecualinux.com'

Certificate is to be certified until Nov 24 05:25:40 2016 GMT (3650 days)

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

En el ejemplo anterior generamos la clave y el certificado [b]para un cliente llamado client1.[/b]

[b]Debemos hacer notar que al ejecutar el programa sh build-key, le pasamos como parámetro el nombre del cliente (client1 en el ejemplo anterior) el cual debe ser diferente para cada cliente. En el common name ponemos el nombre del cliente (client1 en éste ejemplo) tal y como le pasamos de parámetro.[/b]

Se pueden generar tantas claves como sean necesarias:


sh build-key client2

sh build-key client3

Esto nos generará dos claves y certificados más, para client2 y client3, por favor, en common name debemos poner [b]client2[/b] ó [b]client3[/b] para cada caso.
Generando parámetros de Diffie-Hellman

[b]El parámetro de Diffie-Hellman debemos generarlo así:[/b]

sh build-dh

Generating DH parameters, 1024 bit long safe prime, generator 2

This is going to take a long time

......................+...............................+...........

[b]Archivos a copiar al servidor[/b]

Hacia el directorio /etc/openvpn del servidor copiamos los siguientes archivos:

* ca.crt
* ca.key
* server.key
* server.crt
* dh1024.pem

Estos archivos están presentes en: [i]/etc/openvpn/easy-rsa/2.0/keys/[/i]

[b]Archivos a copiar al cliente[/b]

Hacia el directorio /etc/openvpn de cada cliente copiamos los siguientes archivos:

* ca.crt
* client[b]X[/b].crt
* client[b]X[/b].key

Tenga en cuenta que [b]X[/b] es un número que se corresponde con el cliente (para el cliente 2 sería: client2.crt y client2.key por ejemplo).

[b]Estos 3 archivos deben copiarse de forma segura hacia el cliente, quizá mediante scp o algún medio magnético seguro. No deben enviarse por mail puesto que contienen la clave (.key) de encriptación del cliente!
[/b]

Estos archivos están presentes en: [i]/etc/openvpn/easy-rsa/2.0/keys/[/i] [b]del servidor[/b].

Para la configuración en modo roadwarrior las configuraciones del cliente y el servidor varían un poco:

[b]Configuración del servidor:[/b]

El archivo [i]/etc/openvpn/server.conf[/i] quedará así:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
#Direcciones que se asignaran a los
#clientes, el server es .1
server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

#Ruta para que los clientes alcancen la red local del server (56.0/24)
push "route 192.168.56.0 255.255.255.0"

keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 4

Como podemos ver, hay nuevos parámetros, los más importantes son:

* un [b]push[/b] de la ruta hacia la red local interna del servidor. Esa ruta estádica permitirá que el road warrior vea a las máquinas de la red interna
* [b]server[/b]: Indica el rango de direcciones que se asignará a los clientes que se conecten, deben ser direcciones no similares a las de la red local.

[b]Configuración del cliente:[/b]

En el caso del cliente, así quedaría el archivo de configuración:


client
dev tun
proto udp
remote 201.219.41.38 1194
resolv-retry infinite
nobind
#Las dos siguientes opciones no van en windows
user nobody
group nobody

persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 4

Las configuraciones más interesantes son:

* [b]Client[/b]: indica que algunas configuraciones las tomará del servidor.
* [b]nobind[/b]: que no actúe como servidor, que solamente vaya como cliente.
* [b]Recordar que cert y key deben ser únicas para cada cliente
[/b]

Si se fijan, el orden en que van los parámetros no importa mucho, he notado que el openvpn es muy noble en el cómo pones los parámetros, le da igual (mayormente).

Comentarios

Esta respuesta está genial

Imagen de iknaxio

Esta respuesta está genial jajaja, yo me guie este par de días con este tutorial pero no me había dado el tiempo de leer todos los comentarios. La verdad que hay algunos que quieren que les den pescando, les den de comer en la boca y que les den lavando los platos jajaja

"Transporta un puñado de tierra todos los días y construirás una montaña" - Confucio
floss.iknaxio.net

Revocando Certificados

Hola

Ya configure mi vpn, segui al pie de la letra el manual y perfecto, pero ahora me surgio el problema de quitar una vpn entre el servidor y un cliente, asi que use revoke-full, pero no funciono, me mostro esta salida

[root@xxxxx 2.0]# ./revoke-full nuevokey
Using configuration from /etc/openvpn/2.0/openssl.cnf
error on line 282 of config file '/etc/openvpn/2.0/openssl.cnf'
6892:error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:629:line 282
Using configuration from /etc/openvpn/2.0/openssl.cnf
error on line 282 of config file '/etc/openvpn/2.0/openssl.cnf'
6893:error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:629:line 282
cat: crl.pem: No existe el fichero o el directorio
nuevokey.crt: /C=CO/ST=Bogota/L=Bogota/O=xxxxx/OU=xxxxx/CN=nuevokey/emailAddress=info@xxxxx.net
error 3 at 0 depth lookup:unable to get certificate CRL

asi que cree a mano el fichero crl.pem

y me dio lo siguiente:

[root@xxxxx 2.0]# ./revoke-full nuevokey
Using configuration from /etc/openvpn/2.0/openssl.cnf
error on line 282 of config file '/etc/openvpn/2.0/openssl.cnf'
6930:error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:629:line 282
Using configuration from /etc/openvpn/2.0/openssl.cnf
error on line 282 of config file '/etc/openvpn/2.0/openssl.cnf'
6931:error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:629:line 282
nuevokey.crt: /C=CO/ST=Bogota/L=Bogota/O=xxxxx/OU=xxxx/CN=nuevokey/emailAddress=info@xxxxxx.net
error 3 at 0 depth lookup:unable to get certificate CRL

De esta manera no puedo lograr que la vpn entre este cliente y el servidor deje de funcionar.
Ok por favor una ayudita, se les agradecera mucho....

Saludos.

no he revocado un

Imagen de Epe

no he revocado un certificado, pero supongo no has ejecutado previamente:

. vars

esto te crea el ambiente de trabajo, será por eso?

Saludos
epe
--
EcuaLinux.com
Ecuador: +(593) 9 9246504, +(593) 2 334 2795
USA: +1 305 359 4495, España: +34 91 7617884


Saludos
epe

EcuaLinux.com

+(593) 9 9924 6504

Servicios en Software Libre

Ayuda con OpenVPN

:) :? hola amigos, desea una ayuda. He configurado openvpn en un centops y el servicio levanta normal me conecto desde un cliente windows utilizando openvpn gui
y se conecta de lo mas normal, el inconveniente es que cuando trato de hacer ping a la red interna solo una ip me responde
el resto de pc de la lan q tambien esta conectadas no responden, me podria indicar a k se puede deber este inconveniente.

######### configuracion de mi server.conf ###################3

ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
#=========================================
server 10.10.10.0 255.255.255.0
ifconfig-pool-persist ipp.txt
#
push "route 192.168.0.0 255.255.255.0"
#
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 4

############### configuracion de mi cliente en windows ######################

client
dev tun
proto udp
######################################
remote ip del servidor 1194
resolv-retry infinite
nobind
######################################
persist-key
persist-tun
ca ca.crt
cert cliente1.crt
key cliente1.key
comp-lzo
verb 4

Muchas Gracias por su ayuda.

Atte,

Juan k

conectando roadwarrior

Imagen de eulises

Buenos días

Realicé todos los pasos del post

Me da un error cuando intenté levantar el servicio openvpn: /etc/init.d/openvpn restart
Stopping virtual private network daemon:.
Starting virtual private network daemon: server(FAILED).

Actualmente todo lo estoy realizando en un servidor Debian ETCH

La otra duda es como realizo las conexiones desde la red pública, me explico si existe un comando para conectarme a la red privada...

La red LAN poseé firewall y NAT (ya la regla está permitida para la VPN)

gracias de antemano.

Saludos

Configuración de RoadWarrior

Imagen de eulises

ok amigos el primer problema que me dió consiste en que tenía que cambiar de grupo /etc/openvpn/ a nobody, esto lo vi fue en el archio de config de server.conf, de esta manera fue que pude levantar el serv de openvpn (no se si esta es la mejor opción)...

Con respecto a lo demás no puedo conectarme al puerto 1194 de mi servidor (no poseo ningún firewall en el mismo) solo seguí los pasos de la configuración del Shorewall...

ahora bien deseo hacer el tunel entre mi cliente con ip pública a mi server openvpn (que ya está Nateado) en mi red privada

¿Cual sería el siguiente paso?

Gracias

Saludos...

Configuración de RoadWarrior

Imagen de eulises

Amigos ya realicé la conexión desde mi cliente con ip publica a mi servidor VPN:

#openvpn --config /etc/openvpn/server.conf

Fri Oct 26 13:50:06 2007 us=85516 auth_user_pass_verify_script_via_file = DISA BLED
Fri Oct 26 13:50:06 2007 us=85562 client = ENABLED
Fri Oct 26 13:50:06 2007 us=85598 pull = ENABLED
Fri Oct 26 13:50:06 2007 us=85627 auth_user_pass_file = '[UNDEF]'
Fri Oct 26 13:50:06 2007 us=85657 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [E POLL] built on Jan 21 2007
Fri Oct 26 13:50:06 2007 us=85812 IMPORTANT: OpenVPN's default port number is no w 1194, based on an official port number assignment by IANA. OpenVPN 2.0-beta16 and earlier used 5000 as the default port.
Fri Oct 26 13:50:06 2007 us=85847 WARNING: No server certificate verification me thod has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Fri Oct 26 13:50:06 2007 us=86023 Cannot load certificate file client1.crt: erro r:02001002:system library:fopen:No such file or directory: error:20074002:BIO ro utines:FILE_CTRL:system lib: error:140AD002:SSL routines:SSL_CTX_use_certificate _file:system lib
Fri Oct 26 13:50:06 2007 us=86058 Exiting

y se presenta este error con el certificado. La Verdad es que yo ya generé los certificados y los coloqué en el cliente y en el servidor...

Sí saben algo al respecto les agradezco su ayuda...

Saludos...

Configuración de RoadWarrior

Imagen de eulises

Ya resolví este ultimo error con:

en el archivo de server.conf

en el CA , crt y key, habia que colocarle la ruta absoluta del archivo de conf

aun me quedan unos detallitos, pero sigo investigando

saludos...

roadwarrior

Imagen de eulises

Buenas tardes Epe

Tengo un problemita con la conexión de openvpn roadwarrior, realicé todos los pasos puntuales de tu post, pero me ha dado unos errores despues que trato de conectar al cliente con el server Openvpn que está detrás de un NAT.

cuando le doy al cliente: #openvpn --config /etc/openvpn/server.conf

el mismo comienza a validar la conexión de echo me muestra los datos de la LAN privada 192.168.30.0 255.255.255.0, lo que me indica que le llega al servidor, lo que falta es que autentique, pero da este problema que no he podido resolver:

/sbin/route add -net 192.168.30.0 netmask 255.255.255.0 gw 10.8.0.5 SIOCADDRT: El fichero existe
ERROR: Linux route add command failed: shell command exited with error status:7

he buscado mucho sobre este error y no he conseguido algo concreto...

si sabes algo sobre este error

muchas gracias

Server y client DEBIAN ETCH,

Páginas