Linux'ta internet geçişini (ters bağlanma) nasıl kurarsınız?


19

USB üzerinden bağlanma ve bilgisayarın internet bağlantısını kullanma seçeneğine sahip bir HTC Desire S cihazım var. Bu Windows'da iyi çalışıyor, ancak Ubuntu'da kurmak için mücadele ediyorum. USB menüsünden internet geçişini takıp seçtiğimde, usb1 cihazı oluşturulur ve IP adresine ping atabilirim. Çeşitli iptables yapılandırmalarını denedim ve nat'ı ayarladım, ancak doğru yaptığımdan mı yoksa bazı ek yapılandırmalar mı gerektiğinden emin değilim ...

Herhangi bir yardım için teşekkürler.


Yanıtlar:


11

Aşağıdakiler bir süre çalışır, ancak yalnızca tarayıcı için geçerlidir.

Telefonunuzu usb ile bağlayıp İnternet geçişini seçtiğinizde, yeni bir RNDIS cihazı (usb0 veya usb1) almanız gerekir. Ubuntu için, / etc / network / interfaces dosyasını düzenleyin ve aşağıdaki satırları ekleyin:

iface usb0 inet dhcp
iface usb1 inet dhcp

Bu, cihaz eklendiğinde otomatik olarak bir IP atayacaktır. Bir ağ adresi otomatik olarak usb0 veya usb1'e atanmamışsa, bunu manuel olarak yapmanız gerekir.

Sonra linux bilgisayarınızda NAT kurmanız gerekir. Gibi bir şey:

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

Ayrıca bir DNS sunucusuna ihtiyacınız vardır:

sudo apt-get install bind9

Bu birkaç dakika çalışır, ancak bir süre sonra telefon HTC Sync'i aramayı bırakır ve bağlantıyı keser.

Köklü telefonlar için

Köklü bir telefonunuz varsa (fre3vo benim için çalıştı) kalıcı olarak bağlanabilirsiniz. Aşağıdakileri adb ile yürütün.

Ağ ve adb için usb modunu etkinleştir:

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

Telefondaki usb0 cihazına bir IP atayın:

adb shell ifconfig usb0 192.168.99.5 netmask 255.255.255.0 up

Varsayılan bir rota ekleyin. IP, Linux'ta USB0'a atanan IP olmalıdır:

adb shell route add default gw 192.168.99.1 dev usb0

DNS sunucusunu ayarlayın. Bu, Google'ın açık DNS sunucusudur, ancak bir DNS sunucunuz varsa linux bilgisayarınızın IP adresi olabilir:

adb shell setprop net.dns1 8.8.8.8

2
Efsaneye göre, aşağıdakileri yaparak HTC senkronizasyonunu yapabilirsiniz: HTC telefonlarda, usb'yi takıp internet geçidini seçtiğinizde, HTC senkronizasyonunu bekler ve pes eder. 6000 numaralı bağlantı noktasını dinliyor. Bu yüzden, HTC senkronizasyonunu netcat ile yapmanız yeterlidir. Bunu komut satırında deneyin: phoneip=$(arp -n | grep usb | awk '{print $1}') echo -n -e "\x00\x02\x00\x00" | nc $phoneip 6000 > /dev/null Hex değeri 00 02 00 00aradığı tek şeydir.
geffchang

@geffchang, Teşekkürler! Windows kullanıcıları için, cep telefonu USB üzerinden bağlanmaya çalışırken, netsh interface ip show configtüm arabirim adlarını görmek için çalışabilir ve daha sonra , yeni bağdaştırıcı ne denirse netsh interface ip show config name="Local Area Connection #2"o arabirimi almak için çalışabilirsiniz Local Area Connection #2. Kolaylık sağlamak için bunu yeniden adlandırabilirsiniz.
Sam Hasler

3

A bu küçük bash'ı otomatikleştirmek için yaptı. Telefonunuzu şarj moduna bilgisayarınıza takın ve bu sesi çalıştırın.

#!/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

Linux makinesine kendim erişemediğim için bu çözümü test edemiyorum, ancak burada açıklanan adımları deneyebilirsiniz (Rusça'dan Google çevirisi) .

Çeviriye yapılan yorumlar:

  • "rutovanim" köklü anlamına gelir;
  • WB veya BB, Big Brother (masaüstü) anlamına gelir;
  • smarta "akıllı telefon" un kısaltmasıdır.

İyi şanslar!


Teşekkürler, ancak arayüzleri köprülemekten daha kolay bir yol var.
bluegray

0

Tamam, işte tam olarak yaptığım şey, HTC'nin köklenmesi istenmiyor:

Bind9 ve NAT vb. Kurulum ...

not: 1: sadece sudo echo 1> / proc / sys / net / ipv4 / ip_forward yaparsanız, bir izin hatası alırsınız, bu yüzden işlem için bir komut dosyası 2: iptables'ı nasıl yaptığına dair daha spesifik yapabilirsiniz belirli cihazlar için parametre ekleme.


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

şimdi telefonunuzu takın ve 'İnternet geçişi'ni seçin

cihazın görünmesini bekleyin: ifconfig ayrıca: arp

Arp'de görünmesi için cihazın fişini çıkarıp tekrar takmam gerektiğini buldum, arp cihazı göstermiyorsa işler düzgün çalışmıyor.

Cihaz daha sonra HTC Sync'in bir mesaj göndermesini beklerken oturup HTC Syncs mesajını taklit etmeniz gerekir:


#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

D-Bus kullanarak bunun bir sürümünü yazabilirim, böylece cihaz takıldığında ikinci parça otomatik olarak çalışır.

Tamam işim devam ediyor, ben d-bus üzerinde 'jenerik' bir şey bulamadım bu yüzden udev kullanarak bir hack çözüm seçti .. Bu mükemmel değil, örneğin komut iki kez çalışır, bu yüzden ben Eşleşme parametrelerini biraz daha iyi filtreleyip filtreleyemeyeceğimi, son komut dosyasına bir zaman aşımı ekleyip eklemeyeceğimi görmeliyim, sadece örtün ve arp'yi biraz daha iyi bir şeyle değiştirip değiştiremeyeceğimi görüyorum.

here.s /etc/udev/rules.d dosyamdaki .rules dosyamı oluşturdum


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

İstediğiniz herhangi bir şey diyebilirsiniz, ancak bir numara ile başlamayın, böylece her şeyden önce çalışır.

Aşağıdakileri istediğiniz bir editör kullanarak sudo olarak dosyaya ekleyin ....


#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

Temel olarak, bu 3'leri görmüyorsanız,


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

Daha sonra, biri diğerini zincirlemek için iki dosyaya daha ihtiyacınız olacak, çünkü udev'den RUN diğer her şeyi engelleyecektir (son çalıştırılsa bile !!) ... hmm ... neyse:

Şimdilik "/ home / olli /" için ana dizinimdeki dosyaları oluşturdum ... bu yüzden '/ home / olli /' bitini dosyaları oluşturduğunuz her yerde değiştirmeyi unutmayın:

benim için, ana dizinime cd.


cd ~

adlı bir dosya oluştur


chain_mock_htc_sync.sh

aşağıdakileri içeren:



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

çalıştırılabilir yap


chmod +x chain_mock_htc_sync.sh

adlı başka bir dosya oluştur


mock_htc_sync.sh

aşağıdakileri içeren


#!/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

Yürütülebilir yap:

chmod +x mock_htc_sync.sh

Umarım en kısa sürede pos kadar güzel bir tidied sürümü olmalıdır. (muhtemelen yarın).


0

Android ve Linux ile root atmadan Usb Reverse Tethering için cevabımı buradan görebilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.