Configurar una red Ad-Hoc en Linux

Hoy necesité compartir internet entre mi computadora server  y mi laptop en forma wireless porque mi router wifi dejo de funcionar (no por culpa del router, sino por culpa de Arnet). Lo primero que se me ocurrió fue configurar una red adhoc entre las dos computadoras y de esa manera compartir internet.

La experiencia de configurarlo, a mi gusto, me llevo a internarme un poquito en el funcionamiento del sistema ifupdown de Debian por lo que aquí dejaré mi solución al problema.

Lo primero que vale la pena aclarar es el problema que quería solucionar. Yo quería que al prender el servidor, este creara una red Adhoc y compartiera Internet por ella. No me era importante la seguridad, por lo que con WEP era suficiente.

El hardware y sistemas operativo que disponía era de una placa de red Wifi Atheros correctamente instalada y funcionando (si no les reconoce la placa tal vez necesiten instalar los restricted modules), y una placa 10/100 Realtek. Por medio de la placa cableada tenía la Internet que me proveía Fibertel. Como sistema operativo tenía Ubuntu Server 8.10 y no tenía planeado instalar ningún software nuevo.

Investigando en internet encontré varios blogs y documentación que me ayudaron en mi solución. Especialmente Jvare Blog y Prashanth Speaks-Technology and Life de los cuales se basa mi solución.

Ambos tenian el mismo problema, que necesitan la ejecución de un script que realizaba la configuración. Yo quería que sea de una manera mas automática y estándar.

Comenzaré copiando aquí el archivo interfaces que fue el resultado de mi trabajo, para después explicar, por si a alguien le interesa el como llegué a esta configuración

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

# Wireless card
auto ath0
iface ath0 inet static
madwifi-base wifi0
madwifi-mode adhoc
wireless-essid FerNetworkFiber
wireless-key s:12345
address 192.168.2.1
netmask 255.255.255.0
post-up /etc/network/share_internet || true

Las primeras partes del archivo simplemente setea la interfaz cableada y local, donde se pone interesante es cando se configura la interfaz ath0 que es la wireless.

Primero las lineas auto ath0 e iface, simplemente indican la primera que esta interfaz debe levantarse cuando se inicia el sistema en forma automática y la segunda que quiero configurarla de manera estática, o sea, diciendo manualmente cual será el ip, la mascara y demás información que necesite.

Las entradas que dicen address, y netmask no requieren mucha explicación y deberían ser conocidas por cualquiera que alguna vez estuvo configurando una interfaz estática. Simplemente indican cual será el IP estático de esa interfaz, y cual será su mascara. En este caso 192.168.2.1 es la ip y 255.255.255.0 su máscara.

Luego tenemos las entradas wireless-*. Estas se emplean para configurar el wireless con los datos necesarios. En este caso tenemos wireless-essid  y wireless-key. La primera dice cual sera el nombre de la red, la segunda cual sera su contraseña, aunque en una configuración tan simple como esta usa el protocolo WEP que dista de ser muy seguro, pero para un caso simple y temporal como el mio es mas que suficiente. Un comentario importante, para que luego una Pc con Windows pueda conectarse a esta red la contraseña debe tener exactamente 5 o 10 caracteres. (si ingresan una de 6 u 8 o cualquier otra cantidad que no sea 5 o 10 no podrán conectarse)

Luego, según la mayoría de la documentación que uno puede encontrar en internet dicen que debería haber una linea que diga wireless-mode adhoc para especificar que se quiere entrar en modo adhoc, pero en mi placa Atheros eso no funcionaba, y consultando el blog de Jvare que anteriormente nombré descubrí  que la forma de hacerlo consistía en destruir la interfaz y volver a crearla directamente en modo adhoc. Mi problema era como hacer esto desde el archivo interfaces.

Investigando un poco descubrí que dentro del directorio /etc/network/if-pre-up.d había un archivo llamado 050madwifi. Este archivo contenía las instrucciones necesarias para la destrucción y creación de las interfaces en el modo correcto, pero no se estaba ejecutando. Para que este se ejecute, se necesitaba especificar algo más.

Esto extra que había que especificar es el dispositivo asociado. Este es un dispositivo que se muestra cuando se hace un ifconfig y es creado cuando se carga el driver. En mi caso se llama wifi0. Para especificar esto es que está el parámetro madwifi-base wifi0.

Hecho esto, ya podía dar de baja y alta la red con ifup e ifdown, pero lo hacía mostrando un error, todo andaba bien, pero me molestaba ver el error. Este se debía a que igualmente estaba intentando cambiarse el modo usando iwconfig ath0 mode adhoc lo cual no anda en mi versió (creo que actual a la hora de escribir este artículo) del driver madwifi. Para eliminarlo, y nuevamente gracias a inspeccionar 050madwifi advertí que también se reconocía como modo a la orden madwifi-mode adhoc y de esta manera no se generaba ningúnerror.

Ya casi estaba todo listo, de hecho la red ya estaba planteada y podía hacer un ping entre esta pc y otra que se conectara a la wifi, en im caso una pc con Windows Vista. Pero no se estaba compartiendo internet. el problema era ahora compartir internet, problema el cual gracias a los blogs ya sabia como resolver, simplemente con tres comandos, uno para cargar el modulo de iptables_nat, otro para configurar el nateo (compartición de internet) y el ultimo para activarlo.

Creo que podría haber utilizado varia sentencias post-up ejecutando cada una de ellas uno de los comandos necesarios, pero decidí ir directamente a lo fácil(lo anterior ya me había llevado como 4 horas de investigación) y escribí un pequeño script que realizaba la tarea. Este archivo se ejecuta gracias a la línea que dice post-up. El ||true es para que sin importar el valor de retorno del archivo, se piense que se ejecutó correctamente y no genere ningún error el ifup (a pesar de que la interfaz haya sido realmente).

Copio aquí el resultado de mi archivo que habilita la compartición de internet

#!/bin/bash
modprobe iptable_nat
iptables -t nat -A POSTROUTING -o $IFACE -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
exit 0 

Hecho esto ya estaba preparada la configuración de mi servidor en modo adhoc. Ahora faltaba hacer la prueba conectando mi pc con Windows Vista al servidor y ver si navegaba en internet.

Como era de esperarse, no navegaba. Pero esto ya me lo esperaba. Tenía que configurar la placa wireless para conectarse a esta red adhoc, esto fue, siempre en la pc con vista, conectarse a la red utilizando la cotraseña que se habia puesto.  Además, como no configure un servidor DHCP habia que configurar el protocolo IPv4 manualmente. Para eso especifiqué una ip en el rengo correcto (192.168.2.2 fue mi eleccion) la puerta de enlace en windows sigue siendo 255.255.255.0 y el gateway pasa a ser el servidor, en mi caso 192.168.2.1.

Finalmente hay que configurar también los DNS. Estos deben ser los mismos que usa el servidor, que por suerte no suelen cambiar. Para saber cuales son los adecuados es suficiente con ver en el linux el archivo /etc/resolv.conf y utilizar los dos primeros que aparezcan. (o si aparece uno solo ese único)

Hecho esto, es que ahora puedo escribir este post en Windows Vista, saliendo por medio de una pc con Ubuntu 8.10 configurada como red Adhoc que comparte la internet que me provee Fibertel. (y esto seguira así hasta que arnet, quien me ofrese una internet más rápida, en la cual tengo un router wifi, vuelva a funcionar)

Si necesitan mas ayuda de como configurar la red en Windows, no duden en dejar un mensaje que si lo amerita haré un post dedicado a ese menester. Tambien si necesitan alguna aclaración co respecto a la configuración de Linux pueden escribirnos, aunque no soy un experto, y el mejor amigo de toda consulta es Google.

Finalmente, si les gusto y les pareció interesante y util tambien pueden escribirnos para contarnos sus experiencias y, por que no, darme alguan sugerencia de como mejorar mi método.



2 Responses to “Configurar una red Ad-Hoc en Linux”

  1. Saludos muy bueno tu tutorial pero me gusta compartir internet en una red ad hoc por medio de vista eh estado buscando en miles de sitios y en ninguno me an podido dar respuesta

    eh encontrado unos buenos tutorial pero me marcan que al finalizar la creacion de la red ad hoc me debe aparecer la opcion de compartir internet pero esta opcion no me aparece mi laptop cuenta con windows vista basic

  2. Diablito, lamentablemente mucho no puedo ayudarte, porque no tengo Windows Vista Home Basic, solo tengo un Vista Business en el cual si aparece la opción para compartir internet.

    No se si será por la versión de windows, ya que no todas soportan lo mismo que las otras, o algún problema en tu configuración.

    En todo caso, encontre una página en donde explica como activar la comparticion de internet (http://maximumpcguides.com/windows-vista/set-up-internet-connection-sharing-in-windows-vista) sin depender de que te aparezca ese boón. Te aconsejo que intentes montar la red adhoc como siempre, y luego activar la compartacion de internet como ese sitio dice.

    Un comentario, en mis pruebas, para que funcione bién la comparticion de internet, debí configurar la otra pc con una ip estatica (como 192.168.0.10), y default gateway de 192.168.0.1 (tambien necesitarás posiblmente configurar el DNS a usar)

Discussion Area - Leave a Comment