Hoy en día, la tecnología VPN se está volviendo más popular. Los usuarios comunes usan VPN para acceder a Internet de forma segura. También ayuda a sortear sitios web y servicios bloqueados localmente y a protegerse contra posibles ataques maliciosos externos. Al conectarse a un servidor VPN, existe un túnel seguro entre su computadora y el servidor, al que no se puede acceder desde el exterior, por lo que el servidor VPN se convierte en su punto de acceso a Internet. Existen muchos servicios VPN, tanto gratuitos como de pago, pero si por alguna razón no le funcionan, siempre puede configurar su propio servidor VPN.
Para usar tu propia VPN, necesitas alquilar un servidor VPS . Existen diferentes programas que te permiten crear una conexión VPN. Se diferencian entre sí por los sistemas operativos compatibles y los algoritmos que utilizan. Analizaremos dos enfoques independientes para configurar un servidor VPN. El primero se basa en el protocolo PPTP, que ya se considera obsoleto e inseguro, pero es muy fácil de configurar. El segundo utiliza el software moderno y seguro OpenVPN, pero requiere la instalación de una aplicación cliente de terceros y un proceso de configuración más complejo.
En nuestro entorno de prueba, usaremos un servidor virtual con Ubuntu Server 18.04. Se desactivará el firewall del servidor, ya que su configuración merece un artículo aparte. Describiremos el proceso de configuración en Windows 10.
Preparación
Independientemente del servidor VPN que elija, el acceso a Internet se configurará mediante un sistema operativo integrado. Para acceder a Internet a través de una interfaz de servicio externa, debe permitir el reenvío de paquetes entre las interfaces y configurar la traducción de direcciones de red.
Para activar el reenvío de paquetes, abra el archivo “/etc/sysctl.conf” y cambie el valor del parámetro “net.ipv4.ip_forward” a 1.
Para aplicar los cambios sin reiniciar el equipo, ejecute el comando
sudo sysctl -p /etc/sysctl.conf
La traducción de direcciones de red se configura mediante iptables . Primero, compruebe el nombre de su interfaz de red externa ejecutando el comando “ip link show” ; lo necesitará en el siguiente paso. Nuestro nombre es “ens3”.
Habilite la traducción de direcciones de red en su interfaz externa para todos los nodos de red local.
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Tenga en cuenta que debe especificar el nombre real de la interfaz de su servidor, puede ser diferente al nuestro.
Por defecto, todas las reglas creadas por iptables se restablecen después del reinicio del servidor. Para evitarlo, utilice la utilidad “iptables-persistent” . Instale el siguiente paquete:
sudo apt install iptables-persistent
En algún momento del proceso de instalación, verá una ventana de configuración que le sugerirá guardar las reglas actuales de iptables. Como las reglas ya están definidas, simplemente confirme y haga clic en "Sí" dos veces. A partir de ahora, las reglas se aplicarán automáticamente después de reiniciar el servidor.
Servidor PPTP
Configuración del servidor
Instalar el paquete:
sudo apt install pptpd
Una vez finalizada la instalación, abra el archivo “/etc/pptpd.conf” en cualquier editor de texto y edítelo de la siguiente manera:
option /etc/ppp/pptpd-options #path to the settings file
logwtmp #client connections logging mechanism
connections 100 #number of simultaneous connections
localip 172.16.0.1 #the address that will serve as a client gateway
remoteip 172.16.0.2-200 #range of addresses
Después, edite el archivo “/etc/ppp/pptpd-options” . La mayoría de los parámetros están configurados por defecto.
#name of the service for new client records
name pptpd
#restrict obsolete authentication methods
refuse-pap
refuse-chap
refuse-mschap
#allow a more secure authentication method
require-mschap-v2
#enable encryption
require-mppe-128
#specify dns servers for clients (use any available servers)
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp
novj
novjccomp
nologfd
En la siguiente etapa, deberá crear un registro para las conexiones de clientes. Digamos que desea agregar un usuario llamado “vpnuser” con la contraseña “1” y permitirle el direccionamiento dinámico. Abra el archivo “/etc/ppp/chap-secrets” y agregue la siguiente línea con los parámetros del usuario al final del archivo:
vpnuser pptpd 1 *
El valor “pptpd” es el nombre del servicio que especificamos en el archivo “pptpd-options” . En lugar de “*”, puede especificar una dirección IP fija. Como resultado, el archivo “chap-secrets” debería verse así:
Para aplicar la configuración, reinicie el servicio pptpd y agréguelo a la carga automática.
sudo systemctl restart pptpd
sudo systemctl enable pptpd
La configuración del servidor ha finalizado.
Configuración del cliente
Abra “Inicio” - “Configuración” - “Red e Internet” - “VPN” y haga clic en “Agregar una conexión VPN”.
Introduzca los parámetros de conexión en la ventana que se abre y haga clic en “Guardar”.
- Proveedor de VPN: “Windows (integrado)”
- Nombre de la conexión: “vpn_connect” (puede elegir cualquier nombre)
- Nombre o dirección del servidor: (especifique la dirección IP externa del servidor)
- Tipo de VPN: “Automático”
- Tipo de información de inicio de sesión: “Nombre de usuario y contraseña”
- Nombre de usuario: usuario vpn (nombre especificado en el archivo “chap-secrets” en el servidor)
- Contraseña: 1 (como en el archivo “cap-secrets”)
Tras guardar los parámetros, verá la nueva conexión VPN en la ventana. Haga clic izquierdo en la conexión y seleccione «Conectar» . Si la conexión se establece correctamente, verá el estado «Conectado».
En las Opciones, encontrará las direcciones internas del cliente y del servidor. El campo "Dirección de destino" muestra la dirección del servidor externo.
Una vez conectado, la dirección IP interna del servidor, 172.16.0.1 en nuestro caso, se convierte en la puerta de enlace predeterminada para todos los paquetes salientes.
Al usar cualquier servicio en línea, puede asegurarse de que la dirección IP externa de la computadora ahora sea la misma que la dirección IP de su servidor VPN.
Servidor OpenVPN
Configuración del servidor
Aumentemos el nivel de permisos del usuario actual porque para nuestra configuración posterior necesitaremos acceso root.
sudo -s
Instala todos los paquetes necesarios. Necesitaremos el paquete “Easy-RSA” para gestionar las claves de cifrado.
apt install openvpn easy-rsa iptables-persistent
Permitir conexiones entrantes en el puerto 1194 a través del protocolo UDP y aplicar reglas de iptables.
sudo iptables -I INPUT -p udp --dport 1194 -j ACCEPT
sudo netfilter-persistent save
Cree un directorio con los archivos copiados del paquete “Easy-RSA” y navegue hasta él.
make-cadir ~/openvpn
cd ~/openvpn
Generar Infraestructura de Clave Pública (PKI).
./easyrsa init-pki
Generar el certificado raíz de la autoridad de certificación (CA).
./easyrsa build-ca
Durante el proceso de creación, se le pedirá que establezca y recuerde una contraseña. También deberá responder preguntas e ingresar información sobre el propietario de la clave. Puede dejar los valores predeterminados entre corchetes. Presione "Enter" para finalizar la entrada.
Generar una clave privada y una solicitud de certificado. Como argumento, especifique un nombre arbitrario; en nuestro caso, es "servidor-vpn".
./easyrsa gen-req vpn-server nopass
Deje el valor del Nombre común como predeterminado.
Firme la solicitud de certificado de servidor generada.
./easyrsa sign-req server vpn-server
En este paso, responda "sí" para confirmar la firma, luego ingrese la contraseña que se creó durante la generación del certificado raíz.
Generar parámetros Diffie-Hellman. Estos parámetros se utilizan para el intercambio seguro de claves entre el servidor y el cliente.
./easyrsa gen-dh
Se han generado todos los archivos necesarios. Cree una carpeta "keys" en el directorio de trabajo de OpenVPN para almacenar las claves y copiar allí los archivos creados.
mkdir /etc/openvpn/keys
sudo cp pki/ca.crt pki/issued/vpn-server.crt pki/private/vpn-server.key pki/dh.pem /etc/openvpn/keys
Configurar NAT usando iptables reglas. Crea un archivo llamado nat y abrirlo para editarlo en el /etc/openvpn/ directorio.
#!/bin/sh
# Reset firewall settings
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# Allow OpenVPN connections (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun0 -j ACCEPT
# (eth0 in our case, may vary):
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
# (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Enable masquerading for the local network (eth0 in our case, may vary)
iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
# Deny incoming connections from outside
iptables -A INPUT -i eth0 -j DROP
# Deny transit traffic from outside (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -j DROP
sudo netfilter-persistent save
Guarde el archivo y hágalo ejecutable.
sudo chmod 755 /etc/openvpn/nat
Copiar la plantilla de configuración del servidor.
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/
Abra el archivo “/etc/openvpn/server.conf” para editarlo, asegúrese de que contiene las siguientes líneas y edítelas si es necesario:
#Port, protocol, and interface
port 1194
proto udp
dev tun
#Path to the encryption keys
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vpn-server.crt
key /etc/openvpn/keys/vpn-server.key
dh /etc/openvpn/keys/dh.pem
#SHA256 Hashing Algorithm
auth SHA256
#Switching off additional encryption
#tls-auth ta.key 0
#Network parameters
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
#Ping every 10 seconds to check the connection.
keepalive 10 120
#Set up AES-256 encryption for the tunnel.
cipher AES-256-GCM
#Demoting the service OpenVPN after launch
user nobody
group nogroup
#Switching on parameters saving after reboot
persist-key
persist-tun
#Set log verbosity
verb 3
#Redirecting logs
log-append /var/log/openvpn/openvpn.log
#Script the rule installation launch.
up /etc/openvpn/nat
Habilitar el reenvío de tráfico en el servidor.
sudo sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
Inicie OpenVPN para aplicar la configuración.
systemctl restart openvpn@server
¡La configuración del servidor está terminada!
Configuración del cliente
Dirígete al sitio web oficial de OpenVPN “ https://openvpn.net ”, ve a la sección “COMUNIDAD”.
Desplázate hacia abajo y descarga el instalador correspondiente a la versión de tu sistema operativo. En nuestro caso, es Windows 11 ARM64.
Instalar la aplicación dejando todos los parámetros por defecto.
En la siguiente etapa, deberá preparar el siguiente archivo en el servidor y transferirlo a la computadora cliente:
- claves públicas y privadas;
- copia de la clave del centro de certificación;
- plantilla de archivo de configuración.
Conéctese al servidor, eleve los privilegios y navegue hasta nuestro directorio creado "~/openvpn".
sudo -s
cd ~/openvpn
Generar una clave privada y una solicitud de certificado para el cliente. Como argumento, especifique un nombre arbitrario; en nuestro caso, es "cliente1".
./easyrsa gen-req client1 nopass
Introduzca la contraseña que configuramos al crear el certificado raíz y deje el valor Nombre común como predeterminado.
Firme la solicitud de certificado de cliente generada.
./easyrsa sign-req client client1
En este paso, responda "sí" para confirmar la firma, luego ingrese la contraseña que se creó durante la generación del certificado raíz.
Para mayor comodidad, crearemos una carpeta llamada 'client1' en el directorio de inicio y copiaremos allí todos los archivos que se transferirán a la computadora cliente.
mkdir ~/client1
cp pki/issued/client1.crt pki/private/client1.key pki/ca.crt ~/client1/
Copia la plantilla del archivo de configuración del cliente al mismo directorio. Cambia la extensión del archivo a “.ovpn” durante la copia.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client1/client.ovpn
Cambia el propietario del directorio y de todos los archivos “~/client1/” para poder distribuirlos al cliente. En nuestro caso, asignaremos el propietario a “mihail” .
chown -R mihail:mihail ~/client1
Acceda al ordenador del cliente y copie el contenido de la carpeta “~/client1/” . Puede hacerlo con la ayuda de la utilidad “PSCP” , que viene incluida con Putty.
PSCP -r mihail@[IP_сервера]:/home/mihail/client1 c:\client1
Puedes guardar los archivos de clave “ca.crt” , “client1.crt” y “client1.key” donde quieras. En nuestro caso, están en la carpeta “c:\Program Files\OpenVPN\keys” , y el archivo de configuración “client.ovpn” se encuentra en el directorio “c:\Program Files\OpenVPN\config” .
Ahora vamos a configurar el cliente. Abra el archivo “c:\Program Files\OpenVPN\config\client.ovpn” en un editor de texto y edite las siguientes líneas:
#announce that this is the client
client
#interface and protocol just like on the server
dev tun
proto udp
#IP address of the server and port
remote ip_address 1194
#saving parameters after reload
persist-key
persist-tun
#key paths
ca “c:\\Program Files\\OpenVPN\\keys\\ca.cert”
cert “c:\\Program Files\\OpenVPN\\keys\\client1.crt”
key “c:\\Program Files\\OpenVPN\\keys\\client1.key”
#enable server verification
remote-cert-tls server
#disable extra encryption
#tls-auth ta.key 1
cipher AES-256-CBC
auth-nocache
verb 3
Deje el resto intacto.
Guarde el archivo e inicie la aplicación cliente “OpenVPN GUI”.
Haz clic con el botón derecho en el icono de la aplicación en la barra de tareas y selecciona "Conectar" . Si la conexión se realiza correctamente, el icono se pondrá verde.
Utilice cualquier servicio en línea para asegurarse de que su dirección IP pública haya cambiado y ahora sea la misma que la dirección IP del servidor.