Wie richte ich Internet-Pass-Through (Reverse-Tether) unter Linux ein?


19

Ich besitze ein HTC Desire S mit der Option, eine Verbindung über USB herzustellen und die Internetverbindung des Computers zu nutzen. Dies funktioniert gut unter Windows, aber ich habe Mühe, es in Ubuntu einzurichten. Wenn ich Internet-Passthrough aus dem USB-Menü auswähle, wird das USB1-Gerät erstellt und ich kann seine IP-Adresse anpingen. Ich habe verschiedene iptables-Konfigurationen ausprobiert und nat eingerichtet, bin mir aber nicht sicher, ob ich es richtig mache oder ob es eine zusätzliche Konfiguration geben muss ...

Vielen Dank für jede Hilfe.


Ich habe es mit einer Kombination von Informationen aus trac.osuosl.org/trac/replicant/wiki/ReplicantUSBNetworking und translate.googleusercontent.com/… zum Laufen gebracht . Antwort unten.
Bluegray

Antworten:


11

Das Folgende funktioniert für eine Weile, aber nur für den Browser.

Wenn Sie Ihr Telefon über USB anschließen und Internet-Passthrough wählen, sollten Sie ein neues RNDIS-Gerät (USB0 oder USB1) erwerben. Bearbeiten Sie für Ubuntu / etc / network / interfaces und fügen Sie die folgenden Zeilen hinzu:

iface usb0 inet dhcp
iface usb1 inet dhcp

Dies wird automatisch eine IP zuweisen, wenn das Gerät hinzugefügt wird. Wenn eine Netzwerkadresse nicht automatisch zu usb0 oder usb1 zugewiesen wird, müssen Sie dies manuell tun.

Dann müssen Sie NAT auf Ihrem Linux-Computer einrichten. So etwas wie:

sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo echo 1 > /proc/sys/net/ipv4/ip_forward 

Sie benötigen auch einen DNS-Server:

sudo apt-get install bind9

Dies funktioniert einige Minuten lang, aber nach einer Weile gibt das Telefon die Suche nach HTC Sync auf und trennt die Verbindung.

Für gerootete Telefone

Sie können eine permanente Verbindung herstellen, wenn Sie ein Root-Telefon haben (fre3vo hat für mich funktioniert). Führen Sie folgendes mit adb aus.

Aktivieren Sie den USB-Modus für Netzwerk und ADB:

adb shell echo 6 > /sys/devices/platform/msm_hsusb/usb_function_switch

Weisen Sie dem USB0-Gerät auf dem Telefon eine IP zu:

adb shell ifconfig usb0 192.168.99.5 netmask 255.255.255.0 up

Fügen Sie eine Standardroute hinzu. Die IP sollte die IP sein, die usb0 unter Linux zugewiesen wurde:

adb shell route add default gw 192.168.99.1 dev usb0

Stellen Sie den DNS-Server ein. Dies ist Googles offener DNS-Server, aber es kann die IP Ihres Linux-Computers sein, wenn Sie einen DNS-Server haben:

adb shell setprop net.dns1 8.8.8.8

2
Der Legende nach können Sie die HTC-Synchronisierung fälschen, indem Sie Folgendes tun: Wenn Sie auf HTC-Telefonen den USB-Anschluss anschließen und Internet-Passthrough auswählen, wird auf die HTC-Synchronisierung gewartet und aufgegeben. Es lauscht auf Port 6000. Sie müssen also nur die HTC-Synchronisierung mit Netcat vortäuschen. Versuchen Sie dies in der Befehlszeile: phoneip=$(arp -n | grep usb | awk '{print $1}') echo -n -e "\x00\x02\x00\x00" | nc $phoneip 6000 > /dev/null Der Hex-Wert von 00 02 00 00ist alles, wonach es sucht.
Geffchang

@geffchang, danke! Wenn Windows-Benutzer versuchen, eine Verbindung über USB herzustellen, können netsh interface ip show configSie alle Schnittstellennamen anzeigen und dann netsh interface ip show config name="Local Area Connection #2"genau die Schnittstelle Local Area Connection #2abrufen, auf der sich der neue Adapter befindet. Sie können dies der Einfachheit halber umbenennen.
Sam Hasler

3

A hat diese kleine Bash gemacht, um alles zu automatisieren. Schließen Sie einfach Ihr Telefon im Lademodus an Ihren Computer an und führen Sie diese Bash aus.

#!/bin/bash
/opt/android-sdk-update-manager/platform-tools/adb shell 'echo 6 > /sys/devices/platform/msm_hsusb/usb_function_switch'
sleep 1
/opt/android-sdk-update-manager/platform-tools/adb shell ifconfig usb0 192.168.99.5 netmask 255.255.255.0 up
sleep 1
/opt/android-sdk-update-manager/platform-tools/adb shell setprop net.dns1 8.8.8.8

get_ip ()
{
ifconfig usb0 | grep inet | awk '{print $2}' | sed 's/addr://' | grep .
}

echo "waiting for IP on computer usb0"
while [[ `get_ip` < 192 ]];do sleep 2; done
ip=`get_ip`
echo "IP adress is $ip "
/opt/android-sdk-update-manager/platform-tools/adb shell route add default gw $ip dev usb0
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

0

Da ich selbst keinen Zugriff auf den Linux-Computer habe, kann ich diese Lösung nicht testen, aber Sie können die hier beschriebenen Schritte ausprobieren (Google-Übersetzung aus dem Russischen) .

Kommentare zur Übersetzung:

  • "Rutovanym" bedeutet verwurzelt;
  • WB oder BB bedeutet Big Brother (Desktop);
  • smarta ist die Abkürzung von "smartphone's".

Viel Glück!


Danke, aber es gibt einen einfacheren Weg als die Schnittstellen zu überbrücken.
Bluegray

0

Ok, hier ist genau das, was ich getan habe, kein Rooten von HTC gewünscht:

Setup bind9 und NAT etc ...

Hinweis: 1: Wenn Sie nur sudo echo 1> / proc / sys / net / ipv4 / ip_forward ausführen, erhalten Sie einen Berechtigungsfehler. Hier ist ein Skript für den Prozess 2: Sie können iptables genauer definieren, wie es die Dinge durchführt Hinzufügen von Parametern für bestimmte Geräte.


cd ~
echo '!/bin/bash
apt-get install bind9
iptables -A POSTROUTING -t nat -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward' > setup_bind9_nat.sh

chmod +x setup_bind9_nat.sh
sudo ./setup_bind9_nat.sh

Schließen Sie jetzt Ihr Telefon an und wählen Sie "Internet-Durchgang".

Warten Sie, bis das Gerät in: angezeigt wird. ifconfig Überprüfen Sie, ob es sich auch in: befindet. arp

Ich musste das Gerät ausstecken und wieder einstecken, damit es in arp angezeigt wird. Wenn arp das Gerät nicht anzeigt, funktionieren die Dinge nicht richtig.

Das Gerät wartet darauf, dass HTC Sync ihm eine Nachricht sendet, damit Sie die HTC Syncs-Nachricht verspotten können:


#change this line to be more specific if you have more than one usb network device
phone_usb_device="usb"
get_ip ()
{
    arp -n | grep $phone_usb_device | awk '{print $1}'
}

#TODO: This needs a timeout and loop needs cleaning up, but works fine and borrowed from another post.
echo "waiting for IP on computer usb"
while [[ `get_ip` < 192 ]];do sleep 2; done
phoneip=`get_ip`
echo "IP adress is $phoneip "

echo -n -e "\x00\x02\x00\x00" | nc -q 2 $phoneip 6000 > /dev/null

Ich kann eine Version davon mit D-Bus schreiben, so dass der letztere Teil automatisch ausgeführt wird, wenn das Gerät eingesteckt wird usw.

Ok, hier ist meine Arbeit im Gange. Ich konnte auf d-bus nichts 'generisches' finden, also habe ich mich für eine Hack-Lösung mit udev entschieden. Das ist nicht perfekt, zum Beispiel wird der Befehl zweimal ausgeführt, also habe ich mich entschieden Ich muss sehen, ob ich die passenden Parameter ein bisschen besser filtern kann, außerdem eine Zeitüberschreitung für das letzte Skript hinzufügen, einfach einschleichen und sehen, ob ich arp durch etwas Besseres ersetzen kann, z. B. in / proc suchen

Hier ist meine .rules-Datei aus /etc/udev/rules.d, die ich erstellt habe


cat /etc/udev/rules.d/htc-desire.rules

Sie können es so nennen, wie Sie möchten, aber NICHT MIT EINER ZAHL BEGINNEN, damit es als letztes ausgeführt wird.

Fügen Sie der Datei Folgendes als sudo hinzu, indem Sie einen Editor Ihrer Wahl usw. verwenden.


#KERNEL=="usb?" or DRIVERS=="usb" not sure which is best, may need extra mode information too from usb device.
SUBSYSTEM=="net", DRIVERS=="usb", ATTRS{manufacturer}=="HTC", ATTRS{idProduct}=="0ffe", RUN+="/home/olli/chain_mock_htc_sync.sh $kernel"


Ubuntu is setup to create the file with the correct permissions already 


ls -lrt /etc/udev/rules.d/htc-desire.rules 
-rw-r--r-- 1 root root 248 Jun 26 22:09 htc-desire.rules

Grundsätzlich, wenn Sie diese 3 'rs nicht sehen,


sudo chmod a+r /etc/udev/rules.d/htc-desire.rules 

Dann brauchen Sie zwei weitere Dateien, eine zum Verketten der anderen, da RUN von udev alles andere blockiert (obwohl es zuletzt ausgeführt wird !!) ... hmm ... jedenfalls:

Ich habe die Dateien zunächst in meinem Ausgangsverzeichnis "/ home / olli /" erstellt. Vergessen Sie also nicht, das Bit "/ home / olli /" zu ersetzen, wenn Sie die Dateien erstellen:

also für mich cd in mein heimatverzeichnis.


cd ~

Erstellen Sie eine Datei mit dem Namen


chain_mock_htc_sync.sh

mit folgenden Bestandteilen:



#!/bin/bash
/home/olli/mock_htc_sync.sh "$1" &
exit

mach es ausführbar


chmod +x chain_mock_htc_sync.sh

Erstellen Sie eine andere Datei mit dem Namen


mock_htc_sync.sh

wie folgt


#!/bin/bash
#change this line to be more specific if you have more than one usb network device

phone_usb_device="$1"
get_ip ()
{
    arp -n | grep $phone_usb_device | awk '{print $1}'
}

#TODO: This needs a timeout and loop needs cleaning up, but works fine and borrowed from another post.
echo "waiting for IP on computer $phone_usb_device"
while [[ `get_ip`  /dev/null

Mach es ausführbar:

chmod +x mock_htc_sync.sh

Hoffentlich sollte ich bald eine schön aufgeräumte Version als pos haben. (wahrscheinlich morgen).


0

Für Usb Reverse Tethering mit Android und Linux ohne Rooting siehe meine Antwort hier

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.