java - poner - software servidor vpn
Cómo escribir un servidor VPN (1)
Empezaría mirando el código fuente de OpenVPN . No es java, pero debería ser suficiente para entender los principios.
He decidido escribir mi propio servidor VPN de peso ligero en Java. Desde el punto de vista de la programación, me parece que un servidor VPN es solo un proxy de paso que encripta el tráfico del cliente y lo desencripta en el servidor. ¿Alguien puede indicarme un esquema de escribir este tipo de servidor?
Sé que hay muchos fuera de la caja e incluso de código abierto, pero desafortunadamente, aunque conozco varios lenguajes de programación web, los ejemplos de código C que he visto no están documentados / estructurados de tal manera que los pueda entender.
Las partes que me imagino que necesito son:
- Una fábrica de hilos para objetos cliente.
- Un conector de zócalo para clientes.
- Método para crear el encabezado de autenticación IPSec (AH)
- Método para crear la carga de seguridad de encapsulación de IPSec (ESP)
- Algo para la Asociación de seguridad de Internet y el Protocolo de administración de claves (ISAKMP)
- Un intercambio de claves de Internet (IKE)
- Módulos de autenticación de certificados PKI
- Un repositorio de certificados (SQLLite)
- Generación de claves de Oakley (para IKE e ISAKMP)
- Alguna prevención anti-repetición de paquetes.
Las partes para las que planeo usar módulos genéricos (y crear adaptadores para) son los algoritmos criptográficos (AES, aunque es preferible que aparezcan ventanas como DES / 3DES - Noobs)
Si alguien puede agregar más detalles a las partes que son necesarias para un servidor IPSec vpn, no dude en contribuir. Dado que es necesario ejecutar esto en el hardware de linux más antiguo, por lo que puedo decir, el servidor debería ser IPSec en lugar de un hotness SSLVPN. La plataforma de destino es una vieja caja de inteligencia de 1.5 Ghz que instalé con 2 GB de RAM DDR2, disco duro duplicado de 100 GB y 2 Gigabit Nic.
En el lado positivo, ya que hay tantos tipos de VPN del lado del cliente, estoy bastante seguro de que no necesito crear uno para mis necesidades.