Antes de configurar una VPN mediante OpenVPN en Vyatta tenemos que crear unos certificados con los que podremos conectar dos máquinas mediante OpenVPN. Es posible establecer una conexión punto a punto entre dos equipos Vyatta con el modo site-to-site o conectar uno o varios PCs a un equipo Vyatta con el modo server-client.
Aunque también hay que decir aquí que existen otras formas menos seguras de configurar una VPN en Vyatta con o sin OpenVPN.


Con la instalación de Vyatta se copia el script de generación de certificados X-509 easy-rsa de OpenVPN que podemos usar para crear nuestros certificados y poder configurar nuestra VPN con OpenVPN.
Este script se encuentra en la ruta /usr/share/doc/openvpn/examples/easy-rsa/2.0/ podemos copiarlo a otro lugar o usarlo directamente en esa ruta.


Una vez localizada la carpeta hay que hacer ejecutables los archivos contenidos, lo podemos hacer desde consola:

vyatta@vyatta:~$ sudo chmod –R 755 /usr/share/doc/openvpn/examples/easy-rsa/2.0/


O desde WinSCP haciendo clic derecho sobre la carpeta 2.o y marcando que asigne permisos 755 de forma recursiva a todos los ficheros contenidos en ella:


permisos easy-rsa


Después hay que modificar el archivo vars que está en esa misma ruta, lo abrimos desde consola con vim o desde WinSCP para hacerlo algo más cómodo, nos vamos al final del archivo, completamos los siguientes parámetros y guardamos los cambios:


	export KEY_COUNTRY="ES"
	export KEY_PROVINCE="Jaen"
	export KEY_CITY="Jaen"
	export KEY_ORG="openredes"
	export KEY_EMAIL="info@openredes.com"


Después nos situamos desde consola en la carpeta que contiene los ficheros:


vyatta@vyatta:~$ cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/


Y ejecutamos los siguientes comandos:
Para inicializar la PKI:


vyatta@vyatta:~$ source ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys


Ahora llevamos a cabo la acción que nos advierte la salida del comando anterior, con la que se eliminan certificados previos y se crea la carpeta de destino en la que se irán almacenando los certificados que vayamos creando:


vyatta@vyatta:~$ ./clean-all


Creamos nuestra propia clave privada RSA basada en los valores de los campos que introdujimos al inicio en el fichero vars:


vyatta@vyatta:~$ ./build-ca
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) [ES]:
State or Province Name (full name) [Jaen]:
Locality Name (eg, city) [Jaen]:
Organization Name (eg, company) [openredes]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:vyatta
Email Address [info@openredes.com]:


Creamos el fichero de intercambio de Diffie Hellman, necesario para el lado del servidor:


vyatta@vyatta:~$ ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.............................................................................+...........................................................
.....+...................................+........................+....................................+.................................


Con el siguiente paso creamos un certificado para el servidor y lo firmamos con nuestro CA creado al principio:


vyatta@vyatta:~$ ./build-key-server vyatta.openredes.com
Generating a 1024 bit RSA private key
............++++++
............++++++
writing new private key to ' vyatta.openredes.com.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) [ES]:
State or Province Name (full name) [Jaen]:
Locality Name (eg, city) [Jaen]:
Organization Name (eg, company) [openredes]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:vyatta
Email Address [info@openredes.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: (aquí podemos introducir un password complejo que se añadirá al certificado del servidor)*
An optional company name []:
Using configuration from /usr/share/doc/openvpn/examples/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:'ES'
stateOrProvinceName   : PRINTABLE:'Jaen'
localityName          : PRINTABLE:'Jaen'
organizationName      : PRINTABLE:'openredes'
commonName            : PRINTABLE:'vyatta'
emailAddress          :IA5STRING:'info@openredes.com'
Certificate is to be certified until Dec 19 15:32:11 2020 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


* Este password tendremos que usarlo tanto para el certificado del servidor como para el del cliente.


Creamos ahora y firmamos con nuestro CA el certificado para los clientes, teniendo en cuenta que hay que introducir el mismo password que el que le pusimos al certificado del servidor:


vyatta@vyatta:~$ ./build-key cliente1
Generating a 1024 bit RSA private key
...........++++++
.........................++....................................++++++
writing new private key to 'cliente1.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) [ES]:
State or Province Name (full name) [Jaen]:
Locality Name (eg, city) [Jaen]:
Organization Name (eg, company) [openredes]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:cliente1
Email Address [info@openredes.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/doc/openvpn/examples/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:'ES'
stateOrProvinceName   : PRINTABLE:'Jaen'
localityName          : PRINTABLE:'Jaen'
organizationName      : PRINTABLE:'openredes'
commonName            : PRINTABLE:'vyatta'
emailAddress          :IA5STRING:'info@openredes.com'
Certificate is to be certified until Dec 19 15:35:18 2020 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


Con el paso previo podemos crear tantos certificados de cliente como queramos.
Tras esto tendremos almacenados todos los certificados y claves creadas en la ruta /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys.

A la hora de crear los certificados según la topología ejemplo hay que tener en cuenta que en openredesR1 vamos a configurar dos VPNs de acceso remoto o remote access (una para el acceso remoto de los jefes a la oficina y que puedan trabajar desde donde quieran como si estuvieran en ella; y otra para el acceso remoto de los comerciales para que puedan acceder a servicios de la empresa estén donde estén) y una VPN extremo a extremo, site-to-site o STS (que usaremos para comunicar de forma segura las redes privadas de las dos oficinas), teniendo en cuenta que para las tres VPNs la máquina Vyatta llamada openredesR1 hará de servidor.
De la misma forma, en openredesR2 vamos a configurar una sola VPN, que será la VPN extremo a extremo (STS) que conectara las dos oficinas de forma segura, en este caso la VPN STS de openredesR2 claramente ha de configurarse en modo cliente.

Entonces, en resumen, en cuanto a creación de certificados se refiere, vamos a necesitar:

  • Una sola Autoridad de Certificación (Certification Authority) para toda la topología ejemplo y que será el archivo ca.crt creado a partir del script ./build-ca.
  • Un solo fichero de intercambio de Diffie Hellman para toda la topología ejemplo y necesario en cada VPN que actúe como servidor.
  • Un fichero de clave de servidor llamado empresaR1 que crearemos con el comando ./build-key-server empresaR1 y que habrá que introducir en la máquina openredesR1.
  • Cinco ficheros de clave de cliente llamados ra-jefe1, ra-jefe2, ra-jefe3, ra-jefe4, ra-jefe5 que crearemos con el comando ./build-key ra-jefeX y que serán necesarios para insertarlos en los portátiles de los jefes cuando configuremos sus túneles para que puedan acceder como cliente de VPN.
  • Cinco ficheros de clave de cliente llamados ra-cial1, ra-cial2, ra-cial3, ra-cial4, ra-cial5 que crearemos con el comando ./build-key ra-cialX y que serán necesarios para insertarlos en los portátiles de los comerciales cuando configuremos sus túneles para que puedan acceder como cliente de VPN.
  • Un fichero de clave de cliente llamado stsempresaR2 que crearemos nuevamente con el comando ./build-key stsempresaR2 y que habrá que introducirlo en la máquina openredesR2



Una vez generados todos los certificados necesarios tenemos que distribuirlos correctamente antes de poder iniciar la configuración de las VPNs necesarias.







openvpn



19/12/2010