Anclaje de USB inverso - netcfg no encontrado (marshmallow CM13)

He estado intentando hacer que la conexión inversa funcione en mi teléfono. Tengo un Galaxy S5 (g900t), ejecutando cyanogenmod 13 (marshmallow)... enraizado y con busybox.

* Editar: he hecho algunos progresos. Ejecuté esto en mi máquina ubuntu:

sudo ip addr flush dev eth0
sudo ip addr flush dev usb0
sudo brctl addbr br0
sudo brctl addif br0 eth0 usb0
sudo ip link set dev br0 up
sudo dhclient br0

Y luego ejecuté esto en el shell adb:

dhcptool rndis0

Después de hacer esto, parece que tengo internet.

puedo wget -s google.comhacer Sin embargo, solo funciona como su.

root@klte:/ # wget -s google.com
Connecting to google.com (4.59.40.99:80)
Connecting to www.google.com (4.59.40.99:80)

2000@klte:/ $ wget -s google.com
wget: bad address 'google.com'

Verifiqué que puedo hacer wgetcomo usuario regular cuando estoy conectado a través de red celular o wifi.

Entonces mi pregunta es:

¿Por qué aparentemente podría acceder a Internet como su, pero no como un usuario normal? Revisé mis configuraciones ifconfigy route, y todas se ven iguales a las de suun usuario regular. ¿Alguien ve lo que estoy haciendo mal?


Impresiones de ajustes de configuración

Estas configuraciones son todas iguales, ya sea que las ejecute suo no. Aquí está mi ifconfig:

1|root@klte:/ # ifconfig rndis0
rndis0    Link encap:Ethernet  HWaddr 62:91:0C:85:FD:6B  
          inet addr:192.168.22.6  Bcast:192.168.22.255  Mask:255.255.255.0
          inet6 addr: fe80::6091:cff:fe85:fd6b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:582 errors:0 dropped:0 overruns:0 frame:0
          TX packets:126 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:62495 (61.0 KiB)  TX bytes:15839 (15.4 KiB)

Y aquí está mi routetabla:

root@klte:/ # route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.22.1    0.0.0.0         UG    0      0        0 rndis0
192.168.22.0    *               255.255.255.0   U     0      0        0 rndis0

Y parece que mis servidores DNS están configurados correctamente:

root@klte:/ # cat /etc/resolv.conf  
nameserver 8.8.4.4
nameserver 8.8.8.8
No puedo ayudarlo con toda la configuración de la línea de comandos, pero si está dispuesto a instalar una aplicación, puede probar mi aplicación ReverseTethering NoRoot: play.google.com/store/apps/…

Respuestas (3)

Recientemente me topé con lo que me parece una solución mucho mejor (o al menos más fácil) para el anclaje inverso: gnirehtet

Configura una VPN en Android que redirige todo el tráfico a través de una adb reverseconexión de puerto. Ni siquiera requiere root en absoluto.

Sé que estoy respondiendo una vieja pregunta aquí, pero me encontré con el mismo problema con Android Nougat (LineageOS 14.1), y también podría publicar la solución que encontré:

Ejecute lo siguiente como rooten el teléfono (a través adbde ) después de iniciar la conexión:

dhcptool rndis0
ip rule add from all lookup main pref 99

(los comandos para ejecutar en la computadora no están en cuestión aquí; en mi caso, tuve que hacerlo modprobe usbnete modprobe rndis-hostincluso ver la usb0interfaz, pero ese es un problema completamente diferente).

La cuestión es que Android utiliza una configuración de enrutamiento bastante compleja, con diferentes tablas de enrutamiento (consulte a continuación un volcado). El dhcptool rndis0comando coloca las líneas de enrutamiento apropiadas en la maintabla de enrutamiento estándar, pero la maintabla solo se consulta bajo una regla que dice uidrange 0-0(es decir, para root). Lo que hace la segunda línea anterior es forzar el uso de la maintabla de enrutamiento para todo. Esto se debe deshacer después con

ip rule del pref 99

Esto parece funcionar para mí, pero no estoy seguro de cuán robusto es. Tal vez rompa sutilmente algo que no me di cuenta de que lo haría. Tal vez hay un comando específico de Android de nivel superior que es mejor y que no conozco.

Como recordatorio, se puede usar ip rule showpara mostrar las reglas de enrutamiento actuales y ip route show table wlan0para mostrar el contenido de la tabla wlan0(digamos).

Como referencia, aquí están las reglas de enrutamiento que encontré en mi Android una vez que se configuró la conexión:

0:      from all lookup local 
10000:  from all fwmark 0xc0000/0xd0000 lookup legacy_system 
10500:  from all oif wlan0 uidrange 0-0 lookup wlan0 
10500:  from all oif rndis0 uidrange 0-0 lookup local_network 
13000:  from all fwmark 0x10063/0x1ffff lookup local_network 
13000:  from all fwmark 0x10064/0x1ffff lookup wlan0 
14000:  from all oif wlan0 lookup wlan0 
14000:  from all oif rndis0 lookup local_network 
15000:  from all fwmark 0x0/0x10000 lookup legacy_system 
16000:  from all fwmark 0x0/0x10000 lookup legacy_network 
17000:  from all fwmark 0x0/0x10000 lookup local_network 
18000:  from all iif rndis0 lookup wlan0 
19000:  from all fwmark 0x64/0x1ffff lookup wlan0 
22000:  from all fwmark 0x0/0xffff lookup wlan0 
23000:  from all fwmark 0x0/0xffff uidrange 0-0 lookup main 
32000:  from all unreachable

Solo puedo confirmar que 'Android 6.0.1' tiene el mismo comportamiento. El anclaje inverso USB solo funciona para el usuario 'raíz'. Para el usuario 'shell' no funciona.

  1. El cable USB se conecta a la PC con Windows 7
  2. Habilitado 'Anclaje a red USB' en el teléfono
  3. Ventana instaló automáticamente 'Remote Ndis Driver'
  4. Habilite manualmente 'Compartir la conexión a Internet' en mi LAN Ndis (obtengo Internet) para el 'USB Remote Ndis'. Al hacerlo, Windows asigna a 'USB Remote Ndis' la IP 192.168.137.1
    ^ cuando esta configuración en la PC está completa

Ahora uso "adb.exe shell" para iniciar sesión en Android -> su -> ifconfig rndis0 192.168.137.2 netmask 255.255.255.0 -> route add default gw 192.168.137.1 dev rndis0 Ahora pruébalo:

shell@j5nlte:/ $ su
root@j5nlte:/ #
root@j5nlte:/ # route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.137.1   0.0.0.0         UG    0      0        0 rndis0
192.168.137.0   *               255.255.255.0   U     0      0        0 rndis0

root@j5nlte:/ # wget --s google.com
wget --s google.com
Connecting to google.com (216.58.205.238:80)
Connecting to www.google.de (172.217.20.67:80)

root@j5nlte:/ # exit
shell@j5nlte:/ $ wget --s google.com
wget --s google.com

Aquí simplemente cuelga wget no responde y después de un tiempo: wget: mala dirección 'google.com'

Actualización: en el registro, cambie la configuración de ICS HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters ScopeAddress "192.168.137.1" => "192.168.42.1"

ya que Android lo usa como predeterminado, como puede ver aquí: shell@j5nlte:/ $ ifconfig rndis0 rndis0 Link encap:Ethernet HWaddr E6:D3:B6:BC:7B:D4 inet addr:192.168.42.129 Bcast:192.168.42.255 Máscara: 255.255.255.0

ahora la única línea que queda para habilitar el anclaje inverso USB para al menos root es:

route add default gw 192.168.42.1 dev rndis0

Ahora solo estoy experimentando con ip route ip route help...