Обратный USB-модем — netcfg не найден (marshmallow CM13)

Я пытался заставить обратный модем работать на моем телефоне. У меня есть Galaxy S5 (g900t), работающий под управлением cyanogenmod 13 (marshmallow)... с root-правами и с busybox.

* Редактировать: я добился некоторого прогресса. Я запустил это на своей машине с Ubuntu:

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

И затем я запустил это в оболочке adb:

dhcptool rndis0

После этого у меня появился интернет.

Я могу сделать wget -s google.com. Однако он работает только как 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'

Я проверил, что могу работать wgetкак обычный пользователь, когда я подключен через сотовую сеть или Wi-Fi.

Итак, мой вопрос:

Почему я мог бы получить доступ к Интернету как su, но не как обычный пользователь? Я проверил свои ifconfigи routeнастройки, и все они выглядят так же, как suи у обычного пользователя. Кто-нибудь видит, что я делаю неправильно?


Распечатки настроек конфигурации

Эти настройки одинаковы, независимо от того, запускаю я их suили нет. Вот мой 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)

А вот моя routeтаблица:

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

И похоже, что мои DNS-серверы настроены правильно:

root@klte:/ # cat /etc/resolv.conf  
nameserver 8.8.4.4
nameserver 8.8.8.8
Я не могу помочь вам со всей настройкой командной строки, но если вы хотите установить приложение, вы можете попробовать мое приложение ReverseTethering NoRoot: play.google.com/store/apps/…

Ответы (3)

Недавно я наткнулся на то, что мне кажется гораздо лучшим (или, по крайней мере, более простым) решением для обратного привязки: gnirehtet

Он устанавливает VPN на Android, который перенаправляет весь трафик через соединение adb reverseпорта. Совсем даже рут не требует.

Я знаю, что отвечаю здесь на старый вопрос, но я столкнулся с той же проблемой с Android Nougat (LineageOS 14.1), и я мог бы опубликовать найденное решение:

Запустите следующее, как rootна телефоне (через adb) после запуска модема:

dhcptool rndis0
ip rule add from all lookup main pref 99

(команды для запуска на компьютере здесь не обсуждаются, в моем случае мне нужно было modprobe usbnetи modprobe rndis-hostдаже видеть usb0интерфейс, но это уже совсем другая проблема).

Дело в том, что Android использует довольно сложную настройку маршрутизации с разными таблицами маршрутизации (дамп см. ниже). Команда dhcptool rndis0помещает соответствующие строки маршрутизации в стандартную mainтаблицу маршрутизации, но к mainтаблице обращаются только по правилу, которое говорит uidrange 0-0(то есть для root). Что делает вторая строка выше, так это принудительно использует mainтаблицу маршрутизации для всего. Это должно быть отменено позже с помощью

ip rule del pref 99

Кажется, это работает для меня, но я не уверен, насколько это надежно. Может быть, это слегка ломает что-то, чего я не осознавал. Может быть, есть команда более высокого уровня для Android, которая лучше, и о которой я не знаю.

Напомним, что можно использовать ip rule showдля отображения текущих правил маршрутизации и ip route show table wlan0для отображения содержимого таблицы wlan0(скажем).

Для справки, вот правила маршрутизации, которые я нашел на своем Android после настройки модема:

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

Я могу просто подтвердить, что «Android 6.0.1» ведет себя так же. Обратный USB-модем работает только для пользователя «root». Для пользовательской оболочки это не работает.

  1. USB-кабель подключается к ПК с Windows 7.
  2. Включил «USB-модем» на телефоне
  3. Окно автоматически установило «Драйвер удаленного Ndis»
  4. Вручную включите «Общий доступ к подключению к Интернету» в моей локальной сети Ndis (откуда я получаю доступ в Интернет) для «USB Remote Ndis». При этом Windows назначает «USB Remote Ndis» IP-адрес 192.168.137.1
    ^ на этом настройка на ПК завершена.

Теперь я использую «оболочку adb.exe» для входа в Android -> su -> ifconfig rndis0 192.168.137.2 маска сети 255.255.255.0 -> route add default gw 192.168.137.1 dev rndis0 Теперь проверьте это:

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

Тут просто зависает, wget не отвечает и через какое-то время: wget: bad address 'google.com'

Обновление: в реестре измените параметр ICS HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters ScopeAddress "192.168.137.1" => "192.168.42.1"

поскольку Android использует это по умолчанию, как вы можете видеть здесь: 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 Маска: 255.255.255.0

теперь осталась единственная строка для включения обратного USB-модема по крайней мере для root:

route add default gw 192.168.42.1 dev rndis0

Сейчас только экспериментирую с ip route ip route help....