Як налаштувати пропуск через Інтернет (зворотний тет) на Linux?


19

У мене є HTC Desire S, який має можливість підключитися через usb та користуватися комп’ютером через Інтернет. Це добре працює в Windows, але я намагаюся його налаштувати в Ubuntu. Коли я підключаюсь і вибираю Інтернет-пропуск через меню usb, пристрій usb1 створюється, і я можу пінговувати його ip-адресу. Я спробував різні конфігурації iptables та налаштування nat, але я не впевнений, чи правильно я це роблю, чи потрібна якась додаткова конфігурація ...

Дякуємо за будь-яку допомогу.


У мене це працює, використовуючи комбінацію інформації з trac.osuosl.org/trac/replicant/wiki/ReplicantUSBNetworking та translate.googleusercontent.com/… . Відповідь нижче.
bluegray

Відповіді:


11

Далі працює деякий час, але лише для браузера.

Коли ви підключаєте телефон через usb та вибираєте пропуск через Інтернет, вам слід отримати новий пристрій RNDIS (usb0 або usb1). Для ubuntu редагуйте / etc / network / інтерфейси та додайте наступні рядки:

iface usb0 inet dhcp
iface usb1 inet dhcp

Це призначить IP автоматично при додаванні пристрою. Якщо мережева адреса не призначена автоматично usb0 або usb1, ви повинні зробити це вручну.

Тоді вам потрібно встановити NAT на вашому комп'ютері Linux. Щось на зразок:

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

Вам також потрібен DNS-сервер:

sudo apt-get install bind9

Це працює протягом декількох хвилин, але через деякий час телефон відмовляється шукати HTC Sync і відключається.

Для вкорінених телефонів

Ви можете постійно підключитися, якщо у вас є вкорінений телефон (для мене працювало fre3vo). Виконайте наступне за допомогою adb.

Увімкніть режим usb для мережі та adb:

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

Призначте IP-адресу пристрою usb0 на телефоні:

adb shell ifconfig usb0 192.168.99.5 netmask 255.255.255.0 up

Додати маршрут за замовчуванням. IP повинен бути IP, призначений usb0 в Linux:

adb shell route add default gw 192.168.99.1 dev usb0

Встановити DNS-сервер. Це відкритий сервер DNS google, але це може бути IP вашого комп'ютера Linux, якщо у вас є сервер DNS:

adb shell setprop net.dns1 8.8.8.8

2
Згідно з легендою, ви можете підробити синхронізацію HTC, зробивши наступне: На HTC-телефонах, коли ви підключаєте usb і вибираєте Інтернет-прохід, він чекає синхронізації HTC і відмовляється. Він прослуховується на порту 6000. Тож вам потрібно лише підробити синхронізацію HTC з netcat. Спробуйте це в командному рядку: phoneip=$(arp -n | grep usb | awk '{print $1}') echo -n -e "\x00\x02\x00\x00" | nc $phoneip 6000 > /dev/null Шістнадцяткове значення - 00 02 00 00це все, що він шукає.
geffchang

@geffchang, Дякую! Для користувачів Windows, коли мобільний телефон намагається підключитися через USB, ви можете запустити, netsh interface ip show configщоб побачити всі назви інтерфейсу, а потім netsh interface ip show config name="Local Area Connection #2"отримати саме той інтерфейс, куди не Local Area Connection #2називається новий адаптер. Ви можете перейменувати це для зручності.
Сем Хаслер

3

A зробив цей невеликий баш для автоматизації всіх. Просто підключіть телефон у режимі зарядки до комп’ютера та запустіть цю програму.

#!/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, я не можу перевірити це рішення, але ви можете спробувати описані тут кроки (переклад Google з російської мови) .

Коментарі до перекладу:

  • "рутованим" означає вкорінений;
  • WB або BB означає Big Brother (робочий стіл);
  • smarta - це абревіатура від "смартфона".

Удачі!


Дякую, але є простіший спосіб, ніж з'єднання інтерфейсів.
bluegray

0

Гаразд, ось що я зробив, не хочеться вкорінювати HTC:

Налаштування bind9 та NAT тощо ...

Примітка: 1: якщо ви просто зробите sudo echo 1> / proc / sys / net / ipv4 / ip_forward, ви отримаєте помилку дозволу, тож ось сценарій процесу 2: Ви можете зробити iptables більш конкретними щодо того, як це робить додавання параметрів для конкретних пристроїв.


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

тепер підключіть свій телефон і виберіть "Інтернет пройти"

зачекайте, поки пристрій з’явиться: ifconfig перевірте, чи він також у: arp

Я виявив, що мені потрібно вимкнути підключення пристрою, а потім підключити його знову, щоб він з’явився в arp, все не працює належним чином, якщо арп не показує пристрій.

Потім пристрій буде сидіти в очікуванні, коли HTC Sync надішле йому повідомлення, тож вам доведеться знущатися з повідомлення HTC Syncs:


#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, щоб остання частина виконувалася автоматично, коли пристрій підключено тощо.

Гаразд, моя робота триває, я не міг знайти що-небудь «загальне» на d-bus, тому я вибрав трохи рішення для злому за допомогою udev .. Це не ідеально, наприклад, команда запускається двічі, тому я Я повинен побачити, чи зможу я трохи краще відфільтрувати відповідні параметри, а також додати тайм-аут на останньому сценарії, просто обкладіть і перевірте, чи зможу я замінити арп чимось кращим, скажімо, шукаючи в / proc

ось мій файл .rules з /etc/udev/rules.d я створив


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

Ви можете називати це все, що завгодно, але НЕ ЗАПУСКУЙТЕ З НОМЕРА, таким чином він запускається останнім.

Додайте до файлу наступне у вигляді sudo за допомогою редактора, який ви вибрали тощо.


#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

В основному, якщо ви не бачите цих 3-х ',


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

Тоді вам знадобляться ще два файли, один для ланцюга іншого, оскільки RUN від udev заблокує все інше (навіть незважаючи на те, що він працює останнім !!) ... хм ... все одно:

Я створив файли в своєму домашньому каталозі на даний момент "/ home / olli /" ... так що не забудьте замінити біт '/ home / olli /' на те, де ви створюєте файли:

так що для мене, компакт-диск до мого домашнього каталогу.


cd ~

створити файл під назвою


chain_mock_htc_sync.sh

що містить:



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

зробити його виконуваним


chmod +x chain_mock_htc_sync.sh

створити інший файл під назвою


mock_htc_sync.sh

звертаючись до наступного


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

Зробіть його виконуваним:

chmod +x mock_htc_sync.sh

Сподіваюся, я повинен мати гарну приправлену версію, як тільки посаду. (мабуть, завтра).


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.