2015-03-04 12 views
5

Próbuję skonfigurować środowisko testowe dla mojej aplikacji na Androida, w której oddzielne urządzenia wymagają połączenia z Internetem, ale nie mają funkcji łączności bezprzewodowej.Odwracanie tetheringu z kilku urządzeń z Androidem przez USB

Zdecydowałem się więc na używanie tasowania odwrotnego USB. Na moim komputerze głównym działa system Ubuntu. Udało mi się już skonfigurować odwrotne tethering dla jednego urządzenia, połączenie działa i mogę pingować google.com z powłoki adb tego urządzenia.

Po podłączeniu drugiego urządzenia pierwsze tethering przestaje działać. Oba urządzenia mają ten sam adres IP skonfigurowany na ich wewnętrznym interfejsie usb0.

Oto co mam do tej pory:

  1. port forwarding na hoście jest włączona

    echo 1 > /proc/sys/net/ipv4/ip_forward 
    
  2. iptables regułę hosta do ruchu trasy:

    iptables -t nat -A POSTROUTING -s 169.254.255.2/24 -j MASQUERADE 
    
  3. Plugin pierwszy urządzenie:

    ifconfig shows the device on usb0 @ ip 169.254.255.2/30 
    
  4. na pierwszym urządzeniu (z adb powłoki)

    > route add default gw 169.254.255.2 dev usb0 
    > setprop net.dns1 8.8.8.8 
    > ping google.com --> is giving results 
    
  5. wtyczkę drugie urządzenie

    ifconfig shows this device on usb1 @ ip 169.254.255.2/30 
    
  6. Na drugim urządzeniem

    Add gw, set DNS like above 
    

Teraz drugie urządzenie może pingować google.com, ale pierwsze nie.

Po zmianie wewnętrznego adresu IP lub adresu IP przypisanego do hostów usb0, interfejsy usb1 nie mogę już połączyć się z urządzeniami przez adb.

Podejrzewam, że jest to problem sieciowy, a nie problem z ADB? Jakieś pomysły?

+1

Należy ponownie przeczytać pierwsze zdanie, które wyjaśnia, że ​​jest skierowane na ** testowanie oprogramowania w fazie rozwoju ** przed oddaniem głosów ścisłych przeciwko temu - ** pytania dotyczące narzędzi programistycznych ** są wyraźnie na temat. –

+0

jak zrobić odwrotne tethering. Nie mogę tego zrobić. Mam laptopa z telefonem Archlinuksa i Androidem. Chcę też przetestować moją aplikację na telefonie komórkowym, łącząc się przez odwrotne tethering –

Odpowiedz

4

Po wielu badaniach, próbach i błędach w końcu znalazłem rozwiązanie dla mojej konkretnej konfiguracji.

Co zrobiłem na końcu, a co przegapiłem w moich pierwszych próbach, było umieszczenie każdego podłączonego urządzenia usb w oddzielnej podsieci (patrz this answer on serverfault).

Mówiąc jasno, konfiguracja jest teraz jak następuje:

  1. iptables zawiera następującą regułę

    iptables -t nat -A POSTROUTING -j MASQUERADE 
    
  2. interfejs usb0 i USB1 hosta, teraz w oddzielnych podsieci

    usb0: inet addr:169.254.0.1 Bcast:169.254.15.255 Mask:255.255.240.0 
    usb1: inet addr:169.254.16.1 Bcast:169.254.31.255 Mask:255.255.240.0 
    
  3. wewnętrzny usb0 iface urządzenia z systemem Android connecte d na usb0 gospodarza:

    - usb0 169.254.0.2/20 
    - default gw 169.254.0.1 (so the host's usb0 iface) 
    
  4. wewnętrzny iface usb0 urządzenia Android podłączony USB1 gospodarza:

    - usb0 169.254.16.2/20 
    - default gw 169.254.16.1 (so the host's usb1 iface) 
    

ten sposób mam teraz dostępu do Internetu (po adb shell setprop net.dns1 8,8 .8.8) z każdego urządzenia z Androidem podłączonego do interfejsów usb na moim hoście.

3

Potrzebujesz systemu linux z dostępem do roota, zrootowanym telefonem z Androidem i kablem USB.

Kroki

  1. zainstalować adb i fastboot w systemie Linux.

    sudo apt-get install android-tools-adb android-tools-fastboot

  2. Podłącz telefon android do komputera za pomocą kabla USB i włączyć tethering USB od ustawień w telefonie.
  3. Otwórz terminal na komputerze i wpisz polecenia podane poniżej.
  4. Znajdź nowy interfejs sieciowy utworzony na komputerze.

    ifconfig

    Generalnie nowy interfejs sieciowy będzie usb0 lub USB1. Rozważmy usb0.

  5. Teraz zmień statyczny adres IP dla nowego interfejsu usb0.

    sudo ifconfig usb0 10.42.0.1 netmask 255.255.255.0

  6. teraz uczynić tę nową usb0 interfejsu jako wspólnego związku.

    echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

  7. teraz wprowadzić pewne zmiany iptables firewall.

    sudo iptables -t nat -F sudo iptables -t nat -A POSTROUTING -j MASQUERADE

  8. Teraz musimy wprowadzić kilka poleceń w telefonie z systemem Android. Możemy użyć adb lub bezpośrednio wpisując polecenia w telefonie z Androidem poprzez emulator terminala zainstalowany w telefonie. Używam sposobu adb.

  9. Znajdź interfejs sieciowy w telefonie z Androidem.

    adb shell busybox ifconfig

    Kopalnia była rndis0.

  10. Umożliwia ustawienie statycznego adresu IP, maski sieci i bramy.

    adb shell ifconfig rndis0 10.42.0.2 netmask 255.255.255.0 adb shell route add default gw 10.42.0.1 dev rndis0

  11. Sprawdź łączność z Internetem w telefonie.

    adb shell ping 8.8.8.8

    Jeśli jest pingowanie, następnie Internet w telefonie działa.

To połączenie internetowe nie działa z aplikacjami takimi jak Opera Mini i Paytm, ale działa dobrze z WhatsApp.

Powiązane problemy