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
puedo wget -s google.com
hacer 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 wget
como usuario regular cuando estoy conectado a través de red celular o wifi.
¿Por qué aparentemente podría acceder a Internet como su
, pero no como un usuario normal? Revisé mis configuraciones ifconfig
y route
, y todas se ven iguales a las de su
un usuario regular. ¿Alguien ve lo que estoy haciendo mal?
Estas configuraciones son todas iguales, ya sea que las ejecute su
o 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 route
tabla:
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
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 reverse
conexió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 root
en el teléfono (a través adb
de ) 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 usbnet
e modprobe rndis-host
incluso ver la usb0
interfaz, 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 rndis0
comando coloca las líneas de enrutamiento apropiadas en la main
tabla de enrutamiento estándar, pero la main
tabla 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 main
tabla 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 show
para mostrar las reglas de enrutamiento actuales y ip route show table wlan0
para 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.
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...
FD_