USB-Reverse-Tethering - netcfg nicht gefunden (Marshmallow CM13)

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

Danach scheine ich Internet zu haben.

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 wgetals normaler Benutzer tun kann, wenn ich über ein Mobilfunknetz oder WLAN verbunden bin.

Also meine Frage ist:

Warum sollte ich anscheinend suals normaler Benutzer auf das Internet zugreifen können, aber nicht? Ich habe meine ifconfigund routeEinstellungen überprüft, und sie sehen alle gleich aus, entweder als suoder normaler Benutzer. Sieht jemand, was ich falsch mache?


Ausdrucke der Konfigurationseinstellungen

Diese Einstellungen sind alle gleich, egal ob ich sie so ausführe suoder 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 routeTabelle:

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 kann Ihnen nicht bei der gesamten Befehlszeileneinrichtung helfen, aber wenn Sie bereit sind, eine App zu installieren, können Sie meine App ReverseTethering NoRoot ausprobieren: play.google.com/store/apps/…

Antworten (3)

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 rootauf 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 usbnetund muss ich modprobe rndis-hostsogar die usb0Schnittstelle 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 rndis0Befehl fügt die entsprechenden Routing-Leitungen in die Standard- mainRouting-Tabelle ein, aber die mainTabelle wird nur unter einer Regel konsultiert, die besagt uidrange 0-0(d. h. für root). Die zweite Zeile oben erzwingt die Verwendung der mainRouting-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 wlan0den 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.

  1. USB-Kabel ist Plug-in für PC mit Windows 7
  2. Aktivieren Sie "USB-Tethering" auf dem Telefon
  3. Windows installiert automatisch 'Remote Ndis Driver'
  4. Aktivieren Sie manuell die gemeinsame Nutzung der Internetverbindung auf meinem LAN-Ndis (von dem ich das Internet bekomme) für den „USB-Remote-Ndis“. Dabei weist Windows 'USB Remote Ndis' die IP 192.168.137.1
    zu ^ damit ist diese Einrichtung auf dem PC abgeschlossen

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 ....