INTRODUCCIÓN
VPN o red privada virtual es una red privada segura a través de una red pública como Internet. Una VPN es un túnel seguro a través de Internet que protege su tráfico de datos y aumenta la privacidad y seguridad de Internet. El acceso a la VPN está restringido por métodos de autenticación seguros.
OpenVPN es un software de código abierto para construir redes privadas virtuales, utiliza la biblioteca OpenSSL para cifrar los datos tunelizados y admite transportes UDP o TCP. OpenVPN puede usar claves previamente compartidas, autenticación basada en certificados y basada en nombre de usuario / contraseña.
En este tutorial, les mostraré cómo implementar una red privada virtual usando OpenVPN bajo el sistema operativo Linux OpenSUSE Leap 15.1
PRERREQUISITOS
OpenSUSE Leap 15.1 – 64bit
Acceso a la cuenta Root
TUN/TAP habilitados.
PASO 1 – Verificar si TUN/TAP esta habilitado
Si se desea crear una VPN en su servidor, hay que asegurarse de que TUN / TAP esté instalado y habilitado en el servidor. Se puede comprobar mediante el siguiente comando:
# cat /dev/net/tun
Si resultado es:
# cat: /dev/net/tun: File descriptor in bad state
significa el paquete no está instalado y habrá que instalarlo.
Paso 2 – Instalar OpenVPN
OpenVPN está disponible en el repositorio de OpenSUSE. Se puede instalar con el comando zypper:
# zypper install openvpn
Paso 3 – Configurar Easy-RSA
Una vez intalado OpenVPN, descargamos easy-rsa para generar un archivo de certificado. Easy-rsa es una utilidad para administrar certificados, puede crear la autoridad certificadora raíz con ella y solicitar y firmar certificados.
Para esto, vamos al directorio OpenVPN (etc/openvpn) y descargamos easy-rsa con el comando wget:
# cd /etc/openvpn/
# wget https://github.com/OpenVPN/easy-rsa/archive/release/2.x.zip
Descomprimimos el archivo descargado y movemos el directorio easy-rsa:
# unzip 2.x.zip
# mv easy-rsa-release-2.x/easy-rsa/ /etc/openvpn/
# rm -rf easy-rsa-release-2.x/
Configuramos la clave:
Vamos al directorio easy-rsa y editamos el archivo «vars» para configurar la clave y el certificado:
# cd easy-rsa/2.0/
# vi vars
Linea 29 – Modificarla para dejarla como se debajo
export KEY_CONFIG=/etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf
Línea 53 – Puede aumentar el tamaño de la clave. Baja la perfomance
export KEY_SIZE=2048
Línea 56 y 59: en cuántos días vencerán la clave y el certificado.
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
Línea 64 – 72: cambiamos el valor predeterminado de la clave y la información del certificado.
export KEY_COUNTRY="AR"
export KEY_PROVINCE="Santa Fe"
export KEY_CITY="Casilda"
export KEY_ORG="Master Solutions"
export KEY_EMAIL="mimail@mastersolutions.com.ar"
export KEY_OU="MyOrganizationalUnit"
export KEY_NAME="EasyRSA"
Guardamos el archivo y cerramos vi.
Inicializar la PKI
A continuación, inicializamos la PKI (infraestructura de clave pública):
# source ./vars && ./clean-all && ./build-ca
Dejaremos los valores predeterminados, solo presionamos ‘Enter’.
Generar parámetros de Diffie Hellman
Ejecutamos el siguiente comando:
# ./build-dh
Y veremos la siguiente salida:
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
…………………………….
Generamos la clave privada del servidor
Generamos la clave privada con el nombre ‘server’:
# ./build-key-server server
Presionamos ‘Enter’ y respondemos ‘y’ (dos veces) para confirmar y generar la clave.
Generar clave y certificado para el cliente
Generamos la clave del cliente y el certificado con el nombre ‘ayuale’:
# ./build-key ayuale
Presionamos ‘Enter’ y respondemos ‘y’ (dos veces) para confirmar la generación de la clave.
La clave y el certificado se han generado en el directorio ‘keys’. Ahora hacemos una copia del directorio ‘keys’ y lo colocamos en el directorio ‘openvpn’.
# cp -r keys/ /etc/openvpn/
Paso 4: configurar OpenVPN
En este paso, configuraremos OpenVPN para que se ejecute en el protocolo UDP, utilizando el puerto 1194 (default) para la conexión del cliente. Creamos el nuevo archivo de configuración server.conf en el directorio OpenVPN.
# cd /etc/openvpn/
# vi server.conf
Pegamos la configuración a continuación:
# Cambiar con el puerto que indicamos a openvpn
port 1194
# Podemos usar UPD o TCP
proto udp
# 'dev tun' creará un túnel IP enrutado.
dev tun
#ca certificate
ca /etc/openvpn/keys/ca.crt
#Server Certificate
cert /etc/openvpn/keys/server.crt
#Server Key hay mantenerlo en secreto
key /etc/openvpn/keys/server.key
# Ver el tamaño del dh key en /etc/openvpn/keys/
dh /etc/openvpn/keys/dh2048.pem
# La IP interna se obtendrá cuando ya esté conectado
server 10.10.2.0 255.255.255.0
# esta línea redirigirá todo el tráfico a través de nuestro OpenVPN
push "redirect-gateway def1"
# Proporcione servidores DNS al cliente, puede usar goolge DNS
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
# Permitir que varios clientes se conecten con la misma clave
duplicate-cn
keepalive 20 60
comp-lzo
persist-key
persist-tun
daemon
# registro de estado
status /var/log/openvpn/openvpn-status.log
# Habilitar el log
log-append /var/log/openvpn/openvpn.log
# Nivel de Log
verb 3
Guarde el archivo y salga del editor.
A continuación, creamos un nuevo directorio y archivo para el registro de los de openvpn:
# mkdir -p /var/log/openvpn/
# touch /var/log/openvpn/{openvpn,openvpn-status}.log
Paso 5: configurar SuSEfirewall2
SuSEfirewall2 es un script para generar reglas de iptables basadas en el archivo ‘/etc/sysconfig/SuSEfirewall2’. Instalaremos SuSEfirewall2 y luego configuraremos el puerto para acceder a OpenVPN, luego habilitaremos NAT con un script iptables para OpenVPN.
Instalamos SuSEfirewall2 con el comando zypper:
# zypper in SuSEfirewall2
Ahora, vamos al directorio sysconfig y editamos el archivo de configuración SuSEfirewall2:
# cd /etc/sysconfig/
# vi SuSEfirewall2
Línea 138 – Habilitar ruta.
FW_ROUTE="yes"
Linea 257 – Habilitar el pure TCP 22 para acceso SSH desde fuera de la red.
FW_SERVICES_EXT_TCP="22"
Linea 271 – Habilitar el puerto udp 2034, para acceso de clientes openvpn
FW_SERVICES_EXT_UDP="1194"
Línea 901: Habilite las reglas personalizadas SuSEfirewall2.
FW_CUSTOMRULES="/etc/sysconfig/scripts/SuSEfirewall2-custom"
Guardamos y salimos de vi.
A continuación, editamos las reglas personalizadas de SuSEfirewall2 en el directorio de scripts.
# cd /etc/sysconfig/scripts/
# vi SuSEfirewall2-custom
Dentro de la directiva ‘fw_custom_after_chain_creation’, pegamos las nuevas reglas de iptables para OpenVPN:
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.10.2.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.10.2.0/24 -o eth0 -j MASQUERADE
Guardamos y salimos del editor.
Nota:
IP 10.10.2.0/24 es la red del archivo de configuración server.conf OpenVPN.
Ahora podemos habilitar el reenvío agregando esta nueva línea de configuración al archivo sysctl.conf.
# vi /etc/sysctl.conf
Pegamos la configuración a continuación:
net.ipv4.ip_forward = 1
Guardamos y salimos del editor.
Nota:
Si ya tiene la línea en el archivo, cambie el valor de ‘0’ a ‘1’ en lugar de agregar una nueva línea.
Ahora ejecutamos el siguiente comando para aplicar el cambio de configuración.
# sysctl -p
Iniciamos o reiniciamos el SuSEfirewall2 y el servidor OpenVPN:
# systemctl start SuSEfirewall2
# systemctl start openvpn@server
Si tenemos algún un error, podemos ver el mensaje de error detallado en el registro de OpenVPN.
Agregamos los servicios al inicio del sistema:
# systemctl enable SuSEfirewall2
# systemctl enable openvpn@server
Paso 6: configurar el cliente
Descargamos la clave del cliente y el certificado del directorio de claves a su computadora local. Puede usar el comando scp o sftp, estoy aquí usando scp:
Este comando que debe ejecutarse en la computadora local.
# scp root@serverip:/etc/openvpn/keys/ca.crt ~/myvpn/
# scp root@serverip:/etc/openvpn/keys/ayuale.crt ~/myvpn/
# scp root@serverip:/etc/openvpn/keys/ayuale.key ~/myvpn/
En el directorio myvpn, cree un nuevo archivo de configuración para el cliente ‘ayuale.ovpn’.
# cd ~/myvpn/
# vi ayuale.ovpn
Luego, pegamos la siguiente configuración:
client
remote [IP_DEL_SERVIDOR] 1194
ca ./ca.crt
cert ./ayuale.crt
key ./ayuale.key
comp-lzo yes
cipher AES-256-CBC
dev tun
proto udp
nobind
auth-nocache
script-security 2
persist-key
persist-tun
remote-cert-tls server
Guardamos y salimos el edito.
Para conectarse a nuestra VPN, se puede instalar un cliente VPN o, si está usando Linux, puede usar el ‘Network-Manager’. Si queremos probar la VPN con una terminal, podemos usar el siguiente comando:
# cd ~/myvpn/
# sudo openvpn –config ayuale.ovpn
Clientes
Para Mac: Tunnelblick
Para Windows: OpenVPN Connect
Referencias
https://en.opensuse.org/SDB:OpenVPN_Installation_and_Setup