¿Cómo manejan los servidores VPN los paquetes que se reciben del cliente VPN?

¿Cómo manejan los servidores VPN los paquetes que se reciben del cliente VPN?

Para empezar, mis conocimientos en materia de redes son bastante limitados, por lo que pido disculpas de antemano si estoy utilizando la terminología incorrecta.

Situación

Estoy intentando crear un prototipo que permitirá a los clientes comunicarse con un servidor web local en una red diferente. El servidor web está alojado en la misma red que el servidor VPN. Hasta ahora, puedo enrutar el paquete del cliente (por ejemplo, SYN) a una interfaz virtual (tun) y enviar el paquete completo al servidor VPN. En el lado del servidor, recibo estos paquetes, cambio las IP de origen y destino y vuelvo a calcular las sumas de verificación dentro de los encabezados.

Para reiterar, el flujo es el siguiente:

  1. El usuario intenta acceder al servidor web con una determinada dirección IP.
  2. El paquete SYN se envía a la interfaz virtual porque coincide con las rutas en la tabla de enrutamiento.
  3. La aplicación Cliente VPN envía el paquete SYN al Servidor VPN a través de una conexión websocket establecida (no debería importar qué tipo de conexión sea)
  4. El servidor VPN recibe el paquete y modifica la dirección IP de origen/destino para que apunte al servidor web real alojado en la misma red.
  5. ¿Cómo envío estos paquetes al servidor web y recibo respuestas del servidor web? Quiero que el cliente se comunique con el servidor web a través del servidor VPN/conexión de socket web establecida. ¿Cuáles son algunas de las opciones que tengo?

Pregunta

¿Cómo puedo enviar estos paquetes al servidor web y recibir paquetes del servidor web para enviarlos al cliente? ¿"Inyecto" paquetes en la interfaz correcta y me aseguro de que mi aplicación envíe las respuestas al cliente? Quiero que el cliente se comunique con el servidor web a través del servidor VPN/conexión de socket web establecida. ¿Cuáles son algunas de las opciones que tengo y, en general, cómo hacen esto los servidores VPN actuales?

lo que he probado

Lo que intenté hacer en el lado del servidor es crear una interfaz virtual (tun) y escribir los paquetes recibidos del cliente en la interfaz. Sin embargo, estos paquetes no se envían al servidor web. El cliente y el servidor se ejecutan en macOS usando Extensiones de red, si eso es de alguna utilidad. El servidor web se está ejecutando 192.168.1.95y modifiqué la IP de origen del paquete 100.64.0.77antes de escribir en la tuninterfaz.

Routing tables

Internet:
Destination        Gateway            Flags        Netif Expire
default            192.168.1.254      UGSc           en0       
default            link#10            UCSI         utun2       
100.64.0.77        100.64.0.77        UH           utun2       
127                127.0.0.1          UCS            lo0       
127.0.0.1          127.0.0.1          UH             lo0       
169.254            link#7             UCS            en0      !
192.168.1          link#7             UCS            en0      !
192.168.1          link#10            UCSI         utun2       
192.168.1.92/32    link#7             UCS            en0      !
192.168.1.99       8c:a9:82:2e:d6:2e  UHLWI          en0    986
192.168.1.254/32   link#7             UCS            en0      !
192.168.1.254      70:f1:96:86:e6:a0  UHLWIir        en0   1196
224.0.0/4          link#7             UmCS           en0      !
224.0.0/4          link#10            UmCSI        utun2       
224.0.0.251        1:0:5e:0:0:fb      UHmLWI         en0       
255.255.255.255/32 link#7             UCS            en0      !
255.255.255.255/32 link#10            UCSI         utun2   

`

Respuesta1

El servidor VPN recibe el paquete y modifica la dirección IP de origen/destino para que apunte al servidor web real alojado en la misma red.

Esto nunca debería ser necesario, porque el cliente ya ha especificado la dirección IP de destino que desea. (VPNencapsularel paquete original dentro de otro paquete IP, sin alterar el encabezado IP original, por lo que el servidor sólo necesita desencapsularlo nuevamente y reenviar el paquete original exactamente como estaba).

NAT se puede hacer (y ocasionalmente se hace), pero más a menudo es trabajo del firewall del sistema operativo y decisión del administrador del sistema; no debería hacerlo el software VPN por sí solo. Y en general, las comunicaciones dentro de una red interna no debennecesidadNAT; Su uso suele ser una indicación de que el enrutamiento elemental de su red no está configurado correctamente.

¿Cómo envío estos paquetes al servidor web y recibo respuestas del servidor web? Quiero que el cliente se comunique con el servidor web a través del servidor VPN/conexión de socket web establecida. ¿Cuáles son algunas de las opciones que tengo?

Normalmente, el servidor VPN tendrá una interfaz virtual exactamente igual al cliente VPN y utilizará exactamente los mismos mecanismos para producir y recibir paquetes. (Algunos crearán interfaces virtuales dedicadas por cliente, otros tendrán una única interfaz para todos los clientes). Si su cliente está utilizando una tuninterfaz, su servidor puede hacer lo mismo.

información relacionada