6.14.2010

openvpn on rhel5 | memoria

Este no es precisamente un post sobre un servicio que dejo en produccion, este es un backup de los archivos de configuracion de un servidor openvpn (user to site) que implemente tiempo atras. Pero si espero me sirva de memoria para una nueva oportunidad:
Se tiene el paquete openvpn :
[root@svrvpn01 openvpn]# rpm -q openvpn
openvpn-2.1.1-2.1.el5.al
Lo instale desde los depositos de mi amigo Joel 
[AL-Server]
name=AL Server para Enterprise Linux 5
baseurl=http://www.alcancelibre.org/al/server/5/i386/
gpgcheck=0
gpgkey=http://www.alcancelibre.org/al/AL-RPM-KEY~
Estimo que las demas dependencias los instalo usando tambien mi repo local construido a partir de mi dvd.

cp /usr/share/openvpn/easy-rsa/2.0/openssl.cnf ./
cp /usr/share/openvpn/easy-rsa/2.0/whichopensslcnf ./
cp /usr/share/openvpn/easy-rsa/2.0/pkitool ./
cp /usr/share/openvpn/easy-rsa/2.0/vars ./


Recuerdo claramente (aunque no tengo la guia que use a la mano) que todo lo configurable para este servicio esta bajo /etc/openvpn/ ;  por ejemplo el archivo de configuracion /etc/openvpn/servidorvpn-udp-1194.conf tiene:
port 1194
proto udp
dev tun
#---- Seccion de llaves -----
ca keys/ca.crt
cert keys/viru.com.pe.crt
key keys/viru.com.pe.key
dh keys/dh1024.pem
#----------------------------
server 192.168.37.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status-servidorvpn-udp-1194.log
verb 3

Note que el segmento de red para clientes remotos es 192.168.192.0 255.255.255.0 
En /etc/openvpn/vars asegurar que al final se tenga las lineas :
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="PE"
export KEY_PROVINCE="LI"
export KEY_CITY="Trujillo"
export KEY_ORG="viru.com.pe"
export KEY_EMAIL="jgrados@viru.com.pe"
Luego cargar variables de entorno para estos datos con:
source /etc/openvpn/./vars
Ahora creamos los certificados para el usuario juaninf :
sh /usr/share/openvpn/easy-rsa/2.0/clean-all
sh /usr/share/openvpn/easy-rsa/2.0/build-ca
sh /usr/share/openvpn/easy-rsa/2.0/build-dh
sh /usr/share/openvpn/easy-rsa/2.0/build-key-server server
sh /usr/share/openvpn/easy-rsa/2.0/build-key juaninf
Donde juaninf es un primer usuario de prueba para el servicio 
Iniciar el servicio con service openvpn start
La configuracion de mi interfaces (2 interfaces fisicas) es :
root@svrvpn01 openvpn]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:19:BB:39:0B:58  
          inet addr:20.37.20.252  Bcast:200.37.15.255  Mask:255.255.240.0
          inet6 addr: fe80::219:bbff:fe39:b58/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1507 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:207290 (202.4 KiB)  TX bytes:748 (748.0 b)
          Interrupt:169 Memory:fa000000-fa012800 

eth1      Link encap:Ethernet  HWaddr 00:11:95:D1:AD:32  
          inet addr:10.10.16.34  Bcast:10.10.19.255  Mask:255.255.252.0
          inet6 addr: fe80::211:95ff:fed1:ad32/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6321 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1184 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:539518 (526.8 KiB)  TX bytes:213642 (208.6 KiB)
          Interrupt:90 Base address:0x2000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:192.168.192.1  P-t-P:192.168.192.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
Tambien encontre que habilite el reenvio de paquetes.
Para crear 1 usuario (certificados y llaves) se tiene el procedimiento:
[root@svrvpn01 openvpn]# source ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/keys
[root@svrvpn01 openvpn]# sh /usr/share/openvpn/easy-rsa/2.0/build-key juaninf
Generating a 1024 bit RSA private key
........++++++
.............................................++++++
writing new private key to 'juaninf.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) [PE]:  
State or Province Name (full name) [LI]:
Locality Name (eg, city) [Trujillo]:
Organization Name (eg, company) [viru.com.pe]:
Organizational Unit Name (eg, section) []:LNC   
Common Name (eg, your name or your server's hostname) [juaninf]:
Name []:Juan Grados Vasquez
Email Address [jgrados@viru.com.pe]:juaninf@lnc.com.br

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/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'PE'
stateOrProvinceName   :PRINTABLE:'LI'
localityName          :PRINTABLE:'Trujillo'
organizationName      :PRINTABLE:'viru.com.pe'
organizationalUnitName:PRINTABLE:'LNC'
commonName            :PRINTABLE:'juaninf'
name                  :PRINTABLE:'Juan Grados Vasquez'
emailAddress          :IA5STRING:'juaninf@lnc.com.br'
Certificate is to be certified until Jun 11 16:12:48 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

Notar que se crearon 03 archivos :
[root@svrvpn01 keys]# ls -l /etc/openvpn/keys/juaninf.*
-rw-r--r-- 1 root root 3956 Jun 14 11:12 /etc/openvpn/keys/juaninf.crt
-rw-r--r-- 1 root root  733 Jun 14 11:12 /etc/openvpn/keys/juaninf.csr
-rw------- 1 root root  891 Jun 14 11:12 /etc/openvpn/keys/juaninf.key

Hasta aquí se completo la generación de los certificados del usuario  juaninf, ahora para el
cliente se tiene que copiar en su desktop o laptop los archivos ca.crt, juaninf.crt, juaninf.csr,
juaninf.key y un quinto archivo adicional virunet1194.ovpn que se detalla en parrafo siguiente.

Del lado del cliente, se necesita 5 archivos que el cliente remoto debe siempre portar a fin de poder establecer sesión vpn con el servidor, 04 de estos archivos se obtienen desde el servidor, y el quinto archivo es genérico para todos los casos, este quinto archivo "virunet1194.ovpn" debe conservar su extensión .ovpn; esto es:
client


dev tun
proto udp
remote 20.37.20.252 1194
float
resolv-retry infinite
nobind
persist-key
persist-tun
route 10.10.16.0 255.255.252.0 
dhcp-option DNS 192.168.26.1
dhcp-option WINS 192.168.26.1
#------ SECCION DE LLAVES --------
ca "C:\\Archivos de Programa\\OpenVPN\\config\\ca.crt"
cert "C:\\Archivos de Programa\\OpenVPN\\config\\juaninf.crt"
key "C:\\Archivos de Programa\\OpenVPN\\config\\juaninf.key"
ns-cert-type server
#---------------------------------
comp-lzo
verb 3

En la maquina del usuario remoto se debe instalar el cliente openvpn  (bajarlo de internet segun sistema operativo)  Luego, en caso de los windows dentro de  C:|  Archivos de Programa  |  OpenVPN  |  client  ; poner los 05 archivos que se indicaron.




El usuario establecerá sesión vpn con solo iniciar el programa OpenVPN cliente instalado, sin embargo para que el usuario remoto pueda acceder a su desktop local (PC de oficina) por remote desktop por ejemplo, será necesario que en la desktop local se agrege un enrutamiento persistente que permita conectividad entre la red remota de usuarios VPN (192.168.192.0/24) y la red local 10.10.16.0/22 (lan nicolini).

En la PC (desktop de oficina) :
route  ADD  192.168.192.0  MASK  255.255.255.255.0  10.10.16.34  -p

Esta ruta debe siempre estar presente, por ejemplo mediante un tarea programada ejecutada al inicio de sesión de un desktop windows.

Esta memoria esta basada en 


No hay comentarios.:

Publicar un comentario