jueves, 23 de mayo de 2013

robar wifi a tu vecino

 Te preguntaras para que robarle wifi y yo tengo internet en casa , bueno este tutorial no es solo robar la wifi si no sumar la wifi que te robas a tu internet haciendo que aunmente tu ancho de banda al tener conexiones distintas

Tal y como lo leen: Vamos a conectarnos a 2 redes (la nuestra y la de la vecina) para así tener la suma de los 2 anchos de banda para nosotros. Esto puede lograrse siempre que tengamos 2 o más placas de red (en el caso de la mayoría de las notebooks, se pueden enchufar por cable y conectarse a wifi), por lo que así podemos lograr conectarnos a 2 redes distintas y con lo que vamos a explicar, usar las 2 a la vez.

Sin más cháchara, pasamos a explicar: Cómo conectarse a 2 redes para tener el doble de velocidad en Linux. Como los tenemos acostumbrados, vamos a explicar cómo hacerlo en varios simples pasos, pero no sin antes dar la respectiva introducción teórica:

Esta práctica, es más conocida como Bonding (Sí, acción y efecto de estar viajando en bondi).

¿Qué es el port bonding?
Es una técnica que permite agregar varios interfaces de red físicos en uno único virtual. A cada interfaz físico se le denominará slave (esclavo). Con esto podemos realizar un balanceo de carga entre las dos interfaces y conseguir un ancho de banda final igual a la suma de los anchos de banda de cada slave. Además de una ventaja adicional inmediata: redundancia de la conexión. Tenemos varios enlaces físicos a la red, perder alguno de ellos implica una degradación de servicio pero no la pérdida completa de conexión.

El módulo bonding
Para crear la interfaz virtual debemos cargar un módulo que la gestione aplicando alguna política o algoritmo para ello. Este módulo tiene muchos parámetros, aunque antes de listarlos todos explicaremos un poco el funcionamiento teórico para entender mejor los parámetros.

Slaves y colas
Toda interfaz de red tiene asignada automáticamente una cola de envío y otra de recepción. Cada slave tiene también sus propias colas.  En cuanto a la recepción hay poco que decir, cuando llega un paquete a algún slave se pasa a la cola de recepción de la interfaz virtual. Si un enlace físico falla, hay poco que podamos hacer: Simplemente perderemos el paquete. Pero para el envío hay un poco más de historia, puesto que si detectamos que un enlace se ha perdido, deberemos pasar todos los paquetes de la cola de esa interfaz a la esclava que sigue funcionando para después congelar esa cola de envío degradando así el rendimiento de la interfaz. Por tanto debemos poder detectar cuando un enlace se ha caído, a este respecto existen dos posibilidades: detección por ARP o mediante MII (Media Indepent Interface).


  • Detección ARP: consiste en enviar periódicamente peticiones ARP por un slave, si estas peticiones fallan el enlace se considera caído.
  • Detección MII: si el módulo de la NIC (Network Interface Card) implementa ciertas llamadas, se puede detectar cuando un enlace está físicamente caído, en cuyo caso, se deshabilita el slave.

Evidentemente, los esclavos deshabilitados se seguirán probando hasta que vuelvan a estar operativos, momento en el cual se volverán a habilitar dentro de la interfaz virtual.

Balanceos de carga
Probablemente este sea el aspecto más importante del bonding: cómo balancear la carga entre todos los esclavos. En este sentido el módulo tiene un parámetro que permite indicar qué algoritmo se debe usar. Los algoritmos implementados son:

  • balance-rr (modo 0): se emplea un algoritmo round robin entre la cola virtual y las de los esclavos. Es algo así como: un paquetillo para un esclavo, otro para otro esclavo, un paquetillo para un esclavo, otro para el otro... etc. Es el algoritmo que se usa por defecto.
  • active-backup (modo 1): realmente no balancea la carga, usa sólo un esclavo y en caso de fallar, usa el siguiente disponible.
  • balance-xor (modo 2): emplea una formulita para decidir por qué interfaz sale: (source-MAC xor dest-MAC) mod n-slaves.
  • broadcast (modo 3): se transmite todo por todas las interfaces. Este método no balancea tampoco, pero provee tolerancia a fallos.
  • 802.3ad (modo 4): emplea algoritmos definidos en el estándar IEEE 802.3ad.
  • balance-tlb (modo 5): balancea la carga de transmisión entre los esclavos dependiendo de la velocidad de estos y de la carga total. El tráfico es recibido por un esclavo, en caso de fallar otro esclavo toma su MAC y continúa recibiendo tráfico.
  • balance-alb (modo 6): realiza el balanceo anterior además de un balanceo también en la recepción. Este método debe modificar las MAC de los esclavos estando las tarjetas activas, esto debe estar soportado por el driver para poder usar este método.
Aunque todo esto parezca muy bonito, hay que tener en cuenta una cosa: algunos métodos necesitan ciertas configuraciones/capacidades en el switch al que estés conectados los esclavos. Como en Tu Amigo Te Tiene Ganas no contamos con tanta infraestructura, tampoco contamos con la posibilidad de explicar algunos.

Ahora sí, la posta:

Es necesario un módulo que viene de serie incluído en los kernel 2.4 y 2.6. Además también hace falta el programa que gestiona las interfaces: ifenslave, que viene empaquetado en Debian para disfrute de todos nosotros:

$ sudo apt-get install ifenslave



Precondición: Suponemos que ya te podés conectar a las redes que vas a usar (tanto la cableada como la wifi). También podés hacerlo con 2 wifis si tenés 2 placas wifi (por ejemplo, una usb). En otras palabras, nuestro ifconfig debería ser parecido a esto:

eth0      Link encap:Ethernet  HWaddr 2c:27:d7:cf:94:8d
          inet addr:192.168.1.103  Bcast:192.168.1.255  Mask:255.255.255.0 MTU:1500  Metric:1
          RX packets:19703 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30400 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:14056324 (14.0 MB)  TX bytes:3623526 (3.6 MB)
          Interrupt:42 Base address:0xc000


lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4693 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4693 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:428026 (428.0 KB)  TX bytes:428026 (428.0 KB)


wlan0     Link encap:Ethernet  HWaddr cc:52:af:92:72:50
          inet addr:192.168.1.104  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::ce52:afff:fe92:7250/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:127362 errors:0 dropped:0 overruns:0 frame:0
          TX packets:105375 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:138172311 (138.1 MB)  TX bytes:16802788 (16.8 MB)


Lo que quiere decir que te podés conectar a tu red y a la de tu vecina. Para obtener la contraseña del wifi de tu vecina, fijate acá.

Ahora debemos desactivar todas las interfaces de red activas y que queremos usar con bonding. Si tenemos por ejemplo eth0 y wlan0 activas ejecutariamos el siguiente comando:

$ sudo ifconfig eth0 down
$ sudo ifconfig wlan0 down


IMPORTANTE: En todo esto, si estamos en alguna de nuestras distribuciones favoritas como Debian, Ubuntu, Mint, etc., vamos a tener activado el servicio de network-manager por defecto y sólo en un caso particular como este, el mismo va a molestar. Por lo que lo damos de baja:

$ sudo /etc/init.d/network-manager stop

Más adelante lo podemos volver a levantar reiniciando o con start.

Y ahora nuestro ifconfig tendría que ser algo así:

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4693 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4693 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:428026 (428.0 KB)  TX bytes:428026 (428.0 KB)


En el archivo /etc/network/interfaces debemos comentar aquellas partes relacionadas con las configuraciones de interfaces de red que queramos añadir al bonding. Por ejemplo, y siguiendo con el ejemplo, deberíamos comentar las partes de eth0 y wlan0 de la siguiente manera (en caso de tenerlas, no es necesario que estén... auto lo y todo eso se deja como está):

#auto eth0


#iface eth0 inet dhcp
#auto wlan0
#iface wlan0 inet dhcp


En este mismo archivo agregamos las partes correspondientes a las interfaces de red que queramos añadir al bonding:

auto bond0
iface bond0 inet dhcp
hwaddress ether “dirección MAC de la intefaz que se usará”
slaves eth0 wlan0 # y tantas como queramos y/o tengamos
bond-mode 5 #el modo 5 es el correspondiente al balance-tlb explicado anteriormente
bond-miimon 100 # miimon = media independent interface monitoring (que viene a ser en milisegundos cada cuanto se monitorizan los enlaces).

ACLARACIÓN: Cuando decimos “dirección MAC de la intefaz que se usará”, nos referimos a que tenemos que elegir a una de las interfaces que irán al bonding para que actúe de principal. Por ejemplo, nosotros eleginos eth0, por lo que en lugar de “dirección MAC de la intefaz que se usará”, pondremos 2c:27:d7:cf:94:8d, que es la HWaddr de la interfaz eth0.

Y ahora sí, levantamos el bonding:

Cargamos el módulo:

$ sudo modprobe bonding


$ sudo ifup bond0


Nos tendría que decir algo como:
Waiting for a slave to join bond0 (will timeout after 60s)

Y mientras tanto, en otra consola, levantamos las interfaces que irán al bond:

$ sudo ifconfig eth0 up

Para levantar la red cableada. En este momento, si hacemos ifconfig, nos debería dar algo así:

bond0     Link encap:Ethernet  HWaddr 2c:27:d7:cf:94:8d
          UP BROADCAST MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


eth0      Link encap:Ethernet  HWaddr 2c:27:d7:cf:94:8d
          inet6 addr: fe80::2e27:d7ff:fecf:948d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:156893 errors:0 dropped:0 overruns:0 frame:0
          TX packets:115753 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:61256235 (61.2 MB)  TX bytes:21688444 (21.6 MB)
          Interrupt:42 Base address:0xc000


lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:9804 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9804 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1144922 (1.1 MB)  TX bytes:1144922 (1.1 MB)


Y ahora viene la parte más complicada: Tenemos que conectarnos al wifi por consola :)
Si nuestra vecina tiene una red wifi medio insegura, con cifrado WEP, la cosa es una poco más sencilla:

$ sudo iwconfig wlan0 essid "NOMBRE DE LA RED" key s:CONTRASEÑA DE LA RED && dhclient wlan0

Ahora si tenemos una vecina un poco más informada y su wifi tiene un cifrado WPA/WPA2, vamos a tener que leer un poco sobre wpa_supplicant. Básicamente necesitamos hacer lo siguiente:

Por las dudas que no los tengamos instalados:

$ sudo apt-get install wireless-tools wpa-supplicant

Y para hacer lo del password:

$ sudo su
# wpa_passphrase "NOMBRE DE LA RED" CONTRASEÑA >> /etc/wpa_supplicant/wpa.conf

# (apretar ctrl+D)

Con esto lo que hacemos es darle el encode correcto al password para que el protocolo lo entienda y guardarlo en el archivo .conf

$ sudo wpa_supplicant -iwlan0 -Dwext -c /etc/wpa_supplicant/wpa.conf -B

Donde -i wlan0 indica la interfaz, -c bla el archivo donde pusimos el password y -B para que se ejecute en background como demonio.
El parámetro -Dwext indica el driver wifi a usar. Esto ya depende de cada placa... en mi caso funciona con wext, pero hay otras posibilidades como atheros, madwifi, entre otros.

Ahora pedimos un IP al wifi por DHCP:

$ sudo dhclient wlan0

Con esto ya deberíamos habernos podido conectar al wifi por consola. Nuestro ifconfig se debería ver algo así:

bond0     Link encap:Ethernet  HWaddr 2c:27:d7:cf:94:8d
          UP BROADCAST MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


eth0      Link encap:Ethernet  HWaddr 2c:27:d7:cf:94:8d
          inet6 addr: fe80::2e27:d7ff:fecf:948d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:156922 errors:0 dropped:0 overruns:0 frame:0
          TX packets:115780 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:61257975 (61.2 MB)  TX bytes:21692984 (21.6 MB)
          Interrupt:42 Base address:0xc000


lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:10783 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10783 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1243501 (1.2 MB)  TX bytes:1243501 (1.2 MB)


wlan0     Link encap:Ethernet  HWaddr cc:52:af:92:72:50
          inet addr:192.168.1.104  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::ce52:afff:fe92:7250/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:127503 errors:0 dropped:0 overruns:0 frame:0
          TX packets:105728 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:138205580 (138.2 MB)  TX bytes:16866857 (16.8 MB)



Con lo que procedemos a bindear los slaves al bonding:

$ sudo ifenslave bond0 eth0 wlan0

Y ahora nuestro ifconfig debería verse finalmente así:

bond0     Link encap:Ethernet  HWaddr 2c:27:d7:cf:94:8d
          inet addr:192.168.1.103  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::2e27:d7ff:fecf:948d/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:284744 errors:0 dropped:0 overruns:0 frame:0
          TX packets:222105 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:199693249 (199.6 MB)  TX bytes:38657437 (38.6 MB)


eth0      Link encap:Ethernet  HWaddr 2c:27:d7:cf:94:8d
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:157168 errors:0 dropped:0 overruns:0 frame:0
          TX packets:116235 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:61461943 (61.4 MB)  TX bytes:21755756 (21.7 MB)
          Interrupt:42 Base address:0xc000


lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:10803 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10803 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1245294 (1.2 MB)  TX bytes:1245294 (1.2 MB)


wlan0     Link encap:Ethernet  HWaddr cc:52:af:92:72:50
          UP BROADCAST SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:127576 errors:0 dropped:0 overruns:0 frame:0
          TX packets:105870 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:138231306 (138.2 MB)  TX bytes:16901681 (16.9 MB)


Nótese que la bond0 tiene el ip que debería tener la eth0 y dice "UP BROADCAST RUNNING MASTER MULTICAST" y las slaves dicen "UP BROADCAST SLAVE MULTICAST".

Ahora nuestro internet debería volar pagando sólo por una conexión ;)

Y cómo sabemos que esto es cierto? Así:

$ cat /proc/net/bonding/bond0

Y nos debería dar algo así:

Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)


Bonding Mode: transmit load balancing
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0


Slave Interface: eth0
MII Status: up
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 2c:27:d7:cf:94:8d
Slave queue ID: 0


Slave Interface: wlan0
MII Status: down
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: cc:52:af:92:72:50
Slave queue ID: 0

No hay comentarios:

Publicar un comentario