Es posible establecer una VPN punto a punto sin "abrir" puertos?
-
Hola compañeros,
Vereis, en un proyecto que estoy haciendo, necesito de una VPN que comunica un PC (Servidor) y un Android (Cliente), con el software/protocolo OpenVPN.Lo tengo todo funcionando, pero, tengo un GRAN handicap con el tema de abrir el puerto al PC (Servidor) ya que cada vez la cosa esta mas chunga entre CG-NAT, firewalls empresariales, etc...
Actualmente los usuarios de mi sistema que por lo que fuera no podian abrir/redireccionar el puerto, se compraban un modem usb 3g/4g y aire, pero ultimamente ya ni por estas ya que toda la red MasMovil ya no dispone de IP publica para conexiones mobile y algunas SIM's de Vodafone empiezan a hacerlo tambien, a pesar de tener los APN bien configurados.
Un claro ejemplo es que tengo un Modem 3G + SIM vodafone + configuracion APN que siempre me da IP PUBLICA y en cambio meto la sim vodafone de un usuario y nada, detras de un NAT, no hay manera de obtener ip publica, y en una tarde de locura me dio por llamar al servicio tecnico pero bueno, ya os podeis imaginar, 1 hora perdida intentando explicar para que lo unico que me decian era venderme el paquete de "ip fija".En definitiva, una solucion pasaria por alquilar servidores VPS y hacer una red triangular, donde el servidor fuera el VPS y los clientes el PC y el Smartphone, pero eso conlleva grandes pegas:
- Mayor coste (Alquiler de VPS + trafico generado)
- Menor velocidad y mayor latencia que en punto a punto
- Cambios en la infraestructura del sistema
Entonces estaba yo pensando a ver si es que se me esta escapando alguna solucion que no tenga contemplada, si hay ALGUNA manera de hacer una VPN punto a punto sin necesidad de abrir/redireccionar puertos.
Asi, sin tener ni idea, estaba pensando en algo tipo, el servidor lanza una peticion hacia el cliente para que el NAT quede a la espera de la respuesta del cliente (que obviamente no va a contestar porque no recibira la peticion, pero que un servidor le diera un toque al cliente para que justo en ese momento intentase la conexion y como estaria el NAT a la espera de la respuesta, pues que la pudiera recibir. QUizas lo que digo es una locura, o quizas no, pero ya no se que mas intentar y/o probar.
Obviamente si IPv6 estubiera ya bien desplegado se acabarian los problemas pero como siempre, vamos a la ultima en tecnologia.
Un saludo y perdonad por el santo tocho que os he dejado aqui para reflexionar.
-
No es mi tema, pero buscando información creo que la solución va por algo llamado Hole punching si quieres buscar más.
https://github.com/samyk/pwnat
Hole punching is a technique in computer networking for establishing a direct connection between two parties in which one or both are behind firewalls or behind routers that use network address translation (NAT). To punch a hole, each client connects to an unrestricted third-party server that temporarily stores external and internal address and port information for each client. The server then relays each client's information to the other, and using that information each client tries to establish direct connection; as a result of the connections using valid port numbers, restrictive firewalls or routers accept and forward the incoming packets on each side.
Yo la única VPN que tengo montada es a través del propio firewall (sonicwall) con su propia aplicación para clientes Windows/Linux/Android.
-
@krampak dijo en Es posible establecer una VPN punto a punto sin "abrir" puertos?:
No es mi tema, pero buscando información creo que la solución va por algo llamado Hole punching si quieres buscar más.
https://github.com/samyk/pwnat
Hole punching is a technique in computer networking for establishing a direct connection between two parties in which one or both are behind firewalls or behind routers that use network address translation (NAT). To punch a hole, each client connects to an unrestricted third-party server that temporarily stores external and internal address and port information for each client. The server then relays each client's information to the other, and using that information each client tries to establish direct connection; as a result of the connections using valid port numbers, restrictive firewalls or routers accept and forward the incoming packets on each side.
Yo la única VPN que tengo montada es a través del propio firewall (sonicwall) con su propia aplicación para clientes Windows/Linux/Android.
Efectivamente yo tambien he dado con esta tecnica, resulta que es lo que hace, por ejemplo, Teamviewer. Estoy haciendo pruebas ya, tanto si me funciona como si no ya os voy informando.
Saludos!
-
Voy a actualizar este tema con los resultados "temporales" obtenidos.
En efecto gracias a la tecnica del UDP HOLE PUNCHING he podido connectar conectar un servidor y un cliente de VPN sin necesidad de abrir puertos, pero hay un PERO.
Como bien sabreis ultimamente a los ISP les ha dado por poner CG-NAT, el cual es una ENORME PUTADA, ya que la tecnica del UDP HOLE PUNCHING no funciona bajo un CG-NAT ya que hace un PORT RANDOMIZE y entonces el Source Port del servidor VPN cambia a cada conexion que hace, por ejemplo.
Si tengo un PC con el servidor VPN en el puerto 1194 UDP y detras de un CG-NAT, al lanzar paquetes hacia otro equipo seguramente ese 1194 sale del CG-NAT por otro puerto, el cual NO SABEMOS ya que aplica un PORT RANDOMIZE y quizas acaba saliendo por el 55123.
He probado a usar un 3r servidor donde el "server vpn" manda unos paquetes para poder descubrir el SRC PORT tras el CG-NAT, pero claro, esa asignacion a la espera de respuesta queda solo para ese 3r servidor, a la que el cliente intenta conectar por ese agujero el CG-NAT bloquea la conexion ya que no era el destinatario original, pues en eso consiste el HOLE PUNCHING.
Tenéis alguna idea o conocéis algun procedimiento para "saltar" esta barrera? Se que es posible pedir a la compañia que nos saque del CG-NAT, pero, eso no es una opcion valida porque al final el que correra el servidor VPN puede que este incluso detras de una conexion de movil compartida, donde no hay manera de abrir/redireccionar puertos tampoco.
Se que lo que pido es bastante complejo, pero bueno, nunca se sabe donde puede dar uno con la solución!
Un saludo.
P.D: @krampak te cito por si acaso
-