===== hostapd =====
Siempre he envidiado esos aparatitos que permiten convertir la señal de un celular para que funcione como router WiFi, se les conoce como MiFi. La cosa es que son caros, algunos valen de los 90 a los 150 dólares. Pensé que es un abuso que cobren tan caro y me he dado a la tarea de investigar como se puede hacer que mi laptop reparta internet inalámbrico con un modem usb, con el fin de copiar la configuración a mi raspberrypi y que me sirva de MiFi.
Mis utensilios son los siguientes:
* Tengo un modem USB, en mi caso tengo un Huawei E3531, puede consultar las especificaciones [[http://support.huawei.com/ecommunity/bbs/10175059.html|acá]]
* Tengo una tarjeta WiFi USB, en mi cao tengo un D-Link DWA-131, puede consultar las especificaciones [[http://www.dlink.co.th/products/?idproduct=589|acá]]
* Una laptop, es un estornaco, una Lenovo x140e, puede consultar las especificaciones [[http://shop.lenovo.com/us/en/laptops/thinkpad/x-series/x140e/#tab-tech_specs|acá]]
* Un Raspberry Pi 2, puede consultar las especificaciones [[https://www.raspberrypi.org/products/raspberry-pi-2-model-b/|acá]]
* Poco dinero
Me voy a detener un poco en la maravilla del modem USB, éste al ser insertado en el sistema operativo crea una interfaz de red ethernet, la cual a su vez obtiene una IP de la subred 192.168.8.X, si usted ingresa con su navegador web a la IP 192.168.8.1 se le va a desplegar la página de bienvenida del modem, con datos muy interesantes. Generalmente estos dispositivos son muy tediosos porque crea un dispositivo modem y son algo mas complicados de configurar o por lo menos es menos amigable.
==== La laptop repartiendo internet ====
Primeramente voy a configurar la laptop para que reparta internet... ustedes preguntarán... ¿porque usar la tarjeta USB WiFi, si las laptops ya tienen una tarjeta WiFi? bueno les cuento que si están usando el driver de Broadcom, no van a poder hacerlo.
$ lspci | grep 802
01:00.0 Network controller: Broadcom Corporation BCM43228 802.11a/b/g/n
Cuadro 1
En el Cuadro 1 se muestra un detalle de la salida del comando lspci detallando a la Broadcom.
Para validar si tarjeta wireless soporta convertirse en un Access Point (AP) debe instalar una herramienta que se llama iw, para ello ejecute el comando contenido en el Cuadro 2:
# apt-get install iw
Cuadro 2
Una vez hecho esto ejecute el comando contenido en el Cuadro 3:
$ iw list | grep "Supported interface modes" -A 8
Cuadro 3
En el caso de mi escenario tengo conectado la tarjeta WiFi USB, entonces se puede apreciar en el Cuadro 4 ambas interfaces, una soporta el modo AP, mientras que la Broadcom NO, the bastard...
# iw list | grep "Supported interface modes" -A 8
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* WDS
* monitor
* mesh point
Band 1:
--
Supported interface modes:
* IBSS
* managed
Band 1:
Bitrates (non-HT):
* 1.0 Mbps
* 2.0 Mbps (short preamble supported)
* 5.5 Mbps (short preamble supported)
* 11.0 Mbps (short preamble supported)
Cuadro 4
Entonces mi escenario es el siguiente:
* Dos tarjetas ethernet:
* eth0: la tarjeta integrada de la laptop
* eth1: el modem USB
* Dos tarjetas WiFi:
* wlan0: la tarjeta integrada de la laptop
* wlan1: la tarjeta WiFi USB
=== Instalación ===
Vamos necesitar el programa hostapd, que puede ser instalado con el comando contenido en el cuadro 5:
# apt-get install hostapd
Cuadro 5
Ahora edite el archivo **/etc/default/hostapd** y modifique el contenido para que sea igual al texto contenido en el Cuadro 6:
# Defaults for hostapd initscript
#
# See /usr/share/doc/hostapd/README.Debian for information about alternative
# methods of managing hostapd.
#
# Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration
# file and hostapd will be started during system boot. An example configuration
# file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz
#
DAEMON_CONF="/etc/hostapd/hostapd.conf"
# Additional daemon options to be appended to hostapd command:-
# -d show more debug messages (-dd for even more)
# -K include key data in debug messages
# -t include timestamps in some debug messages
#
# Note that -B (daemon mode) and -P (pidfile) options are automatically
# configured by the init.d script and must not be added to DAEMON_OPTS.
#
DAEMON_OPTS="-d"
Cuadro 6
Cree el archivo **/etc/hostapd/hostapd.conf** para que luzca similar al texto contenido en el Cuadro 7:
interface=wlan1
bridge=br0
#Aquí debe indicar como desea que aparezca la red wireles
ssid=sofia_preciosa
hw_mode=g
wpa=2
#Aquí debe indicar un password convincent
wpa_passphrase=C4mb14m3*F4v0r
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Cuadro 7
Ahora, vamos a configurar un adaptador puente, el fin de este adaptador puente es transmitir la información que entra y sale por la interfaz eth1 para que entre y salga por la interfaz wlan1, es decir que reenvíe la información. Para ello edite el archivo **/etc/network/interfaces** y modifique el contenido para añadir el texto contenido en el Cuadro 8:
iface br0 inet static
bridge_ports wlan1 eth1
address 192.168.8.100
netmask 255.255.255.0
network 192.168.8.0
## ip del modem USB ##
gateway 192.168.8.1
dns-nameservers 192.168.8.1
Cuadro 8
Luego de esto instale el paquete bridge-utils con el comando contenido en el Cuadro 9:
# apt-get install bridge-utils
Cuadro 9
Una vez hechos los cambios es hora de activar el servicio, para ello ejecute el comando contenido en el Cuadro 10 si utiliza una versión de Debian anterior a 8:
# /etc/init.d/hostapd start
Cuadro 10
Si utiliza Debian 8 o posterior... podría hacer lo mismo, pero como ya tiene systemd el comando adecuado es el que contiene el Cuadro 11:
# systemctl start hostapd
Cuadro 11
¡Listo! Valide conectarse con su dispositivo inalámbrico y navegue por internet. Si no funcionó, revise de nuevo los pasos. Es necesario indicar que el DHCP que toma el dispositivo que desea conectar es el mismo que proporciona el modem USB, por lo que si su dispositivo no tiene esa función, no va a recibir la IP, me da mucha pereza y como no aplica en mi caso, documentar lo del servidor DHCP.
==== Raspberry Pi repartiendo internet ====
Para validar si tarjeta wireless soporta convertirse en un Access Point (AP) debe instalar una herramienta que se llama iw, para ello ejecute el comando contenido en el Cuadro 12:
# apt-get install iw
Cuadro 12
Una vez hecho esto ejecute el comando contenido en el Cuadro 13:
$ iw list | grep "Supported interface modes" -A 8
Cuadro 13
En el caso de mi escenario tengo conectado la tarjeta WiFi USB, entonces se puede apreciar en el Cuadro 14 que soporta el modo AP:
# iw list | grep "Supported interface modes" -A 8
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* WDS
* monitor
* mesh point
Band 1:
Cuadro 14
Entonces mi escenario es el siguiente:
* Dos tarjetas ethernet:
* eth0: la tarjeta integrada de la Pi
* eth1: el modem USB
* Dos tarjetas WiFi:
* wlan0: la tarjeta WiFi USB
=== Instalación ===
Vamos necesitar el programa hostapd, que puede ser instalado con el comando contenido en el Cuadro 15:
# apt-get install hostapd
Cuadro 15
Ahora edite el archivo **/etc/default/hostapd** y modifique el contenido para que sea igual al texto contenido en el Cuadro 16:
# Defaults for hostapd initscript
#
# See /usr/share/doc/hostapd/README.Debian for information about alternative
# methods of managing hostapd.
#
# Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration
# file and hostapd will be started during system boot. An example configuration
# file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz
#
DAEMON_CONF="/etc/hostapd/hostapd.conf"
# Additional daemon options to be appended to hostapd command:-
# -d show more debug messages (-dd for even more)
# -K include key data in debug messages
# -t include timestamps in some debug messages
#
# Note that -B (daemon mode) and -P (pidfile) options are automatically
# configured by the init.d script and must not be added to DAEMON_OPTS.
#
DAEMON_OPTS="-d"
Cuadro 16
Cree el archivo **/etc/hostapd/hostapd.conf** para que luzca similar al texto contenido en el Cuadro 17:
interface=wlan0
bridge=br0
#Aquí debe indicar como desea que aparezca la red wireles
ssid=sofia_preciosa
hw_mode=g
wpa=2
#Aquí debe indicar un password convincent
wpa_passphrase=C4mb14m3*F4v0r
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Cuadro 17
Ahora, vamos a configurar un adaptador puente, el fin de este adaptador puente es transmitir la información que entra y sale por la interfaz eth1 para que entre y salga por la interfaz wlan0, es decir que reenvíe la información. Para ello edite el archivo **/etc/network/interfaces** y modifique el contenido para añadir el texto contenido en el Cuadro 18:
iface br0 inet static
bridge_ports wlan0 eth1
address 192.168.8.100
netmask 255.255.255.0
network 192.168.8.0
## ip del modem USB ##
gateway 192.168.8.1
dns-nameservers 192.168.8.1
Cuadro 18
Luego de esto instale el paquete bridge-utils con el comando contenido en el Cuadro 19:
# apt-get install bridge-utils
Cuadro 19
Una vez hechos los cambios es hora de activar el servicio, para ello ejecute el comando contenido en el Cuadro 20 si utiliza una Raspbian 7:
# /etc/init.d/hostapd start
Cuadro 20
Si utiliza Raspbian 8 o posterior... podría hacer lo mismo, pero como ya tiene systemd el comando adecuado es el que contiene el Cuadro 21, al momento de escribir este documento aún no ha sido lanzado Raspbian 8, pero por si acaso:
# systemctl start hostapd
Cuadro 21
¡Listo! Valide conectarse con su dispositivo inalámbrico y navegue por internet. Si no funcionó, revise de nuevo los pasos. Es necesario indicar que el DHCP que toma el dispositivo que desea conectar es el mismo que proporciona el modem USB, por lo que si su dispositivo no tiene esa función, no va a recibir la IP, me da mucha pereza y como no aplica en mi caso, documentar lo del servidor DHCP.
==== Referencias ====
* https://wiki.gentoo.org/wiki/Hostapd
* http://www.cyberciti.biz/faq/debian-ubuntu-linux-setting-wireless-access-point/