Ich habe versucht, Reverse-Tethering auf meinem Handy zum Laufen zu bringen. Ich habe ein Galaxy S5 (g900t), auf dem Cyanogenmod 13 (Marshmallow) läuft ... gerootet und mit Busybox.
*Bearbeiten: Ich habe einige Fortschritte gemacht. Ich habe dies auf meinem Ubuntu-Rechner ausgeführt:
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
Und dann habe ich das in der Adb-Shell ausgeführt:
dhcptool rndis0
Ich kann tun wget -s google.com
. Allerdings funktioniert es nur als 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'
Ich habe überprüft, dass ich wget
als normaler Benutzer tun kann, wenn ich über ein Mobilfunknetz oder WLAN verbunden bin.
Warum sollte ich anscheinend su
als normaler Benutzer auf das Internet zugreifen können, aber nicht? Ich habe meine ifconfig
und route
Einstellungen überprüft, und sie sehen alle gleich aus, entweder als su
oder normaler Benutzer. Sieht jemand, was ich falsch mache?
Diese Einstellungen sind alle gleich, egal ob ich sie so ausführe su
oder nicht. Hier ist meine 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)
Und hier ist meine route
Tabelle:
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
Und es scheint, dass meine DNS-Server richtig eingestellt sind:
root@klte:/ # cat /etc/resolv.conf
nameserver 8.8.4.4
nameserver 8.8.8.8
Ich bin erst kürzlich über eine meiner Meinung nach viel bessere (oder zumindest einfachere) Lösung für Reverse Tethering gestolpert: gnirehtet
Es richtet ein VPN auf dem Android ein, das den gesamten Datenverkehr über eine Portverbindung umleitet adb reverse
. Benötigt nicht einmal root.
Ich weiß, dass ich hier eine alte Frage beantworte, aber ich bin auf dasselbe Problem mit Android Nougat (LineageOS 14.1) gestoßen, und ich könnte genauso gut die Lösung posten, die ich gefunden habe:
Führen Sie nach dem Start des Tetherings Folgendes wie root
auf dem Telefon (bis ) aus:adb
dhcptool rndis0
ip rule add from all lookup main pref 99
(Die Befehle, die auf dem Computer ausgeführt werden sollen, sind hier nicht in Frage; in meinem Fall musste modprobe usbnet
und muss ich modprobe rndis-host
sogar die usb0
Schnittstelle sehen, aber das ist ein ganz anderes Problem).
Die Sache ist, dass Android ein ziemlich komplexes Routing-Setup mit unterschiedlichen Routing-Tabellen verwendet (siehe unten für einen Dump). Der dhcptool rndis0
Befehl fügt die entsprechenden Routing-Leitungen in die Standard- main
Routing-Tabelle ein, aber die main
Tabelle wird nur unter einer Regel konsultiert, die besagt uidrange 0-0
(d. h. für root
). Die zweite Zeile oben erzwingt die Verwendung der main
Routing-Tabelle für alles. Dies sollte anschließend mit rückgängig gemacht werden
ip rule del pref 99
Das scheint für mich zu funktionieren, aber ich bin mir nicht sicher, wie robust es ist. Vielleicht bricht es auf subtile Weise etwas, von dem ich nicht wusste, dass es es tun würde. Vielleicht gibt es einen Android-spezifischen Befehl auf höherer Ebene, der besser ist und von dem ich nichts weiß.
Zur Erinnerung kann man verwenden ip rule show
, um die aktuellen Routing-Regeln anzuzeigen und ip route show table wlan0
den Inhalt der Tabelle wlan0
(z. B.) anzuzeigen.
Als Referenz sind hier die Routing-Regeln, die ich auf meinem Android gefunden habe, nachdem Tethering eingerichtet wurde:
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
Ich kann nur bestätigen, dass 'Android 6.0.1' das gleiche Verhalten hat. USB-Reverse-Tethering funktioniert nur für den Benutzer „root“. Für den Benutzer 'shell' funktioniert es nicht.
Jetzt verwende ich "adb.exe shell", um mich bei Android anzumelden -> su -> ifconfig rndis0 192.168.137.2 netmask 255.255.255.0 -> route add default gw 192.168.137.1 dev rndis0 Jetzt testen:
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
Hier hängt es einfach, wget gibt keine Antwort und nach einiger Zeit: wget: bad address 'google.com'
Update: In der Registry die ICS-Einstellung HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters ScopeAddress "192.168.137.1" => "192.168.42.1" ändern
da Android dies standardmäßig verwendet, wie Sie hier sehen können: 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 Maske: 255.255.255.0
Jetzt ist die einzige Zeile, die übrig bleibt, um USB-Reverse-Tethering für mindestens root zu aktivieren:
route add default gw 192.168.42.1 dev rndis0
Jetzt experimentiere ich gerade mit ip route ip route help ....
FD_