Pruebas OpenVPN

De Ardemans Wiki
Saltar a: navegación, buscar

Introducción

Apuntes sobre la instalación de OpenVPN de mi casa, para poder hacer el chorra y poder conectarme desde cualquier sitio a las cosas de casa, que en realidad no hay nada especial...

Instalación de OpenVPN

La instalación la voy a realizar en mi raspberryPI que ya está haciendo de DHCP y DNS para la casa. Como decía en la página de Ovpn, si lo tenemos disponible desde paquetería mejor instalarlo desde ahí, y eso es lo que he hecho

apt-get install openvpn

Certificados

Para la conexión de clientes vamos a hacerlo mediante certificados. He leido que hay métodos alternativos de autenticacion, y con autenticación por usuario y contraseña, pero de momento no me he querido complicar.

Como ya tengo mi propia Entidad Certificadora (CA) he decidido que voy a usar esta misma, pero se puede hacer mucho más fácil usando la utilidad easy-rsa que viene con el propio paquete de openVPN. Se puede leer más sobre esto aqui

CA Subordinada

Ya tenía una CA (Ardemans), para la VPN me he creado una SubCa para crear tanto el certificado de servidor como los certificados de clientes. Para crea la SubCA he seguido los pasos de aqui

Para mantener esta SubCA a parte, he creado la estructura de directorios de una CA dentro del directorio /etc/openvpn/ArdemansVPN_CA

El fichero de configuración de esta SubCA lo he copiado de la CA Ardemans que ya tenía de antes, pero he tenido que hacer algunos cambios, en cuanto al directorio raiz donde está la entidad certificadora y tambien en el CERT y la KEY resultado de la generacion de la SubCA.

También he tenido que cambiar de la configuracion de la CA las ubicaciones de las authorityInfoAccess y crlDistributionPoints, para que apunten a una nueva URL, ya que este tendrás las suyas propias.

http://www.ardemans.com/ssl/ArdemansVPN_CA.crl
http://www.ardemans.com/ssl/ArdemansVPN_CA.crt

Con esta subCA he creado un certificado para servidor, siguiendo los pasos de la página que he enlazado antes, y lo he dejado como server.key y server.crt en el directorio /etc/openvpn

Para los certificados de cliente he tenido que hacer alguna moficación mas en el fichero de configuración de la CA, y es que no había extensión definida para crear certificados de cliente, así que he añadido una propia:

[ client_ext ]
nsCertType                      = client
nsComment                       = "Certificado generado con OpenSSL"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer

authorityInfoAccess             = @aia_sect
crlDistributionPoints           = URI:http://www.ardemans.com/ssl/ArdemansVPN_CA.crl

Es importante que el certificado sea de tipo cliente, ya que si intentamos conectarnos con otro certificado (por ejemplo de servidor) nos aparecerá un error en el log de openvpn diciendo que el certificado cliente no es apropiado.


Cadena de certificacion

Recalco esta parte, que también me dió problemas, y es que usando esta subCA para trabajar con OpenVPN me ha obligado a que en el fichero donde esta la clave pública de la CA tenemos que poner la cadena completa, es decir, que deberá estar en el mismo fichero la clave pública tanto de ArdemansCA como de ArdemansVPN_CA


Configuración

Lo recomendado es empezar por copiar los ficheros de ejemplo que ya vienen en el paquete de openvpn:

/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz

y lo he descomprimido.

Se puede configurar de dos formas, en modo Bridge o en modo Router. No he tenido tiempo para estudiarlo a fondo, pero creo que lo que a mi me conviene es el modo router, que abre un puerto UDP (por defecto el 1194) y así puedo crear una regla de NAT en mi router de fibra para acceder hasta la raspberry. De la otra forma no tengo claro que tendría que hacerlo y me lo apunto para cuando tenga más tiempo.

Además, el fichero de ejemplo ya viene con las configuraciones por defecto para que sea en modo router, y prácticamente no he tenido que personalizar nada, y he intentando dejar lo maximo posible el fichero sin tocar.

SSL

Realmente no he cambiado nada, pero si apuntar que he generado los ficheros server.key y server.crt y son los que vamos a usar. Lo que si he cambiado es el parámetro ca para hacer referencia al fichero cachain.crt, y ahi he metido la cadena de certificación de mi SubCA

Diffie hellman

Esto lo tengo por estudiar. Dentro del propio fichero de conf dice como crear este fichero.

openssl dhparam -out dh1024.pem 1024

Rutas y DNS en cliente

Para añadir una ruta en el cliente, y que así este pueda acceder a máquinas de la red interna de la raspberry (192.168.1.X) he añadido esta entrada

push "route 192.168.1.0 255.255.255.0"

NOTA: Mi red interna no es muy recomendada para una VPN, ya que muchas redes internas de otros sitios desde donde conecte un cliente van a tener ese mismo direccionamiento, y seguramente entrará en conflicto

Para añadir la configuracion de DNS he puesto la siguiente línea:

push "dhcp-option DNS 10.8.0.1"