Sobre OpenVPN
Actualmente las implementaciones de VPNs pueden ser por medio de estas tecnologías: SSL, IPSec y PPTP.
OpenVPN es un proyecto open source de VPNs para la implementar conexiones seguras point-to-point o site-to-site. Utiliza SSL/TLS para el intercambio de llaves y es capaz de atravesar NAT y firewalls, permite autenticación por medio de llaves preestablecidas (pre-shared secret key), certificados o usuario/contraseña.
Algunas de las ventajas de usar OpenVPN es su implementación en el espacio de usuario, lo que permite portabilidad en distintas plataformas, no modifica el protocolo IP como en el caso de IPSec y es más seguro que PPTP por lo que es una de los tipos de implementaciones recomendados para trabajar con VPNs.
Aproximadamente a partir de la versión 6.3 de RouterOS en el Mikrotik se cambió la forma de crear certificados, ahora se tiene que crear primero un template y después crear el certificado basado en ese template.
Los pasos para configurar OpenVPN son:
El common-name es el único dato importante y debe ser el hostname para el IP Público del router. Por ejemplo: servidorvpn.empresa-abc.com
Creamos el certificado
Descargamos los archivos (por winbox/scp/sftp) certificate-request.pem y certificate-request_key.pem del Mikrotik a la PC.
Utilizando CAcert como Certificate Authority entramos a nuestra cuenta https://www.cacert.org (si no se tiene cuenta se debe de crear, registrar y comprobar el domino, algo que no toma más de 10 minutos) y creamos un nuevo Certificado de Servidor (Certificado de Servidor > Nuevo)
Pegamos el contenido del certificado donde dice Pegue abajo el contenido de su solicitud de firma de certificado (CSR)...
Con el contenido del certificado pegado enviamos la solicitud, se nos presenta una página con el certificado del servidor para el Mikrotik que dice
Copiamos el contenido en un editor de texto y lo guardamos como certificate-response.pem.
Ahora nos falta la llave privada para el otro archivo (certificate-request_key.pem) que descargamos, pero, para generar esta llave nos tenemos que apoyar con el paquete de openssl en Linux ya que Mikrotik no soporta llaves en el formato pkcs8.
Instalamos openssl
Subimos los archivos certificate-response.pem y private-key.key al Mikrotik
Debido a que se requiere autenticar tanto al servidor como cliente, necesitaremos certificados para el servidor el cual nombraremos "RB2011" y certificados para la PC que vamos a conectar la que nombramos "client1".
Instalamos easy-rsa
Inicializamos easy-rsa
En Fedora 20, se instala en /usr/share/easy-rsa/2.0. Es preferible modificar las variables del archivo vars. Como root:
Creamos CA (Certificate Authority)
Esto nos va a dar autoridad para firmar certificados para el servidor y clientes.
Creamos la Llave y Certificado del Servidor (Server Certificate)
Convertimos la Llave Privada del Servidor (Server Private Key) a formato .pem
Creamos la Llave y Certificado del Cliente (Client Certificate)
Si queremos crear llaves para otros clientes de la VPN los creamos aquí, las convertimos a formato.pem y la subimos al Mikrotik (ver abajo).
Convertimos la Llave Privada del Cliente (Client Private Key) recién creada a formato .pem
Subimos el Certificado y Llave del Servidor al Mikrotik
Instalamos los Certificados y Llaves en el Mikrotik:
RB2011.crt - certificado del Mikrotik.
RB2011.pem - llave para del Mikrotik.
ca.crt - Nuestro certificado root que nos da autoridad.
Subimos el Certificado y Llave del Cliente al Mikrotik:
Instalamos en el Mikrotik:
client1.crt - certificado cliente para nuestro usuario.
client1.pem - llave cliente para nuestro usuario.
Configuramos el bridge para la VPN
Configuramos IPsOpenVPN es un proyecto open source de VPNs para la implementar conexiones seguras point-to-point o site-to-site. Utiliza SSL/TLS para el intercambio de llaves y es capaz de atravesar NAT y firewalls, permite autenticación por medio de llaves preestablecidas (pre-shared secret key), certificados o usuario/contraseña.
Algunas de las ventajas de usar OpenVPN es su implementación en el espacio de usuario, lo que permite portabilidad en distintas plataformas, no modifica el protocolo IP como en el caso de IPSec y es más seguro que PPTP por lo que es una de los tipos de implementaciones recomendados para trabajar con VPNs.
Instalación
Se configurará como servidor VPN un router Mikrotik y como cliente una PC con Linux (Fedora, CentOS) pero es fácil configurar como cliente una PC con Windows. Las instrucciones y la descarga de clientes se encuentran en el sitio oficial de OpenVPN.Topología a usar
Pasos
Aproximadamente a partir de la versión 6.3 de RouterOS en el Mikrotik se cambió la forma de crear certificados, ahora se tiene que crear primero un template y después crear el certificado basado en ese template.
Los pasos para configurar OpenVPN son:
- Crear el certificado SSL de servidor para Mikrotik.
- Crear los certificados para los clientes que se van a conectar
- Configurar OpenVPN
- Configuramos el cliente
Crear certificados SSL de servidor para el Mikrotik
Creamos el template/certificate add name=cert1 common-name=servidorvpn.empresa-abc.com key-size=2048 country=NI state=Managua locality=Managua organization="Empresa ABC" subject-alt-name=email:micorreo@empresa-abc.com
El common-name es el único dato importante y debe ser el hostname para el IP Público del router. Por ejemplo: servidorvpn.empresa-abc.com
Creamos el certificado
/certificate create-certificate-request template: cert1 key-passphrase: ******Esto crea el archivo certificate-request.pem y certificate-request_key.pem en el directorio raíz del Mikrotik.
Descargamos los archivos (por winbox/scp/sftp) certificate-request.pem y certificate-request_key.pem del Mikrotik a la PC.
$ sftp 198.51.100.2 admin@198.51.100.2's password: Connected to 198.51.100.2. sftp> get certificate-request.pem Fetching /certificate-request.pem to certificate-request.pem /certificate-request.pem 100% 1074 1.1KB/s 00:00 sftp> get certificate-request_key.pem /certificate-request_key.pem 100% 1834 1.8KB/s 00:00 sftp> exitAbrimos el archivo certificate-request.pem en un editor de texto y copiamos el contenido.
Utilizando CAcert como Certificate Authority entramos a nuestra cuenta https://www.cacert.org (si no se tiene cuenta se debe de crear, registrar y comprobar el domino, algo que no toma más de 10 minutos) y creamos un nuevo Certificado de Servidor (Certificado de Servidor > Nuevo)
Pegamos el contenido del certificado donde dice Pegue abajo el contenido de su solicitud de firma de certificado (CSR)...
Con el contenido del certificado pegado enviamos la solicitud, se nos presenta una página con el certificado del servidor para el Mikrotik que dice
Copiamos el contenido en un editor de texto y lo guardamos como certificate-response.pem.
Ahora nos falta la llave privada para el otro archivo (certificate-request_key.pem) que descargamos, pero, para generar esta llave nos tenemos que apoyar con el paquete de openssl en Linux ya que Mikrotik no soporta llaves en el formato pkcs8.
Instalamos openssl
yum install openssl
Corremos $ openssl rsa -in certificate-request_key.pem -text Enter pass phrase for certificate-request_key.pem: ... writing RSA key -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEArPs+8FBatVwc3Lunm9zfmWc/CMwQotouxE5+Xl4HIT44LHSO HjHOpN5mTfRfSHH7cMiHjxEr+rebxvbtGVmL4j7zXd+A+7gbvk8ZC5TT7UD0Q6DH 1guEggwvkddi/8z/Fd225bGiBpk3nQw1EXBQPP/KqTm+zN4/rC8sIcpudaeb+yCz 9tkZAICn8lHdQZge85HAgM3OButtirJAeB9ZyKL3MREZayodchtR4AW09PqTq8a8 NQeXkVynnJb07+B/qSu9U6r1Shyggx/J9gGb9wv/CebpA8lILRow//Q7gV1U72DZ ...Copiamos la llave generada desde donde dice BEGIN RSA PRIVATE KEY a un editor de texto y la guardamos con el nombre de private-key.key
Subimos los archivos certificate-response.pem y private-key.key al Mikrotik
$ scp certificate-response.pem private-key.key 198.51.100.2: 198.51.100.2's password: certificate-response.pem 100% 1846 1.8KB/s 00:00 private-key.key 100% 1676 1.6KB/s 00:00y luego los instalamos con:
/certificate import passphrase: ******** certificates-imported: 1 private-keys-imported: 1 files-imported: 2 decryption-failures: 0 keys-with-no-certificate: 0Corremos el siguiente comando en el Mikrotik para revisar el certificado:
/certificate print detail ... 1 K L T name="cert_4" issuer=O=Root CA,OU=http:,,www.cacert.org,CN=CA Cert Signing Authority,emailAddress=support@cacert.org ...Vemos que el nombre es cert_4.
Crear certificado para los clientes
Los clientes que se conectarán por OpenVPN requieren contar también con certificados. Estos los crearemos con la herramienta pkitool del paquete easy-rsa en Linux.Debido a que se requiere autenticar tanto al servidor como cliente, necesitaremos certificados para el servidor el cual nombraremos "RB2011" y certificados para la PC que vamos a conectar la que nombramos "client1".
Instalamos easy-rsa
$ sudo yum install easy-rsa
Inicializamos easy-rsa
En Fedora 20, se instala en /usr/share/easy-rsa/2.0. Es preferible modificar las variables del archivo vars. Como root:
# cd /usr/share/easy-rsa/2.0 # mkdir keysModificamos en el archivo vars y modificamos:
# vi vars export KEY_COUNTRY="NI" export KEY_PROVINCE="MGA" export KEY_CITY="Managua" export KEY_ORG="Empresa ABC" export KEY_EMAIL="micorreo@empresa-abc.com" export KEY_OU=""Salimos del editor y actualizamos las variables
# source vars # ./clean-all
Creamos CA (Certificate Authority)
Esto nos va a dar autoridad para firmar certificados para el servidor y clientes.
# ./pkitool --initca Using CA Common Name: Fort-Funston CA Generating a 2048 bit RSA private key ............................................+++ ...............................+++ writing new private key to 'ca.key' -----Esto nos crea los archivos ca.crt y ca.key en el directorio keys. El archivo ca.key no lo tocamos, el archivo ca.crt con el certificado root debe de copiarse en el Mikrotik y en todos los clientes que intentarán conectarse (este paso se describe más abajo).
Creamos la Llave y Certificado del Servidor (Server Certificate)
# ./pkitool --pass --server RB2011 Generating a 2048 bit RSA private key ......................................+++ ......+++ writing new private key to 'RB2011.key'Estos nos crea los archivos RB2011.crt,RB2011.csr y RB2011.key. Usamos de nombre "RB2011" para referirnos al modelo del router Mikrotik que usamos pero puede ser cualquier otro para identificarlo.
Convertimos la Llave Privada del Servidor (Server Private Key) a formato .pem
# openssl rsa -in keys/RB2011.key -out keys/RB2011.pem
Sólo es necesario crear una llave para el servidor.Creamos la Llave y Certificado del Cliente (Client Certificate)
# ./pkitool --pass client1
Nos crea los archivos client1.crt, client1.csr y client1.key Si queremos crear llaves para otros clientes de la VPN los creamos aquí, las convertimos a formato.pem y la subimos al Mikrotik (ver abajo).
Convertimos la Llave Privada del Cliente (Client Private Key) recién creada a formato .pem
# openssl rsa -in keys/client1.key -out keys/client1.pem
Subimos el Certificado y Llave del Servidor al Mikrotik
# scp keys/RB2011.crt keys/RB2011.pem keys/ca.crt @198.51.100.2:
Tener cuidado de no subir la llave privada ca.key. Instalamos los Certificados y Llaves en el Mikrotik:
/certificate import file=RB2011.crt import file=RB2011.pem import file=ca.crtCon esto tenemos instalado:
RB2011.crt - certificado del Mikrotik.
RB2011.pem - llave para del Mikrotik.
ca.crt - Nuestro certificado root que nos da autoridad.
Subimos el Certificado y Llave del Cliente al Mikrotik:
# scp keys/client1.crt keys/client1.pem daniel@198.51.100.2:
Instalamos en el Mikrotik:
/certificate import file=client1.crt import file=client1.pemInstalamos:
client1.crt - certificado cliente para nuestro usuario.
client1.pem - llave cliente para nuestro usuario.
Configuramos OpenVPN en el router Mikrotik
Se configurará el router Mikrotik desde el inicio, se asume que no tiene configuración adicional.Configuramos el bridge para la VPN
/interface bridge add name=vpn-bridge /interface bridge port add interface=ether2 bridge=vpn-bridge
/ip address add address=198.51.100.2/24 interface=ether1 comment=INTERNET /ip address add address=172.16.1.1/24 interface=ether2 comment=LANIP WAN: 198.51.100.2 interfaz ether1 (IP Público asignado por ISP)
IP LAN: 172.16.1.1 interfaz ether2 (IP para la interfaz interna)
Configuramos gateway por default (ISP)
/ip route add gateway=198.51.100.1 comment=InternetCreamos pool de IPs
Creamos un pool de direcciones para asignar a los clientes de la VPN
/ip pool add name=ovpn-pool \ ranges=172.16.1.100-172.16.1.120Asegurarse que este pool no interfiera con el pool de algún posible servidor DHCP que vayamos a configurar para la red interna más adelante.
Hacemos NAT para conexiones salientes
/ip firewall nat add chain=srcnat \ out-interface=ether1 action=masqueradeConfiguramos el OpenVPN Server
Definimos un perfil
/ppp profile add name="openvpn" local-address="172.16.1.1" \ remote-address=ovpn-pool \ bridge=vpn-bridge use-ipv6=yes use-mpls=default \ use-compression=default use-vj-compression=default \ use-encryption=required only-one=default \ change-tcp-mss=default address-list="" \ dns-server=8.8.8.8,4.4.4.4Agregamos usuario de la VPN
/ppp secret add name=daniel \ password=goodpassword profile=openvpn \ service=ovpnActivamos el servicio
/interface ovpn-server server \ set auth=sha1 certificate=cert_5 \ cipher=blowfish128,aes128,aes192,aes256 \ default-profile=openvpn enabled=yes port=1194Lo más seguro es que tengamos varios certificados en el Mikrotik por lo que hay que asegurarse que certificate= sea el certificado del servidor (en nuestro caso lleva de common name: RB2011, para mi cert_5). Esto lo verificamos corriendo el comando en el Mikrotik:
/certificate print detail
Configuramos el firewall
Permitimos conexiones para la VPN
/ip firewall filter \ add action=accept chain=input comment="OpenVPN" \ disabled=no dst-port=1194 protocol=tcp
Configuramos el cliente
Para que un cliente pueda conectarse a la VPN debemos copiar las llaves del cliente y certificados ca.crt, client1.crt y client1.pem a la PC cliente. Se recomienda copiarlas por un método seguro como sftp o scp. Si se van a transportar las llaves copiándolas a una memoria USB se recomienda asegurarse que sean borradas después ya que en el caso que se extravíe la memoria, nadie más pueda conectarse usando las llaves.En la PC cliente instalamos openvpn si no lo hemos hecho:
yum install openvpn
Las llaves y certificado para el cliente las copiamos (por ejemplo en: /etc/openvpn/) asegurándonos que tengan derecho de lectura por root solamente:
Copiamos las llaves a la PC cliente
$ sudo cp ca.crt client1.crt client1.key /etc/openvpn/Damos permiso de lectura y escritura a root solamente
$ sudo chown root:root /etc/openvpn/* $ sudo chmod 600 /etc/openvpn/*Creamos el archivo que nos servirá de script de conexión para OpenVPN
Para conectarnos a la VPN debemos ejecutar un script que contendrá opciones, configuración del servidor y ubicación de las llaves. A este archivo le llamamos client.ovpn y lo podemos guardar de igual forma en /etc/openvpn/
$ sudo vim /etc/openvpn/client.ovpnCopiamos la configuración de conexión
# client.ovpn # Dispositivo para la conexión # dev tap # modo bridge ethernet en Mikrotik. Encapsulamos tramas Ethernet. Permite pasar al cliente broadcast, etc. dev tun # ip en Mikrotik. Encapsulamos protocolo IP solamente. # El tunel se hará por TCP. Mikrotik no soporta UDP. proto tcp-client # Nombre del servidor OpenVPN # remoto o dirección IP remote servidorvpn.empresa-abc.com 443 # Ubicación de certificados y llaves # ca: Certificado de Autoridad (CA Public Key) # cert: Client certificate (Client Public Key) # key: Client Private Key ca /etc/openvpn/ca.crt cert /etc/openvpn/client1.crt key /etc/openvpn/client1.key # Habilita encriptación TLS (SSL) # Nos conectamos por puerto 443 tls-client port 443 # OpenVPN debe correr como root para leer el archivo de la llave de servidor, abrir el dispositivo tun, etc. Después de hacer eso baja de permisos para correr como el siguiente usuario/grupo user nobody group nobody # Habilitamos compresión de datos comp-lzo # Opcionalmente podemos fijar rutas por la VPN de esta forma #route 192.168.0.0 255.255.255.0 172.16.1.1 # Que la VPN sea default gateway para todo tráfico redirect-gateway # Para detectar cuando se cae la conexión ping 15 ping-restart 45 ping-timer-rem # Mantener en cache detalles de la conexión # dispositivos (tun) y llaves (keys) para intentar # reconexiones en caso de interrupción persist-tun persist-key # No mostramos replay warnings que son falsas alarmas comunes # de paquetes duplicados en redes WiFi. mute-replay-warnings # Verbosity level. # 0 = quiet, 1 = mostly quiet, 3 = medium output, 9 = verbose verb 3 # Encriptación de los datos cipher AES-256-CBC # Algoritmo de hash para autenticación auth SHA1 # Aceptar opciones "push" del servidor pull # Log status /var/log/openvpn-status.log log-append /var/log/openvpn.log # El archivo auth.cfg contiene autenticación de usuario/clave. # En la primera línea del archivo va el usuario y la segunda línea la clave auth-user-pass auth.cfgConectamos el cliente a la VPN (línea de comando)
$ sudo openvpn --config /etc/openvpn/client.ovpn --daemonCon el comando anterior openvpn correrá como daemon con la configuración en el archivo client.ovpn.
Podemos ver el estado de la conexión viendo el log
$ sudo tail /var/log/openvpn.logConectamos el cliente a la VPN (interfaz gráfica)
En el administrador de red de Gnome 3
Network Manager-> Network Settings-> +(Add Network Connection)-> Import from file... y seleccionamos el archivo client.ovpn con la configuración.
----------------
Más ejemplos:
Leer más sobre OpenVPN
- Configure Linux Clients to Connect to OpenVPN Server
- How to set up a Linux OpenVPN client
- Windows: Crear certificados e instalar OpenVPN
- Setup Mikrotik OpenVPN Server using CAcert with Linux Client
- OpenVPN.net Howto: Client configuration/li>
- Linux Journal - Paranoid Penguin - Linux VPNs with OpenVPN: Part I, Part II, Part III, Part IV, Part V
Fuente: http://goo.gl/VzNsBW
Hola intente establecer ovpn pero me da un error de TLS cuando el cliente intenta cnectarse. El servidor y el cliente estan directamente conectados entre si.
ResponderEliminarSaludos
como hago para registrar un dominio en cacert !!! para emitir mi certificado
ResponderEliminarHola buenos dias, si tengo 2 LAN el MK 192.168.1.x y 10.89.149.x como puedo hacer para que al esteblecer la conexion VPN pueda llegar a ambas??
ResponderEliminar