Mastodon

Shumaher’s_Blog@AlexZ.me

— yet another stupid personal weblog

Android reverse tethering или Как расшарить интернет компьютера на смартфон по USB

Android connectionВсего второй пост за год... Получается так, что когда планирую о чем-то написать, это или кажется в итоге недостаточно важным для полноценного поста, или какое-то найденное решение, которое не мешало бы описать тут, в итоге оказывается не до конца работоспособным.
Постараюсь в следующем году исправиться.

Но недавно случилось страшное — дома сдох роутер. Лучи ненависти по этому поводу идут в D-Link, Юлмарт и энергокомпанию города (ясное дело, что роутеры сами по себе умирают не так уж и часто), но это совсем другая история...
И всё бы ничего, но вдруг понадобилось синхронизировать смартфон. А так как в компьютере интернет есть, значит есть и способ получить его на смартфоне тоже.
Поэтому сегодняшняя статья снова про Android, консоль и всякое такое.

Решить противоположную задачу, а именно поделиться мобильным интернетом С Андроида НА ДРУГОЕ устройство по Wi-Fi или через USB-шнур не вызывает никаких сложностей: почти во всех девайсах есть режим Wi-Fi-роутера и USB-модема. Мне попался только один планшет Samsung, который не мог раздавать интернет по Wi-Fi (а может просто настройки были глубоко запрятаны, и я не нашел).
И по Bluetooth, кстати, тоже можно, но это уже изврат.
Всё это называется tethering.

Получить интернет на Android c ПК тоже можно, хотя встроенных функций для этого и нет, есть куча приложений. Некоторые из решений используют ADB (что уже ограничивает скорость подключения) и даже предполагают установку программ для Windows.
Это — reverse tethering (или обратный).
(как адекватно перевести "tethering" я не знаю)

Я же предлагаю обойтись только стандартными средствами, без установки дополнительного софта (ну почти).

Способ заключается в использовании режима USB-модема Андроида, но с "разворачиваем" соединения в обратную сторону.
Обо всём по порядку.


0) Root

Для reverse tethering'а, скорее всего для всех способов, на девайсе нужен root-доступ. Если у вас root'а ещё нет (странно!), самое время сначала его получить. Иначе дальше читать бессмысленно.


1) Настройка компьютера

Windows
После включения режима USB-модема через Настройки — Беспроводные сети — Ещё... — Режим модема — USB-модем (названия пунктов указаны для моего смартфона, но у всех будет примерно аналогично), в системе появляется новая сетевая карта и новое соединение.
А может и не появиться, значит нужно поставить драйверы. У меня они были на виртуальном CD-ROM-дисководе. Если у вас такого нет, и Windows дрова не нашла, значит ищите их самостоятельно в интернете.
Но предположим, что всё работает и сетевое соединение с Андроидом появилось. Лучше назвать его например "Android".

Затем нужно сделать ваше ОСНОВНОЕ СОЕДИНЕНИЕ С ИНТЕРНЕТОМ общим.
Для этого в его свойствах включите галки:

Windows ICS



Если у вас не обычное LAN-подкючение к интернету, а PPPoE или VPN, то это окно может выглядеть немного по-другому. Нужно будет выбрать, ДЛЯ КАКОГО подключения расшаривать интернет, то есть выберите в списке "Android".
Это окно из Windows XP, для 7/8/10 нужные опции находятся на вкладке "Доступ".
А если настройки неактивны, проверьте запущены ли службы "Общий доступ к Интернету (ICS)" и "Маршрутизация и удалённый доступ".

После нажатия на OK IP-адрес изменится на 192.168.0.1, и соединение с интернетом прервётся. Соответственно, верните настройки IP/шлюза/DNS какие были.

А в настройках нового соединения с Андроидом укажите IP например 192.168.42.1 (или любой другой, но тогда не забудьте скорректировать свои действия дальше по тексту), и маску 255.255.255.0, шлюз и DNS оставьте пустыми.



Linux
На Линуксе всё гораздо проще — по крайней мере для Debian 8 c ядром 3.16 драйверов/модулей никаких не нужно, и после включения USB-модема сразу появляется интерфейс usb0.
А дальше:

echo 1 > /proc/sys/net/ipv4/ip_forward # включаем передачу IP-трафика
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # правило для расшаривания интернета с основного интерфейса eth0
ifconfig usb0 192.168.42.1 netmask 255.255.255.0 up # настраиваем и поднимаем интерфейс USB-модема

Всё это будет работать до перезагрузки. Чтобы сделать изменения постоянными добавьте

net.ipv4.ip_forward = 1

в /etc/sysctl.conf
и

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

в любой стартовый скрипт, например в /etc/rc.local


2) Настройка Android

Самое интересное тут.
Интерфейс USB-модема будет называться rndis0 или usb0.
У меня в смартфоне первый вариант, но в инструкциях в сети часто был указан второй.
В эмуляторе терминала (про мой здесь) нужно будет ввести следующее:

su
ifconfig rmnet0 down # выключаем мобильный инет (на всякий случай)
ifconfig rndis0 192.168.42.2 netmask 255.255.255.0 up # настраиваем и поднимаем интерфейс USB-модема
route add default gw 192.168.42.1 dev rndis0  # шлюз, IP-адрес интерфейса в компьютере!
setprop net.dns1 8.8.8.8 # DNS-серверы Google,
setprop net.dns2 8.8.4.4 # можно указать любые, например вашего провайдера



Оформил это в виде отдельного скрипта reverse-tethering.sh, который можно добавить в GScript и создать ярлык на рабочем столе.

Кстати, остальные скрипты и конфиги, о которых я писал ранее, теперь тоже в репозитории Android-scripts на GitHub, и некоторые даже немного обновлены. Но сообщать об этом тут мне было лень :-/


После выполнения команд интернет на смартфоне уже есть, в чём можно убедиться так:

ping ya.ru # или, что лучше:
wget http://ya.ru/



или при помощи Firefox.

Но, к сожалению, остальные браузеры и большинство приложений такое подключение не видят. И в этом конечно большой минус этого способа.
Всякие хитрые советы вроде кратковременного включения мобильного интернета и запуска ещё раз скрипта для tethering'а мне лично не помогли.

Если вы знаете, как заставить все приложения увидеть подключенный таким способом интернет, пожалуйста, НАПИШИТЕ!!!

А пока придётся кое-что добавить.


3) Хак для Wi-Fi-подключения

Как я и упомянул в начале, совсем без костылей не обойтись.
Нужен Xposed (про загрузку, установку и настройку читайте на 4PDA) и модуль Fake Wifi Connection.
Выглядит который так:

Fake Wifi Connection



Нужно включить переключатель, нажать "Select All" и "Save".
Теперь можно включить Wi-Fi в настройках. В результате:

Android Wi-Fi



Я делал всё это естественно не в Люксоре, но модуль использует сохранённую ранее сеть для создания "фейкового" Wi-Fi. В сторонних виджетах указано название сети "FakeWifi".
То, что интернет действительно работает, видно, например, по активному значку Viber'а.


Вкратце

Если на компьютере всё уже один раз настроено, для включения reverse tethering'а нужно:
— подключить смартфон по USB к компьютеру,
— включить режим USB-модема,
— запустить скрипт для настройки соединения,
— включить "Fake Wifi Connection",
— включить Wi-Fi как обычно.

А выключать в обратном порядке.

Теперь, если у вас тоже внезапно пропадёт Wi-Fi, вы знаете что делать.

VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)
Оставьте свой комментарий




OpenID WordPress.com Yahoo

Это не спам.