Doble VPN en un clic. Cómo dividir fácilmente la dirección IP de un punto de entrada y salida



TL; DR Este artículo describe la forma más fácil de configurar un servidor VPN, cuya dirección IP para conectar clientes VPN es diferente de la dirección IP desde la cual los clientes acceden a Internet.

¿Utiliza una VPN para proteger la privacidad en Internet y alquila su propio servidor para esto? ¿Eres el único cliente que se conecta a este servidor en todo el mundo? ¿Crees que es tan difícil encontrar tu dirección IP real? Con la entrada en vigor del paquete Spring, se vuelve mucho más fácil.

La doble VPN es un tema popular en torno al cual hay mucha especulación. A menudo, este término se denomina tecnología completamente diferente, pero casi siempre significa conexión a Internet y puntos de salida separados en el nivel de las direcciones IP. Consideraremos la forma más fácil de configurar un servidor VPN en este modo, que no requiere configuración adicional en el lado del servidor y le permite obtener la velocidad máxima y la latencia más baja.

Modelo de amenaza


Para protegerse de algo, debe comprender claramente el modelo de amenaza. No discutiremos las nuevas leyes que requieren que los proveedores almacenen todo el tráfico de clientes, pero definitivamente podemos decir que los datos de conexión, los llamados Netflow, el almacenamiento es bastante simple, y se ha hecho durante mucho tiempo. Es decir, se registra el hecho de conectar una dirección IP condicional 1.1.1.1 a la dirección 2.2.2.2 en un momento determinado del día.

Tener acceso a dicha información en la escala del proveedor, ciudad o país, es suficiente simplemente establecer quién se esconde detrás de la VPN.

Para aumentar el nivel de privacidad cuando se utiliza una VPN, debe separar el punto de conexión y el punto de acceso a Internet a nivel de IP. En la imagen de arriba, nuestro usuario está detrás de la cerca bajo el escrutinio de Irina Yarovoy. Irina recuerda estrictamente todas las conexiones que pasan por la cerca. El usuario, como ciudadano decente, se conecta a la dirección good.citizen.vpn , mientras regresa de la dirección super.cool.guy.vpn . Como resultado, para Irina, estas dos conexiones parecen desconectadas.

¿Qué son las VPN duales?


Bajo el nombre de VPN "doble", a menudo se entienden diferentes cosas, pero casi siempre significa nodos de conexión y acceso a Internet separados geográficamente o en el nivel de la red. A veces es solo un truco de marketing de los proveedores de VPN, lo que no significa absolutamente nada, tales servicios se pueden llamar VPN "triples" y "cuádruples".

Analizaremos los esquemas más típicos que se utilizan en la práctica.

VPN entre servidores


La forma mas comun. En este modo, el cliente establece una conexión VPN solo con el primer servidor. El túnel hacia el segundo se configura en el primer servidor, y todo el tráfico del cliente va al segundo servidor, y así sucesivamente. Puede haber varios servidores intermedios. Además, el túnel entre los servidores se puede instalar utilizando cualquier otro protocolo que no sea el protocolo a través del cual está conectado el cliente, por ejemplo IPsec, o sin ningún cifrado, como GRE o IPIP. En este modo, todos los servidores intermedios se pueden ver en el rastreo de ruta . No hay forma de verificar exactamente cómo están conectados los servidores intermedios en el lado del cliente, por lo que solo puede confiar en el proveedor.

A lo largo de la ruta de tráfico, la MTU mínima (unidad de transmisión máxima) permanece igual al valor del primer túnel, y cada servidor intermedio tiene acceso al tráfico descifrado del cliente .



VPN a través de proxy


También una forma bastante común. A menudo se usa para enmascarar el tráfico VPN bajo un protocolo diferente, por ejemplo en China. Este método es más conveniente que una cadena de servidores proxy, ya que al usar una VPN es fácil enrutar todo el tráfico del sistema hacia el túnel. También hay herramientas para interceptar llamadas de sistema de programas y redirigirlos a servidores proxy: ProxyCap, Proxifier, pero son menos estables porque a veces pierden solicitudes y omiten el proxy o funcionan incorrectamente con algunos programas.

En este modo, el servidor proxy no es visible en el rastreo de ruta.



VPN dentro de VPN


La forma más paranoica y lenta: todos los túneles se elevan del lado del cliente, uno dentro del otro. Este método requiere una configuración astuta de rutas en el lado del cliente y el lanzamiento de todos los clientes VPN en el orden correcto. Esto es malo para la latencia y el rendimiento, pero los servidores intermedios no tienen acceso al tráfico abierto del cliente. Se resumen todos los gastos generales de encapsulación, y el tamaño máximo de paquete (MTU) que está disponible para el cliente disminuye en función del número de túneles. Los servidores intermedios no son visibles en el rastreo de ruta.



Configurar VDS


La forma más fácil de configurar una VPN con puntos de entrada y salida divididos es conectar varias direcciones IP a un único servidor virtual. Este método le permite obtener la velocidad máxima y los retrasos mínimos, ya que de hecho el tráfico se termina en un solo servidor. En Vdsina.ru, puede hacerlo usted mismo desde el panel de control. Si bien IPv4 termina en todas partes, emitimos direcciones IP adicionales incluso en servidores por 60 rublos.

Analizaremos la configuración del servidor paso a paso.

Elige un servidor


Ordenamos VDS con una tarifa adecuada, en el centro de datos necesario. Dada nuestra tarea, elegiremos un centro de datos más lejos, en los Países Bajos;)



Conecte una dirección IP adicional


Después de comprar una dirección IP adicional, debe configurarla de acuerdo con las instrucciones .



Para mayor claridad, asigne un registro PTR a IP. Este es el nombre de dominio que será visible cuando la dirección IP se convierta nuevamente a un dominio. Esto puede ser cualquier valor, incluido un dominio inexistente.

Por ejemplo, utilizaremos los siguientes valores:

 xxx.xxx.38.220 — super.cool.guy.vpn #   ( ) xxx.xxx.39.154 — good.citizen.vpn #   ( ) 



Dos verificaciones de IP


Es importante recordar que la dirección IP que se configuró originalmente en el servidor será el punto de salida, por lo que la nueva dirección será el punto de entrada. Conéctese a través de SSH al servidor y verifique qué dirección se usa como externa.

Para hacer esto, es más fácil usar el servicio ifconfig.co desde la consola. Al solicitar mediante curl, devuelve la dirección IP desde la que se realizó la solicitud.

 $ curl ifconfig.co xxx.xxx.38.220 

Las últimas cifras muestran que nuestra dirección externa realmente coincide con el punto de salida. Intentemos verificar el correcto funcionamiento de la segunda IP como punto de entrada. Para hacer esto, simplemente use la función proxy SOCKS integrada en SSH.

Los comandos se ejecutan en el cliente:

 ssh -D 9999 root@good.citizen.vpn #    curl -x socks5h://127.0.0.1:9999 ifconfig.co super.cool.guy.vpn 

El primer comando configura una sesión SSH con la dirección good.citizen.vpn y activa simultáneamente un proxy SOCKS dentro de esta sesión, que está disponible en el puerto local. El segundo realiza una solicitud HTTP normal a través de este proxy.
Es importante recordar que nuestros ejemplos usan nombres de dominio ficticios para las consultas. Se mostrarán solo con una resolución PTR, y no se puede hacer una solicitud completa. Por lo tanto, en esta etapa, debe acceder al servidor a través de la dirección IP.

Configuración del servidor IKEv2




IPsec IKEv2 es un protocolo VPN moderno compatible con casi todos los sistemas operativos listos para usar. Se utiliza como protocolo predeterminado en Windows, macOS e iOS. No requiere instalación de software de terceros y en la mayoría de los casos es más rápido que OpenVPN. Ya había artículos sobre la configuración del servidor IKEv2 en el concentrador , pero todos describen el uso de certificados autofirmados y son inconvenientes porque requieren que instale el certificado raíz en el lado del cliente VPN.

Analizaremos un ejemplo de configuración del servidor utilizando un certificado de confianza de Let's Encrypt. Esto le permite no instalar certificados raíz extraños para el cliente, sino emitir solo un nombre de usuario y contraseña.

Preparación del servidor


Utilizaremos un servidor basado en Ubuntu 18.04, pero la instrucción también es adecuada para la mayoría de las distribuciones modernas.

Actualizamos el sistema e instalamos los paquetes necesarios.

 apt update && apt upgrade apt install certbot strongswan libstrongswan-extra-plugins 

Emisión de certificado


Para emitir un certificado de confianza, debe dirigir el dominio real a la dirección IP del punto de entrada. No consideraremos este artículo en detalle, ya que está más allá del alcance del artículo. Como ejemplo, utilizaremos el dominio ficticio good.citizen.vpn

Si ya tiene un servidor web en el servidor, use el método apropiado para emitir el certificado a través de certbot u otro cliente para Let's Encrypt. Este ejemplo supone que el puerto HTTP (80) no está ocupado.

 certbot certonly --standalone --agree-tos -d good.citizen.vpn 

¿Contestando las preguntas del mago? recibiremos un certificado firmado y una clave

 # find /etc/letsencrypt/live/good.citizen.vpn/ /etc/letsencrypt/live/good.citizen.vpn/ /etc/letsencrypt/live/good.citizen.vpn/fullchain.pem /etc/letsencrypt/live/good.citizen.vpn/README /etc/letsencrypt/live/good.citizen.vpn/cert.pem /etc/letsencrypt/live/good.citizen.vpn/privkey.pem /etc/letsencrypt/live/good.citizen.vpn/chain.pem 

Para la autenticación del servidor IKEv2, se utilizan los mismos certificados X.509 que para
Https Para que Strongswan pueda usar estos certificados, deben copiarse en la carpeta /etc/ipsec.d.

Así es como deben ubicarse los certificados:

 cp /etc/letsencrypt/live/good.citizen.vpn/cert.pem /etc/ipsec.d/certs/ cp /etc/letsencrypt/live/good.citizen.vpn/privkey.pem /etc/ipsec.d/private/ cp /etc/letsencrypt/live/good.citizen.vpn/chain.pem /etc/ipsec.d/cacerts/ 

Dado que los certificados de letsencrypt se vuelven a emitir con frecuencia, hacerlo manualmente es un inconveniente. Por lo tanto, automatizamos este proceso utilizando el gancho para certbot.

La tarea del script es copiar tres archivos en la carpeta deseada cada vez que se actualiza el certificado y luego enviar el comando strongswan para volver a leer los certificados.

Cree el archivo /etc/letsencrypt/renewal-hooks/deploy/renew-copy.sh y hágalo ejecutable.

 #!/bin/sh set -e for domain in $RENEWED_DOMAINS; do case $domain in good.citizen.vpn) daemon_cert_root=/etc/ipsec.d/ # Make sure the certificate and private key files are # never world readable, even just for an instant while # we're copying them into daemon_cert_root. umask 077 cp "$RENEWED_LINEAGE/cert.pem" "$daemon_cert_root/certs/" cp "$RENEWED_LINEAGE/chain.pem" "$daemon_cert_root/cacerts/" cp "$RENEWED_LINEAGE/privkey.pem" "$daemon_cert_root/private/" # Reread certificates /usr/sbin/ipsec reload /usr/sbin/ipsec purgecerts /usr/sbin/ipsec rereadall ;; esac done 

Ahora, después de cada nueva emisión del certificado, el script copiará los nuevos archivos a las carpetas de strongswan y enviará un comando al demonio para volver a leer los certificados.

Configuración de Strongswan


Agregue la configuración strongswan /etc/ipsec.conf

 config setup #       uniqueids=no # Increase debug level # charondebug = ike 3, cfg 3 conn %default #       ike=aes256-sha256-modp1024,aes256-sha256-modp2048 #  ""  dpdaction=clear dpddelay=35s dpdtimeout=2000s keyexchange=ikev2 auto=add rekey=no reauth=no fragmentation=yes #compress=yes # left - local (server) side leftcert=cert.pem #      /etc/ipsec.d/certs/ leftsendcert=always #    leftsubnet=0.0.0.0/0 # right - remote (client) side eap_identity=%identity #   IP-  VPN- rightsourceip=10.0.1.0/24 rightdns=8.8.8.8,1.1.1.1 # Windows and BlackBerry clients usually goes here conn ikev2-mschapv2 rightauth=eap-mschapv2 # Apple clients usually goes here conn ikev2-mschapv2-apple rightauth=eap-mschapv2 leftid=good.citizen.vpn 

Los inicios de sesión y las contraseñas de los clientes VPN se configuran en el archivo /etc/ipsec.secrets

En este archivo, también debe especificar el nombre de la clave privada que copiamos previamente de la carpeta letsencrypt:

 #       /etc/ipsec.d/private/ : RSA privkey.pem #  VPN #  : EAP "" IrinaYarovaya : EAP "PleaseLoveMe123" Mizooleena : EAP "IwannaLoveToo3332" 

En esta etapa, puede reiniciar el servidor strongswan y verificar si la nueva configuración se ha activado:

 $ systemctl restart strongswan $ ipsec statusall Virtual IP pools (size/online/offline): 10.0.1.0/24: 254/0/0 Listening IP addresses: xxx.xxx.38.220 Connections: ikev2-mschapv2: %any...%any IKEv2, dpddelay=35s ikev2-mschapv2: local: [CN=good.citizen.vpn] uses public key authentication ikev2-mschapv2: cert: "CN=good.citizen.vpn" ikev2-mschapv2: remote: uses EAP_MSCHAPV2 authentication with EAP identity '%any' ikev2-mschapv2: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear ikev2-mschapv2-apple: %any...%any IKEv2, dpddelay=35s ikev2-mschapv2-apple: local: [good.citizen.vpn] uses public key authentication ikev2-mschapv2-apple: cert: "CN=good.citizen.vpn" ikev2-mschapv2-apple: remote: uses EAP_MSCHAPV2 authentication with EAP identity '%any' ikev2-mschapv2-apple: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear 

Puede ver que la configuración se activó correctamente y que el certificado está conectado. En esta etapa, ya puede conectarse al servidor VPN, pero no tendrá acceso a Internet. Para liberar clientes en Internet, debe habilitar el reenvío y configurar NAT.

Configuración NAT


Activamos paquetes de reenvío:

 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p 

Activa NAT. Es importante tener en cuenta que esto es solo un ejemplo de una configuración mínima de iptables. Personalice el resto de las reglas según sus necesidades.

ethName0 : reemplácelo con el nombre de su interfaz
10.0.1.0/24 : el rango de direcciones IP que se emitirán a los clientes VPN. Lo pedimos en /etc/ipsec.conf
111.111.111.111 : la dirección IP del punto de salida, en nuestro ejemplo, es la dirección super.cool.guy.vpn

 iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o ethName0 -j SNAT --to-source 111.111.111.111 

Depuración


En esta etapa de la configuración, deberíamos obtener un servidor que funcione completamente, al que los clientes ya puedan conectarse. Antes de continuar, es mejor verificar esto comprobando la conexión.

En caso de problemas de conexión, puede ver el registro en tiempo real:

 journalctl -f -u strongswan 

Inicio al inicio


Si todo tiene éxito, puede agregar strongswan al inicio en el inicio:

 systemctl enable strongswan 

Guardar reglas de iptables


Para guardar las reglas de iptables después del reinicio, hay un paquete especial persistente en iptables . Es importante recordar que guardará el conjunto actual de reglas y lo agregará al inicio.

 apt install iptables-persistent 

Configuración del cliente


La configuración en el lado del cliente es extremadamente simple: solo dígale al cliente la dirección, el nombre de usuario y la contraseña del servidor. Para macOS e iOS, puede crear perfiles de configuración automática que serán suficientes para activar con dos clics.

Configuración de Windows
En las nuevas versiones de Windows, IKEv2 se configura en un asistente simple, al que se puede acceder desde el menú de conexión WiFi.



Windows no establece una ruta predeterminada para dicha conexión, por lo que la instalaremos manualmente. En las propiedades de la conexión VPN, vaya a las propiedades de TCP / IPv4 -> adicionalmente y marque la casilla "Usar una puerta de enlace en una red remota"


clicable

Configuración de MacOS
MacOS admite IKEv2 a partir de la versión 10.11 (El Capitan). La conexión se crea a través del menú de configuración de red.

imagen

Agrega una nueva conexión. El nombre de la conexión es cualquier nombre arbitrario.

imagen

Para autenticar un certificado, debe especificar un nombre de dominio. Al mismo tiempo, en el campo "Dirección del servidor", puede especificar la dirección IP del servidor y el dominio solo en "ID remota", luego la resolución DNS no se realizará para la conexión y sucederá un poco más rápido.

imagen

El nombre de usuario y la contraseña se especifican en el archivo /etc/ipsec.secrets

imagen

Configuración de iOS
La configuración de IOS se puede hacer manualmente a través del asistente, pero es mucho más conveniente usar el perfil de configuración automática de mobileconfig.

La sintonización manual es similar en significado al macOS de escritorio:

Configuración -> VPN -> Agregar configuración VPN

Perfil de configuración automática para dispositivos Apple

Perfiles de configuración automática .mobileconfig es un archivo XML con configuraciones que pueden configurar cualquier cosa, desde certificados SSL hasta conexiones VPN.

El usuario solo necesita hacer clic en el archivo, y todas las configuraciones necesarias se instalarán automáticamente.

Ejemplo de configuración para conectarse a nuestro servidor IKEv2.
Para configurar un archivo para su configuración, solo edite algunos parámetros en esta plantilla:

AuthName : nombre de usuario del archivo /etc/ipsec.secrets
AuthPassword : contraseña de usuario /etc/ipsec.secrets
RemoteAddress : dominio o dirección IP del servidor
RemoteIdentifier : dominio para el que se emite el certificado

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <dict> <key>IKEv2</key> <dict> <!-- Username and password from ipsec.secrets --> <key>AuthName</key> <string>IrinaYarovaya</string> <key>AuthPassword</key> <string>PleaseLoveMe123</string> <!-- Hostname or IP address of VPN server. Chosing IP address instead of DNS name can avoid issues with client DNS resolvers and speed up connection process. --> <key>RemoteAddress</key> <string>123.123.123.123</string> <!-- leftid in ipsec.conf --> <key>RemoteIdentifier</key> <string>good.citizen.vpn</string> <key>AuthenticationMethod</key> <string>Certificate</string> <key>ChildSecurityAssociationParameters</key> <dict> <!-- in ipsec.conf this proposal is: ike=aes256-sha256-modp2048 --> <key>DiffieHellmanGroup</key> <integer>14</integer> <key>EncryptionAlgorithm</key> <string>AES-256</string> <key>IntegrityAlgorithm</key> <string>SHA2-256</string> <key>LifeTimeInMinutes</key> <integer>1440</integer> </dict> <key>DeadPeerDetectionRate</key> <!-- None (Disable) Low (keepalive sent every 30 minutes) Medium (keepalive sent every 10 minutes) High (keepalive sent every 1 minute) --> <string>High</string> <key>ExtendedAuthEnabled</key> <true/> <key>IKESecurityAssociationParameters</key> <dict> <key>DiffieHellmanGroup</key> <integer>14</integer> <key>EncryptionAlgorithm</key> <string>AES-256</string> <key>IntegrityAlgorithm</key> <string>SHA2-256</string> <key>LifeTimeInMinutes</key> <integer>1440</integer> </dict> <!-- Always On OnDemand Rule Cen be disabled in connection preferences by "On Demand" checkbox http://www.v2ex.com/t/137653 https://developer.apple.com/library/mac/featuredarticles/iPhoneConfigurationProfileRef/Introduction/Introduction.html https://github.com/iphoting/ovpnmcgen.rb --> <key>OnDemandEnabled</key> <integer>1</integer> <key>OnDemandRules</key> <array> <dict> <key>Action</key> <string>Connect</string> </dict> </array> </dict> <key>IPv4</key> <dict> <key>OverridePrimary</key> <integer>1</integer> </dict> <key>PayloadDescription</key> <string>Configures VPN settings</string> <key>PayloadDisplayName</key> <string>VPN</string> <key>PayloadIdentifier</key> <string>com.apple.vpn.managed.96C1C38F-D4D6-472E-BA90-9117ED8896B5</string> <key>PayloadType</key> <string>com.apple.vpn.managed</string> <key>PayloadUUID</key> <string>96C1C38F-D4D6-472E-BA90-9117ED8896B5</string> <key>PayloadVersion</key> <integer>1</integer> <!-- VPN connection name in Network Preferences --> <key>UserDefinedName</key> <string>London VPN</string> <key>VPNType</key> <string>IKEv2</string> </dict> </array> <!-- Set the name to whatever you like, it is used in the profile list on the device --> <key>PayloadDisplayName</key> <string>My Super IKEv2 VPN</string> <!-- A reverse-DNS style identifier (com.example.myprofile, for example) that identifies the profile. This string is used to determine whether a new profile should replace an existing one or should be added. --> <key>PayloadIdentifier</key> <string>vpn.googd.citizen</string> <!-- A globally unique identifier, use uuidgen on Linux/Mac OS X to generate it --> <key>PayloadUUID</key> <string>F3FAD91C-019C-4A79-87A1-CF334C583339</string> <key>PayloadType</key> <string>Configuration</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist> 

Configuración de Android
Desafortunadamente, Android es el único de los sistemas operativos populares que aún no tiene soporte incorporado para IKEv2. Para conectarse, puede usar el cliente oficial de Strongswan de PlayMarket

Resumen


Mostramos la opción de configuración del servidor más simple con puntos de entrada y salida espaciados. Esta configuración le permite obtener la velocidad máxima de VPN, ya que no utiliza túneles adicionales entre los servidores, a pesar de que las direcciones IP de los puntos de entrada y salida están en subredes diferentes. Este enfoque le permite experimentar más al conectar más de dos direcciones IP al servidor.

El protocolo IKEv2 es perfecto para usarlo en el sistema operativo de escritorio para el trabajo diario, ya que está integrado de forma nativa en el sistema y, en igualdad de condiciones, le permite obtener más velocidad que a través de programas VPN de terceros.





Suscríbase a nuestro desarrollador de Instagram


Source: https://habr.com/ru/post/469879/


All Articles