Instalar y Configurar OpenVPN

23
Cómo instalar y configurar OpenVPN OpenVPN es una implementacion de VPN SSL la cual usa las extensiones OSI layer 2 ó 3 para asegurar redes la cual usa los protocolos SSL/TLS, soporta diferentes medios de autenticacion como certificados, smart cards, y/o usuarios/contraseñas, y permite politicas de control de acceso para usaurios o grupos usando reglas de firewall aplicadas a las interfaces virtuales de la VPN. OpenVPN 2.0 permite multiples clientes conectar a un solo servidor (proceso) OpenVPN sobre un simple puerto TCP o UDP. Para seguir este documento se requieren conocimientos basicos de redes TCP/IP como , direcciones IP, DNS, netmasks, subnets, IP routing, routers, interfaces de red, LANs, gateways, y reglas de firewall. Formas de trabajo del OpenVPN Aunque OpenVPN es muy sencillo de configurar e instalar, podemos dividir su forma de trabajo en 3 tipos: 1. Host a Host : Es el método más simple, nos permite encriptar la comunicación entre dos PC las cuales deberán solamente tener conexión; es decir: ambas PC deben poderse enviar paquetes directamente ya sea porque estén conectadas en la misma red local, o porque ambas estén conectadas a la internet y sean alcanzables entre sí. 2. Road Warrior : Es una de las formas más utilizadas y solicitadas por los estudiantes. Es el permitir que una máquina de alguien que esté fuera de nuestra red (de forma temporal o permanente) pueda comunicarse con el servidor OpenVPN de nuestra red y una vez autenticado pueda entrar a ver y acceder los recursos de nuestra red local. En verdad es un caso especial de la conexión Red a Red que a continuación mencionamos: 3. Red a Red : Uno de los métodos más usados. Mediante ésta forma dos redes separadas en el espacio pueden comunicarse como si estuvieran unidas por un cable virtual (de ahi la V de VPN); la comunicación entre ambas redes viajará encriptada una vez salgan de los servidores de openvpn y hasta que lleguen a su otro extremo. Ventajas del uso de OpenVPN

Transcript of Instalar y Configurar OpenVPN

Page 1: Instalar y Configurar OpenVPN

Cómo instalar y configurar OpenVPN

OpenVPN es una implementacion de VPN SSL la cual usa las extensiones OSI layer 2 ó 3 para asegurar redes la cual usa los protocolos SSL/TLS, soporta diferentes medios de autenticacion como certificados, smart cards, y/o usuarios/contraseñas, y permite politicas de control de acceso para usaurios o grupos usando reglas de firewall aplicadas a las interfaces virtuales de la VPN. OpenVPN 2.0 permite multiples clientes conectar a un solo servidor (proceso) OpenVPN sobre un simple puerto TCP o UDP.

Para seguir este documento se requieren conocimientos basicos de redes TCP/IP como , direcciones IP, DNS, netmasks, subnets, IP routing, routers, interfaces de red, LANs, gateways, y reglas de firewall.Formas de trabajo del OpenVPN

Aunque OpenVPN es muy sencillo de configurar e instalar, podemos dividir su forma de trabajo en 3 tipos:

1. Host a Host: Es el método más simple, nos permite encriptar la comunicación entre dos PC las cuales deberán solamente tener conexión; es decir: ambas PC deben poderse enviar paquetes directamente ya sea porque estén conectadas en la misma red local, o porque ambas estén conectadas a la internet y sean alcanzables entre sí.2. Road Warrior: Es una de las formas más utilizadas y solicitadas por los estudiantes. Es el permitir que una máquina de alguien que esté fuera de nuestra red (de forma temporal o permanente) pueda comunicarse con el servidor OpenVPN de nuestra red y una vez autenticado pueda entrar a ver y acceder los recursos de nuestra red local. En verdad es un caso especial de la conexión Red a Red que a continuación mencionamos:3. Red a Red: Uno de los métodos más usados. Mediante ésta forma dos redes separadas en el espacio pueden comunicarse como si estuvieran unidas por un cable virtual (de ahi la V de VPN); la comunicación entre ambas redes viajará encriptada una vez salgan de los servidores de openvpn y hasta que lleguen a su otro extremo.

Ventajas del uso de OpenVPN

OpenVPN es un sistema de creación y uso de vpn muy modesto y fácil de utilizar que nos permite implementar vpn que de otras formas sería muy molesto o dificultoso de realizar.

Las implementaciones IPSec, aunque supuestamente mejor elaboradas y soportadas por el kernel de linux, son muy difíciles de implementar en máquinas con Windows. En el caso de OpenVPN existen clientes y servidores tanto para linux como para windows y su implementación para redes o sistemas multiplataformas es muy sencilla de llevar a cabo.

Page 2: Instalar y Configurar OpenVPN

Instalación del OpenVPN

Instalar OpenVPN en nuestro linux CentOS es realmente fácil. Solamente debemos tener instalado el EPEL y emitir el comando:

yum install openvpn

Después de unos minutos, tendremos listo el paquete de OpenVPN

Una vez instalado, podemos proceder a la creación de las claves de encriptación en el servidor y cliente.

Activando OpenVPN

Aunque todavía no es el momento de activarlo, cuando hayamos configurado el openvpn podemos activarlo con:

service openvpn startchkconfig openvpn on

Con estos dos simples comandos podemos arrancar el openvpn en ambos extremos.

Si necesitáramos reiniciarlo (para que lea de nuevo la configuración por ejemplo) podríamos hacerlo con:

service openvpn restart

1- Conexión Host a Host con OpenVPNGeneración de clave de encriptación.

En el caso de una conexión host a host, podemos sencillamente generar una clave compartida en el servidor, y copiarla hacia el cliente. Con esta clave se encriptarían los datos sin mayor problema o inconveniente:

openvpn --genkey --secret /etc/openvpn/secret.key

Este archivo "secret.key" tiene que ser copiado hacia el directorio /etc/openvpn del cliente y del servidor.

scp /etc/openvpn/secret.key IPDELCLIENTE:/etc/openvpn/

Configuración Host a Host

En la configuración host a host, lo que lograremos es que el intercambio de paquetes entre dos máquinas se realice de forma encriptada.

Para esto le indicaremos en el archivo de configuración que al arrancar openvpn se creará automáticamente una interfaz virtual con una IP privada en cada extremo:* 10.8.0.1 para el servidor* 10.8.0.2 para el cliente

Y cualquier paquete que circule entre el cliente y el servidor vía esas direcciones IP, viajará encriptado.

Page 3: Instalar y Configurar OpenVPN

Configuración del servidor

El archivo /etc/openvpn/server.conf lo podemos dejar de la siguiente forma:

# dispositivo de tuneldev tun

# se define como: # ifconfig ipdelserver ipdelcliente# sugiero no cambiarleifconfig 10.8.0.1 10.8.0.2

# Clave del servidorsecret /etc/openvpn/secret.key

#puertoport 1194

#usuario bajo el cual ejecutaremosuser nobodygroup nobody

# opciones, comprimir con lzo, ping cada 15 segs, verbose 1 (bajo)comp-lzoping 15verb 4

En este caso lo fundamental es que estamos indicándole al servidor que escuche en su puerto usuario (1194/udp) y que la IP que tomará la interfaz de vpn (tun) será 10.8.0.1 y le dará al cliente la 10.8.0.2

Configuración del cliente

Antes de configurar el cliente, en este caso el cliente 1, debemos traer del servidor el archivo /etc/openvpn/secret.key hacia el directorio /etc/openvpn del cliente. Esto lo hicimos más arriba en este mismo documento.

El archivo /etc/openvpn/client1.conf quedaría como sigue:

# IP publica del servidor, poner IP real de su servidor!remote 200.100.50.25

# puertoport 1194

# dispositivo tuneldev tun

# usamos ifconfig ipdelcliente ipdelservidortun-mtu 1500ifconfig 10.8.0.2 10.8.0.1

# clave privada, client1.key para éste ejemplo, recuerde cada usuario debe#tener su propia .key generada. El ejemplo de win esta comentado.#secret "c:\program files\company branded vpn\config\key.txt"secret /etc/openvpn/secret.key

# ping cada 10 segs

Page 4: Instalar y Configurar OpenVPN

ping 10

# compresión lzocomp-lzo

# verbose moderado, callar mas de 10 mensajes igualesverb 4mute 10

Probando el enlaceTanto en el cliente como en el servidor ponemos:

service openvpn startchkconfig --level 2345 openvpn on

Podemos verificar en /var/log/messages que todo haya ido ok.

Una vez levantemos los demonios en ambos lados, podemos hacer ping hacia la interfaz tun (10.8.0.1 en el servidor ó 10.8.0.2 en el cliente):

desde el servidor:

ping 10.8.0.2

desde el cliente:

ping 10.8.0.1

Si el ping responde, todo está bien. Sino, sugerimos revisar en /var/log/messages para verificar qué fue mal.

1.5- Cómo evadir a un firewall muy restrictivo, usando OpenVPN host-hostBueno, bueno, aqui estoy en una empresa que tienen un firewall que aparenta ser bien restrictivo:1- no me deja chatear2- no me deja conectarme a muchísimos sitios3- no puedo ni siquiera conectarme a mi servidor de openvpn host-host

Hum, me puse a pensar:a ver, qué tal si le cambio el puerto al servidor de openvpn mío de forma tal que evito el que me bloqueen por el simple hecho de usar el puerto 1194? entonces en aquel servidor instalo un squid y por esa vía me conecto a navegar y a chatear?

La idea, genial! Te adelanto que funcionó, pero me tomó unos minutos.

1- afortunadamente puedo conectarme por ssh al servidor, así que no tuve que usar conexiones alternativas ni pedir ayuda a la gente en mi empresa, lo hice via ssh, me conecté al servidor remoto mío2- comencé a cambiar puertos, caramba TODOS me los tienen bloqueados.

Pero la realidad es que siempre tienen que permitir algunos. El puerto 80 por ejemplo, pero ese no, porque ese lo tengo en uso por el apache. Pero pensando en el 80 me acordé del 443, el que usa el mod_ssl, y no lo

Page 5: Instalar y Configurar OpenVPN

uso en ese servidor! así que eliminé el mod_ssl y puse al openvpn a escuchar por ahí. Casi nadie puede bloquearte el 443 sin que reciba quejas!

Trabajo en el servidor:borrando mod_ssl en el servidor:

rpm -e mod_sslservice httpd restart

listo, ya liberé el 443, ahora voy a cambiar la configuración del server.conf de openvpn con el fin de hacerme pasar como una conexión TCP a un servidor ssl:

vi /etc/openvpn/server.conf

la linea que dice port 1194 la eliminoEntonces al final agrego esto:

port 443proto tcp-server

Por favor tampoco olvides comentar las dos líneas del usuario y grupo:

#user nobody#group nobody

pues para trabajar con puertos bajos hace falta ser root.

reinicia openvpn

service openvpn restart

Trabajo en el clienteen el cliente edito el client.conf:

vi /etc/openvpn/client.conf

y también comento la línea que se refiere al puerto 1194Entonces al final pongo:

port 443proto tcp-client

y reinicio el servicio:

service openvpn restart

la vpn debe conectarse felizmente. Esto lo he probado hasta en Cuba, en el caso de Cuba recuerdo que tuve que usar un equipo con el puerto 80 sin usar y ahí puse a escuchar el openvpn.

Volvemos al servidor, instalación de squid:Bueno, aquí regreso al servidor, e instalo el squid:

yum install squidservice squid startchkconfig squid on

Page 6: Instalar y Configurar OpenVPN

En el squid.conf debes autorizar la red 10.8.0.0/24:en mi caso, andaba de apuro, así que busqué, descomenté y modifiqué dos líneas que decían así:

acl our_networks src 10.8.0.0/24http_access allow our_networksservice squid reload

Y ya configuré mi firefox para que se conectara a 10.8.0.1 en el puerto 3128 y navegué!! bien, ya no tenía restricciones.

También configuré mi chat para que usara el mismo proxy pero para el caso de ciertos protocolos del chat, tuve que autorizar el uso de conexiones encriptadas en ciertos puertos, en el squid.conf modifiqué la línea SSL_ports para que dijera:

#esta linea normalmente sólo tiene el puerto 443#los otros dos puertos son para chatacl SSL_ports port 443 5050 1863

2- Configuración de RoadWarriorSi 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.

Consideraciones preliminaresEn 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:

cp -a /usr/share/openvpn*/easy-rsa /etc/openvpncd /etc/openvpn/easy-rsa/2.0

Page 7: Instalar y Configurar OpenVPN

Creando el CA

Una vez dentro de éste directorio procedemos a ejecutar los siguientes pasos:

. varssh clean-allsh 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 incorporatedinto 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 blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [KG]:ECState or Province Name (full name) [NA]:PichinchaLocality Name (eg, city) [BISHKEK]:QuitoOrganization Name (eg, company) [OpenVPN-TEST]:EcuaLinuxOrganizational Unit Name (eg, section) []:ITCommon Name (eg, your name or your server's hostname) []:ecualinuxEmail Address [[email protected]]:[email protected]

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

Generación del certificado y de la clave de encriptación para el servidorSiguiente 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 serverGenerating 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 incorporatedinto 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 blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [KG]:ECState or Province Name (full name) [NA]:Pichincha

Page 8: Instalar y Configurar OpenVPN

Locality Name (eg, city) [BISHKEK]:QuitoOrganization Name (eg, company) [OpenVPN-TEST]:EcuaLinuxOrganizational Unit Name (eg, section) []:ITCommon Name (eg, your name or your server's hostname) []:server Email Address [[email protected]]:[email protected] 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/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:'[email protected]' 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 /etc/openvpn/easy-rsa/keys/ que se copiarán dentro del mismo servidor hacia /etc/openvpn, ellos son:

* server.crt* server.key

Generando certificados y claves privadas para los clientes

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

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 /etc/openvpn/easy-rsa/

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.

Page 9: Instalar y Configurar OpenVPN

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 [[email protected]]:[email protected]

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/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:'[email protected]'

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 para un cliente llamado client1.

Page 10: Instalar y Configurar OpenVPN

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.

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 client2 ó client3 para cada caso.Generando parámetros de Diffie-Hellman

El parámetro de Diffie-Hellman debemos generarlo así:

sh build-dh

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

This is going to take a long time

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

Archivos a copiar al servidor

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: /etc/openvpn/easy-rsa/keys

Archivos a copiar al cliente

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

* ca.crt* clientX.crt* clientX.key

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

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!

Estos archivos están presentes en: /etc/openvpn/easy-rsa/keys del servidor.

Page 11: Instalar y Configurar OpenVPN

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

Configuración del servidor:

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

port 1194proto udpdev tunca ca.crtcert server.crtkey server.keydh dh1024.pem#Direcciones que se asignaran a los#clientes, el server es .1server 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 120comp-lzouser nobodygroup nobodypersist-keypersist-tunstatus openvpn-status.logverb 4

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

* un push 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* server: 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.

Configuración del cliente:

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

clientdev tunproto udpremote 201.219.41.38 1194resolv-retry infinitenobind#Las dos siguientes opciones no van en windowsuser nobodygroup nobody

persist-keypersist-tunca ca.crtcert client1.crtkey client1.keycomp-lzoverb 4

Page 12: Instalar y Configurar OpenVPN

Las configuraciones más interesantes son:

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

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).

3- Configuración de OpenVPN Red a Red

Lo mejor de la configuración red-red es que es casi idéntica a la de roadwarrior.

Esto es El Road Warrior está conectado a una red, pero él es un cliente sólo, de ésta forma:

LAN (192.168.1.0/24) --|LINUX|-- INTERNET ---- RoadWarrior (en cualquier lugar).

El road warrior, con la configuración antes explicada puede perfectamente ver las máquinas de la LAN (192.168.1.0/24)

Pero qué tal que pusiéramos una red detrás del roadwarrior?, quedaría algo así:

LAN1 (192.168.1.0/24) --|LINUX1|-- INTERNET ----|Linux2|---- (LAN2: 192.168.2.0/24)

Oh, el Road warrior es en realidad otro linux.

Linux1: Está conectado a la red 192.168.1.0/24

Linux2: Está conectado a la red 192.168.2.0/24

Fíjense, es IMPERIOSO que ambas redes tengan diferente numeración, es decir, que sean dos redes IPs diferentes, en éste caso lo son.

Mediante OpenVPN podemos hacer que ambas redes puedan verse. Es decir, por ejemplo, que podamos hacer ping entre máquinas de la LAN1 y de la LAN2 (por ejemplo: 192.168.1.6 haciendo ping a 192.168.2.78 sin inconveniente alguno).

Configuración inicial:

Como bien indiqué anteriormente, es una configuración muy parecida al roadwarrior. El RoadWarrior sería Linux2 y el servidor sería Linux1.

Hay que configurar entonces linux1 para ser el servidor, con todas las de la ley anteriormente explicado

Hay que configurar linux2 para que actúe como un cliente (road warrior) con todas las de la ley anteriormente explicados.

Adiciones a la configuración:

Page 13: Instalar y Configurar OpenVPN

Asumamos que el ejemplo anterior aplica. Es decir, la subred del cliente (linux2) es la 192.168.2.0/24 el cliente le llamaremos client2 (de acuerdo a los certificados y claves generados como road warrior).

Cambios en el servidor:

Hay que crear el directorio ccd:

mkdir /etc/openvpn/ccd

Dentro de éste directorio creamos un archivo con el nombre del cliente (client2) que contiene la siguiente linea:

iroute 192.168.2.0 255.255.255.0

Aquí lo que le indicamos al servidor es que al conectarse client2 (este cliente remoto que es un linux con una red detrás) que por favor cree una ruta hacia la red 192.168.2.0/24 que vaya hacia ese cliente remoto. Con eso logramos que las máquinas de la red del servidor puedan ver a las del cliente.

Después hay que agregar esta linea a /etc/openvpn/server.conf

client-config-dir ccdroute 192.168.2.0 255.255.255.0client-to-clientpush "route 192.168.2.0 255.255.255.0"

La directiva client-config-dir permitirá al servidor buscar dentro del directorio ccd configuraciones especiales según el cliente (en este caso client2).

¿Por qué tantas veces directivas de route? Sinceramente: no lo entiendo pero así es.

Tenga cuidado, en este segundo caso no la agregamos en ccd/client2 sino en el archivo de configuración del servidor (server.conf en mi caso)

Cambios en el clienteEn el cliente simplemente tenemos que poner en 1 el ip_forwarding, esto se hace tal y como se realizó en el servidor: editando el archivo /etc/sysctl.conf y después ejecutando:

sysctl -p

debe salirte:net.ipv4.ip_forward = 1

Ya, con esto las máquinas de una red podrán ver a las de la otra red.

Si tuvieras varias redes remotas (client2 y client3 por ejemplo) entonces debes crear un archivo llamado client3 dentro de ccd con la configuración propia de esa red. Y agregar las lineas de las rutas (route y push "route...") en el server.conf

No te olvides de reiniciar los clientes.

Me funciona.. pero si notas algo que falta o que sobre, bienvenido el comentario.

4- OpenVPN y su relación con iptables

Page 14: Instalar y Configurar OpenVPN

Configurarlo es fácil, lo que me tomó y lo juro una madrugada fue el hecho de relacionarlo con iptables.

Si tienes un iptables medio jodón, se te arma un lío. Mira que perdí tiempo... la idea es que hay que habilitar el tráfico hacia las interfaces TUN/TAP pues sino no se conectan las máquinas.

El mejor síntoma es que hayas seguido todas mis indicaciones aqui y no te trabaje.. por supuesto te recomiendo siempre mirar dentro de los logs: /var/log/messages de ambos extremos pues puede que el problema que tengas sea otro (typos o errores al escribir).

Ahora, si estás seguro de que la openvpn está bien, te sugiero bajar el iptables (flush) en ambos extremos, para que verifiques si funciona el openvpn sin el firewall.

Si te funcionó con el iptables abajo, entonces debes agregar estas líneas en el servidor (quizá en el cliente también):

iptables -A INPUT -i tun+ -j ACCEPTiptables -A FORWARD -i tun+ -j ACCEPTiptables -A FORWARD -o tun+ -j ACCEPTiptables -A OUTPUT -o tun+ -j ACCEPTiptables -A INPUT -i tap+ -j ACCEPTiptables -A FORWARD -i tap+ -j ACCEPTiptables -A INPUT -p udp --dport 1194 -j ACCEPT

Con ellas lo que logras es abrir el puerto 1194/UDP para que entre la conexión de los clientes. Y además acceptar conexiones tun/tap. Aunque realmente con las tun basta pues son las que usamos en estos ejemplos.

Un firewall que ya tengo preparado para esto es el rc.firewall modificado por mi, aqui lo tienes listo para ser usado: http://cursos.ernestoperez.com/rc.firewall

Busca la palabra openvpn dentro de este script ahi están comentadas las líneas, sólo tienes que descomentarlas y reiniciarlo.

5- OpenVPN y windows

OpenVPN puede trabajar tanto como cliente cuanto como servidor en máquinas windows y linux. Es decir puede quedar cualquier combinación: windows windows, windows linux, linux windows o la mejor: linux-linux.

Te sugiero que comiences linux-linux pues tenemos más herramientas para trabajar y verificar. Yo lo que hice fue, una vez configurado bien un cliente en linux, moví los archivos de /etc/openvpn hacia la máquina de windows y listo me trabajó.

En el caso de windows los archivos de configuración deben ir en c:\program files\openvpn\config

Te sugiero que una vez muevas los archivos de configuración de cliente linux al cliente windows, borres estos archivos del cliente linux.

Recuerda que los archivos de configuración y claves deben ser particulares para cada cliente, no debes usarlos en dos clientes, por eso pido que los borres del cliente linux.

Page 15: Instalar y Configurar OpenVPN

En el caso de windows hay dos parámetros de configuración que no aplican y no se pueden poner en las configuraciones son:user y group

Ellos dos permiten degradar los privilegios a un usuario diferente del de administrador, pero en windows esto no se puede hacer, openvpn corre como administrador.

6- OpenVPN detrás de un proxy

Bueno, me topé con un cliente que por alguna razón propia de ellos (seguridad) no tienen acceso directo a internet (NAT) sino que todo sale a través de un proxy squid.

En este cliente yo estaba casi 8 horas al día durante dos semanas (por eso no posteé las semanas anteriores y perdí tantos puntos bodi.. por los bodis precisamente).

En todo caso, yo necesitaba poder hacer una vpn hacia fuera pues necesitaba ssh, imap y algunas cosillas para el trabajo de mi negocio... y me desesperaba no tener conexión. Esto significaba que tenía queleer correos por webmail (no es de mi agrado) y que no podía hacer ssh sino me conectaba por alegro pero alegro me machetea 4ctvs el minuto por una conexión.....

solución? Usar openvpn a través del proxy.

Para esto debemos tener en cuenta las siguientes consideraciones:1- openvpn usará el protocolo tcp2- openvpn hará un connect al puerto que le digamos

Sobre este punto 2 es el problema. Los proxies squid permiten solamente hacer connect a los puertos 563 y 443 (miren dentro de la ACL ésta:

acl SSL_ports port 443 563

Así que el primer día me salió todo mal, lo dejé intentando hacer connect al 1194 y el proxy no me dejaba. Así que como no podía convencerles de abrir el 1194, opté por usar lo que brindaban, el 563, yo tenía el 563 sin uso en ese servidor remoto así que le dí uso.

Configuración del servidor para aceptar conexiones desde un proxy:Al servidor hay que indicarle que la conexión será en tcp:

proto tcpport 563

y hay que comentarle estas lineas:

#user nobody#group nobody

Por qué comentarlas? Porque el puerto que usaremos será el 563, es un puerto bajo, menor a 1024 y requiere de acceso de root por eso no se puede disminuir privilegios

Atención: Recuerda abrir el puerto 563/tcp en tu iptables!!!

Page 16: Instalar y Configurar OpenVPN

Configuración del cliente para hacer conexiones a través de un proxy:

En el el archivo .conf del cliente agregar:

#reintentar hasta que se pueda, y conectarse al servidor proxy: 192.168.1.1 en el puerto 3128http-proxy-retryhttp-proxy 192.168.1.1 3128

En el cliente además hay que indicarle que el servidor de destino corre en el puerto 563 y en tcp.

proto tcpport 563

y hay que comentarle estas lineas:

#user nobody#group nobody

Aqui cruzas los dedos, reinicias el cliente y el servidor y debe funcionarte.

Los problemas tipicos son relacionados con los privilegios de root (dejar el user y el group) y con el puerto que el squid esté dispuesto a aceptar, sugiero el 563 pues tipicamente lo permiten.

7- Fallas típicas en conexiones openvpn

No estoy diciendo que son precisamente las que tengas, pero aqui van algunas burradas típicas que cometemos cuando usamos openvpn, principalmente en red a red.

1- En red-red el nombre del archivo dentro de ccd tiene que ser igual al nombre del common name generado para el .conf del cliente (por ejemplo ccd/client1 y en el common name al generar client1.crt debería haber puesto client1)

Esta es la mejor, me tuvo la mañana de hoy Sábado sentado. Hasta la próstata me duele de tanto tiempo sentado: por el amor de Alá... el common name hazlo coincidir con el parámetro que uses cuando pones "sh build-key client1".

Este cliente en cuestión ejecutó "sh build-key client1" (sin las comillas) y en el common name había puesto server2...

Esto hace que la ruta para el red a red no funcionara porque se buscaba en ccd/ el archivo llamado server2, pues dentro de ccd se pone un archivo con el nombre del common name.

2- no tengas varios firewalls encendidos!!, esto es tipico, apaga cualquier otro firewall y solamente deja el tuyo, esto es tipico (de nuevo).

Si estás usando rc.firewall, entonces mejor apaga el firewall iptables, pues se entromete. Lo mismo para cualquier otro firewall

service iptables stopchkconfig iptables off

Page 17: Instalar y Configurar OpenVPN

chkconfig ip6tables offservice ip6tables stop

Me gusta el arnos-iptables-firewall, aqui puedes encontrar el rpm http://centos5.centos.ec

3- La ruta por defecto de ambas redes trata de que sea el servidor de openvpn, verificalo con route print. Si el servidor openvpn no es el mismo servidor que sirve de gateway para tu red, debes crear una ruta estática en el servidor de gateway para enviar los paquetes con destino a la red remota hacia el servidor openvpn.

4- ¿Están encendidos ambos servidores de openvpn?

5- En los servidores aparece una ruta estática? route -n, verificar que haya una ruta hacia la red LAN contraria que vaya por la interfaz tun0, por ejemplo así:

192.168.2.0     10.8.0.2        255.255.255.0   UG    0      0        0 tun0

6- Apaga el NetworkManager.. que haces usando ambiente gráfico en un servidor? Apaga el servicio messagebus, apaga el avahi-daemon!! Vete a modo texto.. apaga cualquier otro servicio que no utilices por si acaso.

service NetworkManager stopchkconfig NetworkManager offservice avahi-daemon stopchkconfig avahi-daemon offservice messagebus stopchkconfig messagebus off

7- ¿Está bien puesta la hora de la máquina? Esta fue otra que me hizo perder, tiempo. Los certificados se generan desde una fecha/hora hasta otra fecha/hora (aunque no definas esto manualmente)... la fecha/hora de inicio es la hora del servidor.. si la tienes mal en uno de ambos servidores, entonces el cert no tomará hasta que la hroa no se cumpla.. si el drift entre ambos es muy grande, entonces te tomará años. Actualiza la hora con ntpdate antes de crear los certs

8- Usando arno-iptables-firewall con openvpn

el firewall de arno es bien simple de utilizar y muy útil, realmente sí. Lo único complejo que le he visto es el nombre del servicio:

arno-iptables-firewall

Si usas otro firewall y estás desesperado porque no te funciona openvpn, puedes descartar problemas de firewall instalando este simple firewall.. y una vez que ya logres configurar y probar openvpn, puedes regresar a tu firewall si deseas.

Lo he usado para instalar conexiones openvpn y es excelente. Me permite hacer NAT y además por supuesto la OpenVPN.

Instalacion

Bajar el rpm de nuestro repo.

Page 18: Instalar y Configurar OpenVPN

Escoger y bajar la ultima versión que tengas. Si puedes bájalo con wget.

En mi caso hice:

wget http://centos5.centos.ec/i386/arno-iptables-firewall-1.8.8o-1.noarch.rpmrpm -Uvh arno-iptables-firewall-1.8.8o-1.noarch.rpm

ConfiguraciónEditar el archivo:

vi /etc/arno-iptables-firewall/firewall.conf

En mi caso supondré que mi interfaz externa es eth0 y la interna es eth1 con la red LAN 192.168.0.0/24

Buscar y cambiar las siguientes lineas (por favor no dejarles el signo de # al inicio!)

EXT_IF="eth0"EXT_IF_DHCP_IP=0INT_IF="eth1"INTERNAL_NET="192.168.0.0/24"NAT=1TRUSTED_IF="tun+"# esta es opcional, sólo si tienes transparent proxyHTTP_PROXY_PORT="3128" #esta del 22 es opcional, para que puedas ssh a ambos servidores)OPEN_TCP="22" OPEN_UDP="1194"

Nada más, arrancas el servicio de arno-iptables-firewall:

chkconfig arno-iptables-firewall onservice arno-iptables-firewall start

Te debe funcionar el NAT y la VPN por el puerto 1194/UDP.. asi como el ssh por el puerto 22/TCP