19 votos

¿Cómo puede configurar (reverso-tether) pass-through internet en linux?

Tengo un HTC Desire S que tiene la opción de conectarse a través de usb, y el uso de la conexión a internet del equipo. Esto funciona bien en Windows, pero estoy luchando para configurar en Ubuntu. Cuando me conecte y seleccionar a internet a través del menú usb, el usb1 dispositivo se crea y se me puede hacer ping a su dirección ip. He probado varios iptables configuraciones y configuración de nat, pero no estoy seguro de si estoy haciendo lo correcto, o si se necesita una configuración adicional...

Gracias por la ayuda.

11voto

bluegray Puntos 161

Las siguientes obras por un tiempo, pero solo para el navegador.

Cuando conecte su teléfono a través de usb y elegir a Internet, usted debe obtener un nuevo dispositivo RNDIS (usb0 o usb1). Para ubuntu, edite /etc/network/interfaces y agregar las siguientes líneas:

iface usb0 inet dhcp
iface usb1 inet dhcp

De esta forma se asigna una dirección IP automáticamente cuando el dispositivo se añade. Si una dirección de red no está asignado automáticamente a usb0 o usb1 tienes que hacerlo manualmente.

Entonces usted necesita para configurar NAT en tu ordenador con linux. Algo como:

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

También se necesita un servidor DNS:

sudo apt-get install bind9

Esta funciona para unos minutos, pero después de un rato, el teléfono da para arriba en busca de HTC Sync y se desconecta.

Para los teléfonos libres

Se puede conectar de forma permanente, si usted tiene un teléfono rooteado (fre3vo trabajado para mí). Ejecute el siguiente con el adb.

Activar el modo usb para la red y el adb:

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

Asignar una dirección IP a la usb0 dispositivo en el teléfono:

adb shell ifconfig usb0 192.168.99.5 netmask 255.255.255.0 up

Añadir una ruta por defecto. La IP debe ser la dirección IP asignada al usb0 en linux:

adb shell route add default gw 192.168.99.1 dev usb0

Configurar el servidor DNS. Esto es de google open DNS del servidor, pero puede ser la IP de tu equipo con linux si usted tiene un servidor DNS:

adb shell setprop net.dns1 8.8.8.8

3voto

DaMs Puntos 41

Un hecho este pequeño bash para automatizar todo. Simplemente enchufe el teléfono en modo de carga a su ordenador y ejecute esta fiesta.

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

0voto

nonsleepr Puntos 326

Ya que no tengo acceso a la máquina Linux a mí mismo que no puedo probar esta solución, pero usted puede intentar los pasos descritos aquí (Google traducción de ruso).

Comentarios a la traducción:

  • "rutovanym" significa rooteado;
  • WB o BB significa Gran Hermano (de escritorio);
  • smarta es la abreviatura de "smartphone".

Buena suerte!

0voto

user2330377 Puntos 11

Ok, he aquí exactamente lo que hice, no rooting de HTC deseado:

Configuración de bind9 y NAT etc...

nota: 1: si usted acaba de hacer sudo echo 1 > /proc/sys/net/ipv4/ip_forward obtendrá un error de permisos, así que aquí tenéis una secuencia de comandos para el proceso de 2: puede hacer que iptables más específica acerca de cómo hace las cosas por agregar parámetros para dispositivos específicos.


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

enchufe ahora en tu teléfono y selecciona "internet pase a través de"

espere a que el dispositivo aparece en: ifconfig verifique también en: arp

Me di cuenta de que tenía que desconectar el dispositivo, a continuación, vuelva a conectarlo para que aparezca en arp, las cosas no funcionan correctamente si arp no muestran el dispositivo.

El dispositivo, a continuación, se siente la espera de HTC Sync para enviar un mensaje de modo que usted tiene para burlarse de HTC Sincroniza mensaje:


#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

Me pueden escribir una versión de esto usando D-Bus, para que la última parte se ejecuta automáticamente cuando el dispositivo está enchufado etc....

Ok aquí está mi trabajo en progreso, no pude encontrar nada "genéricos", en d-bus, así que optó por un poco de hack solución con udev.. Esto no es perfecta, por ejemplo, el comando se ejecuta dos veces, así que voy a ver si me puedes filtrar los parámetros de correlación un poco mejor, añadir también un tiempo de espera en el último guión, por si acaso y a ver si puedo cambiar de arp con algo un poco mejor, dicen buscar en /proc

aquí.s mi .reglas archivo de /etc/udev/reglas.d he creado


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

Usted puede llamar cualquier cosa que te gusta, pero NO COMENZAR CON UN NÚMERO, de tal manera que se ejecute el último de todos.

Agregue lo siguiente al archivo como sudo utilizando un editor de estás choice, etc.....


#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

Básicamente, si usted no ve las 3 "r",


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

Entonces tendrás dos archivos, uno para la cadena de la otra, ya que la EJECUCIÓN de la udev de bloquear todo lo demás (aunque se trate de ejecutar la última!!)...hmm... de todos modos:

He creado los archivos en mi directorio home, por ahora "/home/olli/" ... así que recuerda reemplazar '/home/olli/' poco con la dondequiera que usted cree los archivos:

así que para mí, cd de mi directorio home.


cd ~

crear un archivo llamado


chain_mock_htc_sync.sh

que contengan la siguiente:



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

hacerlo ejecutable


chmod +x chain_mock_htc_sync.sh

crear otro archivo llamado


mock_htc_sync.sh

agrupa los siguientes


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

Hacerlo ejecutable:


chmod +x mock_htc_sync.sh

Espero que debe tener una buena versión ordenada pronto como punto de venta. (probablemente mañana).

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X