Exclusión de ruta de VPNService de Android
Estoy utilizando OpenVPN y la nueva API VpnService que viene con ICS (Android 4.X)
¿Existe una manera de definir una exclusión de una dirección IP del túnel VPN? (De modo que el tráfico que está destinado a ese ip será enrutado directamente a la red, sin pasar por el túnel VPN). Estamos tratando de reducir la carga y los costes de la red en nuestra VPN, al permitir que los servicios intensivos de ancho de banda como youtube pasen sin cifrar, al mismo tiempo que garantizan el resto del tráfico.
- ¿Existe una API de proveedor VPN para Android?
- OpenVPN y Android NDK
- ¿Cómo puedo conectar y desconectar las conexiones vpn de forma programática mediante la aplicación "openvpn connect" de android en combinación con intents?
- ¿Cómo utilizar VPN en Android?
- Android: Código de ejemplo para usar la conexión VPN propia en Android 4.0 mediante VPNService API
A mi entender, antes de que Android abra el dispositivo Tun, puede recibir una lista de rutas que especifica qué tráfico DEBE pasar en la VPN y no qué tráfico excluir:
Documentación de la API de VPNSerivice.Builder
- Conexión de Android OpenVPN
- Org.jetbrains? ¿Qué es?
- Cómo compilar un archivo "tun.ko" para OpenVPN?
- ¿Cualquier organismo sabe cómo hacer una conexión VPN mediante programación usando el protocolo de servidor L2TP / IPSec en android?
- Cómo fusionar la aplicación de cliente OpenVPN con otra aplicación para Android?
Respuesta corta no.
Respuesta larga. Usted tiene que hacer varias rutas por (por ejemplo, utilizando 32 rutas de / 1 a / 32 para excluir un ip). Y puede analizar los paquetes y proxy de estos utilizando un nuevo socket protegido. (Posible intensivo de CPU)
Necesitaba excluir una subred WiFi local de la VPN. Por ejemplo, si necesita excluir la subred 192.168.240.90 / 21 (representación binaria es 11000000.10101000.11110000.01011010), a continuación, debe agregar después de 21 rutas a su VpnService ( Representación binaria):
00000000.00000000.00000000.00000000 / 1 10000000.00000000.00000000.00000000 / 2 11100000.00000000.00000000.00000000 / 3 11010000.00000000.00000000.00000000 / 4 11001000.00000000.00000000.00000000 / 5 11000100.00000000.00000000.00000000 / 6 11000010.00000000.00000000.00000000 / 7 11000001.00000000.00000000.00000000 / 8 11000000.00000000.00000000.00000000 / 9 11000000.11000000.00000000.00000000 / 10 11000000.10000000.00000000.00000000 / 11 11000000.10110000.00000000.00000000 / 12 11000000.10100000.00000000.00000000 / 13 11000000.10101100.00000000.00000000 / 14 11000000.10101010.00000000.00000000 / 15 11000000.10101001.00000000.00000000 / 16 11000000.10101000.00000000.00000000 / 17 11000000.10101000.10000000.00000000 / 18 11000000.10101000.11000000.00000000 / 19 11000000.10101000.11100000.00000000 / 20 11000000.10101000.11111000.00000000 / 21
La idea es invertir el bit en la posición de prefijo (de la derecha) y hacer ceros todos los bits después de la posición del prefijo. Como resultado, todos los paquetes excepto aquellos que van a la subred local coincidirán con una u otra ruta