Reverse tethering (получаем интернет на android с ПК linux)

в 11:39, , рубрики: android, linux, nat, Ubuntu, интернет, ПК, метки: , , , , ,

Так как 3g интернет в месте использования телефона у меня медленный, то решено было попытаться использовать интернет от компьютера, на телефоне. Я был удивлен тем, что это стандартными средствами невозможно. Решил сделать нестандартными. Итак, нам понадобятся:
1. busybox
2. root
3. GScript Lite, либо эмуль терминала. GScript лучше, так как позволит сделать ярлычок на раб столе что бы не парится все время с скриптом.
4. Еще может пригодится утилита ifconfig, их много вариантов для андроида, выбрать тот, который похож на линуксовый… то бишь полноценный (но эта утилита только для справки, например если имя сетевого интерфейса, который создали для связи с компом, сменится).

Делать надо так:
1. Сопрягаем телефон с компом… ну тут ясно и инструкций полно.
2. На телефоне лезем в настройки->еще->Режим модема->«Общий интернет по bluetooth» и ставим галку.
2. Лезем в апплет блютуза и выбираем «параметры» (это на компе). Я пользуюсь ubuntu так что там есть апплет, для других дистров есть другие варианты и вы сами знаете куда надо нажать.
3. В параметрах видим свой телефон (мы его сопрягли). Заходим на него и выбираем «Использовать как сетевое устройство (PAN/NAP)». Делать это лучше один раз, NetworkManager, запоминает каждый раз по отдельности и стереть прошлые не дает, так что у меня там список, штук в двадцать пунктов из копий моего телефона. Позже, скрипт накатаю прямой, конечно. Можно посмотреть в сторону blueman он умеет то же.
4. Лезем в NetworkManager и, о чудо, там есть наш телефон, нажали на него.
5. В телефоне, если пункт 2 выполнен, придет оповещение «разрешить ли подключится точке доступа?». Разрешаем.
6. PROFIT1!!! Сеть поднялась. Мне выдает на компе адрес 192.168.44.39, на телефоне 192.168.44.1
7. На компе запускаем такое (у меня давно такое в стартовых скриптах, для домочадцев):

#!/bin/sh
modprobe ipt_MASQUERADE
iptables -F; iptables -t nat -F; iptables -t mangle -F
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -s ip_адрес_телефона(192.168.44.1) -j ACCEPT
iptables -A FORWARD -d ip_адрес_телефона(192.168.44.1) -j ACCEPT
iptables -t nat -A POSTROUTING -o имя_сетевого_интерфейса_с_интернетом(wlan1 у меня или ppp0 или eth0) -s ip_адрес_телефона(192.168.44.1) -j MASQUERADE

Это мы запустили NAT что бы пакеты от телефона, пришедшие нам, отправлять дальше в интернет. То бишь стали шлюзом.
8. Пишем в GSCript или терминале такое (на телефоне):

busybox route add -net default gw ip_адрес_компа(192.168.44.39) имя_сетевого_интерфейса_связанного_с_компом(btn0)

btn0 — это как раз имя сетевого интерфейса, который с компом связан у телефона.
Эта команда требует права root на телефоне.
9. PROFIT2!!! Имеем работающий интернет на телефоне, через комп, по блютузу.

Сейчас у меня на рабочем столе телефона есть ярлык для настройки шлюза по умолчанию (GSCript-овый). Я создаю сеть с телефоном, а потом запускаю ярлык. Интернет пашет, надо несколько секунд что бы до браузера или еще кого там в потрохах, доперло, что интернет уже есть. Осталось только сделать скриптик на компе, что бы сеть поднимать с такой же кнопочки, или найти софтину для андроида которая это умеет то же кнопочкой со стороны телефона. С телефона оно удобнее будет. Вот собственно и все.

Автор: 3draven

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js