resumen
- pregunta
- ¿Se puede cambiar la IP pública de un celular Android solo desde el PC, por ADB y sin root?
- método
- Medir la IP pública, cambiar el estado de la red por ADB, esperar la reconexión, volver a medir, y guardar los registros del radio de cada intento
- resultado
- Con
settings put global airplane_mode_onno; concmd connectivity airplane-modesí. Prueba real: IP nueva al primer intento, en 20 s - límites
- Un celular (Redmi Note 13 Pro+, Android 16) y un operador (Claro Colombia). Con CGNAT, una IP nueva no está garantizada en cada ciclo
La pregunta era concreta: ¿se puede cambiar la IP pública de un celular Android solo desde el PC, por ADB y sin root? Mucha gente da por hecho que activar el modo avión siempre trae una IP nueva, y yo quería comprobarlo con evidencia
Lo que se cree
La idea circula mucho: si quieres otra IP, activa el modo avión unos segundos y vuelve a desactivarlo. Y muchas veces funciona, por eso se repite. El problema está en el «siempre»: a veces la IP sale igual, y no siempre por la misma razón
Qué pasa de verdad
Para entenderlo hay que separar dos IP que se suelen confundir. Cuando el celular usa datos móviles, abre una sesión de datos con la red del operador (en LTE se llama conexión PDN), y el núcleo de esa red le asigna una IP. Con muchos operadores esa IP es privada: el celular no sale a internet con ella, sino a través de un CGNAT, un NAT del operador que reparte unas pocas IP públicas entre muchísimos usuarios
celular
│ sesión de datos
▼
torre ──► núcleo del operador
│ asigna una IP privada (por ejemplo 10.x.x.x o 100.64.x.x)
▼
CGNAT
│ la traduce a una IP pública compartida
▼
lo que ve internet: 190.130.xxx.204El rango 100.64.0.0/10 existe justamente para esto: el RFC 6598 lo reservó para el espacio entre el operador y su CGNAT. Y el RFC 6888 pide que, por defecto, un CGNAT mantenga la misma IP pública para una misma IP interna mientras dure su uso («paired pooling»), así las conexiones de un usuario no salen por direcciones distintas
Cuando el modo avión apaga el radio de verdad, esa sesión se cierra. Al volver, el celular abre una sesión nueva y el operador le vuelve a asignar una IP, que normalmente es otra. Pero lo que ve internet depende de qué dirección pública le toque en el CGNAT: puede ser otra, o puede repetirse la de antes
Por eso el resultado no es seguro. Hay al menos tres razones para que la IP salga igual:
- El radio no se apagó de verdad. Si solo cambia un ajuste, la sesión sigue abierta y el operador no tiene por qué darte otra IP. Es justo lo que pasó en mi primer intento
- El CGNAT te vuelve a dar la misma IP pública. La sesión es nueva, pero la dirección compartida que te toca puede repetirse
- Lo que se mide no es la red móvil. Si el Wi-Fi sigue encendido, el tráfico sale por el internet de la casa, y esa IP no cambia por más veces que actives el modo avión
ideaEn resumen: el modo avión no es lo que cambia la IP. Lo que la puede cambiar es que la sesión de datos se cierre y se abra otra; el modo avión es solo una forma de provocarlo, y no siempre lo logra
El primer intento
Los modos A y B del IP Rotator usaban esto:
$ adb shell settings put global airplane_mode_on 1Parecía funcionar, porque el ajuste cambiaba. Pero los registros del radio (logcat -b radio) contaban otra historia: el radio nunca soltaba la torre. El comando solo cambiaba un valor guardado, así que el operador mantenía la misma sesión de CGNAT y la misma IP
En diciembre de 2025 la conclusión quedó escrita en el README de la v0.1.0: ADB no podía hacerlo sin permisos de sistema
El comando correcto
Seis meses después, mientras armaba Goket (mi panel de red), Claude encontró otro camino:
$ adb shell cmd connectivity airplane-mode enable $ adb shell cmd connectivity airplane-mode disable
La diferencia está en por dónde pasa. Este comando va por ConnectivityService, el mismo camino que usa el botón del sistema, y sí apaga el radio de verdad. Funciona sin root desde Android 12. En Android 16, en cambio, el aviso viejo de AIRPLANE_MODE ya ni siquiera se puede mandar desde ADB: lanza SecurityException
Los detalles que hicieron falta
El comando solo no alcanzaba. Hicieron falta tres cosas más:
- El Wi-Fi del celular se apaga durante la prueba (
svc wifi disable). Si no, el tethering sale por el internet de la casa y la IP que se mide no es la del operador - Con CGNAT no hay garantía de IP nueva al primer intento, así que se repiten ciclos cortos: 7 s apagado, 12 s para estabilizarse, hasta 5 veces
- La IP se mide por la interfaz del tethering (
curl --interface), así el PC no pierde su propio internet en ningún momento
En la prueba real del 30 de septiembre de 2026 la IP cambió al primer intento, en 20 s. Salió como la v0.2.0
Otras ideas, sin probar
Si lo que cambia la IP es que la sesión de datos se cierre y se abra otra, el modo avión no debería ser el único camino. Dos ideas que quedan anotadas, todavía sin probar:
- Apagar y prender solo los datos móviles. Cerraría la sesión de datos sin apagar todo el radio, y quizás sería más rápido que un ciclo completo de modo avión
- Cambiar el tipo de red preferida. Pasar de 5G o 4G a 3G y volver obligaría al celular a registrarse de nuevo en la red, y con eso a abrir otra sesión
Si alguna funciona, habría que comprobarla igual que el modo avión: medir la IP antes y después, y mirar los registros del radio
Límites
- Lo medido sale de un solo celular y un solo operador. Otro operador puede asignar las IP de otra forma, o incluso dar una IP fija por línea
- Cuántos ciclos hacen falta para una IP nueva depende del CGNAT del operador; los 5 intentos son un tope práctico, no un número medido en general
- Las dos ideas de arriba son hipótesis: no hay datos todavía
Lo que me quedó
La conclusión de diciembre era cierta para ese comando: con él, de verdad no se podía. Lo que estaba mal era dar la pregunta por cerrada cuando lo que había fallado era la herramienta. Y fueron los registros del radio, no la intuición, los que mostraron dónde estaba el problema
Preguntas frecuentes
¿Activar el modo avión cambia la IP?
A veces. Si el radio se apaga de verdad, la sesión de datos se cierra y al volver el operador asigna otra IP, pero con CGNAT la IP pública que ve internet puede repetirse. Y si el Wi-Fi está encendido, lo que se mide es la IP de la casa, que no cambia
¿Por qué mi IP no cambia aunque active el modo avión?
Las causas más comunes son tres: el Wi-Fi seguía conectado, el CGNAT del operador te volvió a dar la misma IP pública, o el método usado no apagó el radio de verdad (por ejemplo, cambiar el ajuste airplane_mode_on por ADB)
¿Qué es CGNAT?
Un NAT que pone el operador: muchos clientes reciben una IP privada y salen a internet compartiendo unas pocas IP públicas. Por eso la IP que ve una página web no es la que tiene tu celular
¿Cómo cambiar la IP de un celular Android desde el PC sin root?
Por ADB, con cmd connectivity airplane-mode enable y luego disable, que pasa por el servicio de conectividad del sistema y sí apaga el radio. Conviene apagar el Wi-Fi del celular durante la prueba y repetir el ciclo si la IP sale igual
¿Qué formas hay de rotar la IP de un celular?
La probada en esta nota es un ciclo real de modo avión por ADB. Otras ideas, sin probar todavía, son apagar y prender solo los datos móviles o cambiar el tipo de red preferida para forzar un registro nuevo
Referencias
- RFC 6888 · Common Requirements for Carrier-Grade NATs (CGNs) · rfc-editor.org/rfc/rfc6888
- RFC 6598 · IANA-Reserved IPv4 Prefix for Shared Address Space (100.64.0.0/10) · rfc-editor.org/rfc/rfc6598
- 3GPP TS 23.401 · GPRS enhancements for E-UTRAN access (PDN connections in LTE)
- Android Debug Bridge (adb) · official documentation · developer.android.com/tools/adb
- Nuulz/android-ip-rotator-adb · source code and v0.2.0 · github.com/Nuulz/android-ip-rotator-adb