lunes, 4 de febrero de 2013

Crear red wifi en GNU/Linux (iwconfig y todas esas movidas)

Esta entrada pretende ser una simple receta de cómo crear una red wifi con nuestro ordenador (con GNU/Linux claro).

La referencia principal ha sido ésta.

He leído por muchos lados en los últimos años que puede haber problemas con la tarjeta, el driver y Linux, que si no soporta tal o no soporta cual. Nunca he tenido esos problemas así que no los trataré aquí. Espero que no te pasen a ti.

En estos ejemplos la tarjeta wifi será eth1. La red que crearé sera "red_to_loca" y las direcciones de la misma serán 192.168.15.X.

$ sudo ifconfig eth1 down
$ sudo iwconfig eth1 mode ad-hoc essid red_to_loca
$ sudo ifconfig eth1 192.168.15.1 up

Con esto otros dispositivos ya deberían poder ver la red y conectarse a ella, sin embargo no recibirán dirección IP alguna (o se configurarán con direcciones IP zeroconf del tipo 169.254.0.0/16). Para esto vamos a tener que instalar un servidor DHCP.

$ sudo apt-get install isc-dhcp-server

Antes de arrancar el servicio tenemos que configurarlo (lo siento, tengo la manía de usar sudo vim :-s).

$ sudo vim /etc/dhcp/dhcpd.conf

subnet 192.168.15.0 netmask 255.255.255.0 {
    range 192.168.15.10 192.168.15.20;
    option routers 192.168.15.1;
    option broadcast-address 192.168.15.255;
    option domain-name-servers 8.8.8.8;
}


Los parámetros de configuración ya al gusto, rangos de direcciones IP, la puerta de enlace (debería ser la de nuestro ordenador, aunque si estamos haciendo redes más complejas podría variar... pero si estás metido en redes más complejas seguro que sabes lo que estas haciendo :). En este caso hemos usado uno de los servidores DNS de Google (8.8.8.8). ¡Este server debe ser el más cargado del mundo!, más que los raíces incluso xD.

Con esto los dispositivos que se conecten a tu red ya recibirán una dirección IP "de verdad", pero no podrán acceder a Internet, solamente a la red que acabamos de crear. Para conseguir dar acceso a Internet vamos a tener que habilitar el forwarding en nuestro ordenador. Aquí es donde casi siempre en los tutoriales veo un feísimo (al menos desde mi punto de vista) 1 arrojado a /proc/sys/net/ipv4/ip_forward. Funcionar funciona, pero creo lo suyo sería usar sysctl que para eso está.

$ sudo sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

Con esto nuestro ordenador permitirá el reenvío de tráfico entre tarjetas, si intentamos navegar con un dispositivo de la red (distinto al que está creando la red) podremos ver que efectivamente el tráfico generado está yendo de la interfaz wifi (eth1 en mi caso) a la otra interfaz (aquí estoy asumiendo que el ordenador tiene, al menos, dos interfaces y que además "la otra" está conectada a Internet, si no nada de esto tiene sentido). En mi caso lo que veo son peticiones DNS a 8.8.8.8. Sin embargo no vamos a conseguir respuestas. Varios motivos pueden dar lugar a esto, el más común que otros routers por el camino no sepan entregarnos la respuesta (cosa normal oiga, en sus tablas de rutas no saben a quién enviarle paquetes para 192.168.15.X).

Ahora lo que toca es hacer NAT en nuestro ordenador, para ello hacemos uso de iptables.

$ sudo iptables -t nat -A POSTROUTING -j MASQUERADE

Con esto nuestro ordenador automáticamente cambiará las direcciones IP de los paquetes salientes por la del propio ordenador. Dado que éste sí tiene acceso a Internet las respuestas llegarán (deberían llegar) y automáticamente serán cambiadas a las originales de nuestra red wifi y enviadas.

Una cosa, el reenvío de tráfico está siendo posible porque al meterme en la red 192.168.15.0, el kernel automáticamente ha metido cierta ruta en la tabla de rutas.

$ sudo route -n
Tabla de rutas IP del núcleo
Destino       Pasarela  Genmask        Indic Métric Ref Uso Interfaz
...
192.168.15.0  0.0.0.0   255.255.255.0  U     0      0   0   eth1

...

Si no tenemos esta regla tendremos que añadirla a mano.

$ sudo route add 192.168.15.0 netmask 255.255.255.0 dev eth1

Y con esto, deberíamos tener ya nuestra red_to_loca por ahí pululando, dando IP a quien se conecte y hasta la interné!.

Saludos.


1 comentario: