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.

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

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

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.