Supongo que te refieres a crear como crear desde cero, que no es la mejor solución para un consumidor, ¡pero es muy divertido si quieres aprender!
Google tiene un código muy simple para que comiences. El cliente está escrito para Android. samples / ToyVpn – plataforma / desarrollo – Git en Google
Lado del cliente:
- ¿Cuándo deberías usar una VPN?
- Estoy en una cafetería usando su conexión Wi-Fi gratuita. Si uso un cliente VPN en mi Mac, ¿eso protege mis contraseñas / privacidad? (¿Estoy a salvo?)
- ¿Cuál es la mejor VPN para obtener BBC iPlayer en los EE. UU. En un iPad 3?
- ¿Cómo se desarrolló Hotspot Shield? ¿Tiene éxito en la protección de redes?
- ¿Cómo afectará a su base de suscriptores el anuncio de Netfilx para bloquear a los usuarios mundiales que usan 'desbloqueadores' (VPN y proxies)?
El software de su cliente primero debe establecer una conexión con el servidor (llamémoslo ‘túnel’) directamente a través de Internet. El software del cliente debe obtener una dirección IP, puerta de enlace y máscara de red para su cliente y otras configuraciones (por ejemplo, servidores DNS para usar). El software del cliente debería configurar la red del cliente para pensar que está conectada a una red con esas especificaciones. Puede usar la interfaz TUN + manipulación de la tabla de enrutamiento en Linux, VPNService API en Android o NetworkExtention API para iOS para reunir todos los paquetes salientes en un solo archivo para leer. (Tenga en cuenta que estas plataformas móviles también están utilizando TUN + manipulación de la tabla de enrutamiento debajo).
Debe escribir un software que lea los paquetes uno por uno de un archivo (no es un archivo habitual, en * nix puede interactuar con todo como archivos), los cifra y los envía a su propio software de servidor, probablemente en forma de paquetes UDP .
Además, cuando recibió paquetes del software del servidor a través de su túnel, primero descifra la carga útil e inyecta en la red del cliente escribiendo en ese mismo archivo TUN. El sistema del cliente reaccionará ante él como si hubiera recibido el paquete a través de una interfaz de red real.
Lado del servidor:
¡Haz todo en orden inverso!
Configure una interfaz TUN virtual con la máscara de red deseada y cada vez que alguien quiera conectarse al servidor, asígneles una dirección IP interna vacía de ese espacio IP.
Cada vez que reciba un paquete del lado del cliente, descifre la carga útil y envíela a su dispositivo virtual. Si configura el sistema operativo de su servidor para que haga el NAT por usted, el sistema operativo hará el resto por usted.
Cada vez que recibe un paquete del mundo exterior, dirigido a cualquiera de sus usuarios, puede leer la dirección IP de destino, encontrar el cliente al que asignó esa dirección, cifrarlo y enviarlo a través del túnel de ese usuario.
Hay un millón de agujeros en esta configuración simple dependiendo de su caso de uso, ¡pero es un buen lugar para comenzar!