1 votos

Configurar el tethering USB manualmente con Root

He agotado los métodos documentados de habilitación programada de la conexión USB :

  • El service método no funciona en mi teléfono (Samsung Note 4). Parece que es una especie de API protegida, y pinchando desde adb no tiene ningún efecto.

  • El shell input no es aplicable, ya que requiere que el dispositivo esté desbloqueado, y no parece haber una forma de desbloquear de forma programada y no destructiva un dispositivo bloqueado con una huella digital.

Así que estoy estudiando la posibilidad de conseguir este objetivo "por las malas", es decir, hacer todo lo que hace el espacio de usuario de Android cuando se pulsa la casilla de anclaje USB.

Por lo que sé, esto implica los siguientes pasos (la mayoría de los cuales serían similares a cómo lo harías en una máquina Linux):

  1. Establezca una conexión IP con el ordenador anfitrión a través de USB. Esto implica poner el USB en rndis modo, configurar rutas, asignar una IP, etc.

    Ya he averiguado cómo conseguirlo y he publicado la respuesta aquí .

  2. Lanzar un dnsmasq por ejemplo, para asignar una IP al PC conectado a través de DHCP, y reenviar las solicitudes de DNS.

    Este paso no debería ser necesario si no necesitas la detección del servidor DNS y asignas tú mismo las IPs estáticas en las interfaces USB.

  3. Activar el reenvío de IP ( /proc/sys/net/ipv4/ip_forward ).

  4. Preparar iptables para habilitar el reenvío/mascarada.

  5. Actualizar las tablas de enrutamiento para la contabilización del tráfico.

Me las arreglé para escribir un montón de scripts que replican exactamente los efectos visibles (descritos anteriormente) que realiza el sistema operativo Android cuando se habilita el tethering USB a través de su UI. Para crear los scripts, registré el estado del sistema ( iptables -S , ip route show table all ) con y sin tethering, luego convertí las diferencias en comandos de shell para aplicar los cambios al sistema. Sin embargo, mis réplicas siguen siendo insuficientes; alguna parte del sistema sigue sin configurarse, lo que impide que el tráfico pase.

¿Alguien tiene alguna idea de lo que me puede faltar, o de cómo puedo acotar / depurar el problema?

0voto

AquaAlex Puntos 111

Un amigo me hizo saber que hay más de una sysctl para el reenvío (uno global y otro por interfaz, y más para IPv6).

En mi teléfono, los ajustes pertinentes son:

vars=(
    net.ipv4.conf.all.accept_redirects=0
    net.ipv4.conf.all.forwarding=1
    net.ipv4.conf.default.forwarding=1
    net.ipv4.conf.ip6tnl0.forwarding=1
    net.ipv4.conf.lo.forwarding=1
    net.ipv4.conf.p2p0.forwarding=1
    net.ipv4.conf.rmnet0.forwarding=1
    net.ipv4.conf.rmnet1.forwarding=1
    net.ipv4.conf.rmnet2.forwarding=1
    net.ipv4.conf.rmnet3.forwarding=1
    net.ipv4.conf.rmnet4.forwarding=1
    net.ipv4.conf.rndis0.forwarding=1
    net.ipv4.conf.sit0.forwarding=1
    net.ipv4.conf.wlan0.forwarding=1
    net.ipv4.ip_forward=1
    net.ipv6.conf.all.forwarding=2
    net.ipv6.conf.all.proxy_ndp=2
    net.ipv6.conf.default.forwarding=2
    net.ipv6.conf.ip6tnl0.forwarding=2
    net.ipv6.conf.lo.forwarding=2
    net.ipv6.conf.p2p0.forwarding=2
    net.ipv6.conf.rmnet0.forwarding=2
    net.ipv6.conf.rmnet1.forwarding=2
    net.ipv6.conf.rmnet2.forwarding=2
    net.ipv6.conf.rmnet3.forwarding=2
    net.ipv6.conf.rmnet4.forwarding=2
    net.ipv6.conf.rndis0.forwarding=2
    net.ipv6.conf.sit0.forwarding=2
    net.ipv6.conf.wlan0.forwarding=2
) ; sysctl "${vars[@]}"

Con estos y los otros, ¡el reenvío y el tethering funcionan!

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