1 votos

No se puede comunicar con una WiFi local con los datos móviles activados

Estoy desarrollando una aplicación que debe funcionar en una red WiFi privada sin acceso a Internet. Es un controlador para una escultura digital interactiva. La dirección IP del servidor con el que debe hablar en la red privada está conectada a la aplicación.

He comprobado que la aplicación no puede hablar con el servidor en el WiFi mientras los datos móviles estén activados. En cuanto los desactivo, todo funciona como se esperaba. Supongo que por alguna razón sigue intentando contactar con el servidor en la interfaz de datos móviles.

Aquí está la tabla de enrutamiento IP del kernel cuando tanto el WiFi como los datos móviles están conectados y la aplicación no funciona:

10.229.237.220/30 dev rmnet_data0 proto kernel scope link src 10.229.237.221 
192.168.26.0/24 dev wlan0 proto kernel scope link src 192.168.26.102 

Con los datos móviles desactivados y la aplicación funcionando correctamente:

192.168.26.0/24 dev wlan0 proto kernel scope link src 192.168.26.102 

Todo esto me parece correcto.

¿Hay alguna configuración especial (puerta de enlace predeterminada, servidor de nombres, etc.) que deba añadir a mi configuración de red para que el tráfico de la aplicación se dirija a la interfaz WiFi? ¿Alguna otra idea de por qué no se comunica con el servidor?

1voto

Malaq Puntos 115

Android tiene una opción para cambiar a datos celulares si la conexión wifi es de baja velocidad/señal. Sospecho que el mismo mecanismo se dispara cuando la red wifi no tiene definida una puerta de enlace por defecto, por lo que todas las conexiones salientes eligen por defecto la IP de origen correspondiente a la interfaz celular.

Para asegurarte de que puedes hablar con hosts WiFi donde no hay conectividad a Internet, primero consulta la dirección IP WiFi y luego úsala explícitamente como IP de origen en la aplicación.

Si lo dejas por defecto, las conexiones salientes se harían con la dirección IP del celular que luego iría a la puerta de enlace del celular.

Alternativamente, si puedes Rootear el dispositivo, puedes entonces copiar el binario tcpdump y capturar el tráfico sobre la interfaz WiFi y celular para confirmar la IP de origen de los paquetes enviados por tu aplicación. Las instrucciones para esto están fuera del alcance de esta pregunta, pero aquí hay un buen cómo hacerlo: https://www.andreafortuna.org/2018/05/28/how-to-install-and-run-tcpdump-on-Android-devices/

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X