Crear un punto de acceso WIFI

Imagen de rioport
12 puntos

Esta guía la probé en Ubuntu 12.04 y Ubuntu 13.10. En este tutorial trataré de enseñar a crear un punto de acceso con la tarjeta de red inalámbrica (wlan0) para compartir internet, el cual se recibe por medio del cable de red (eth0). Con un poco de sentido común no será difícil adaptarlo a la necesidad de cada quien (p. ej si el internet se recibe mediante un módem 3G o si se quiere compartir a través de una tarjeta de red (inalámbrica) USB en lugar de por la integrada en el PC, ... o qué sé yo).

Comprobar si la tarjeta de red soporta el modo AP e instalar los paquetes necesarios:

Primero se necesita saber si la tarjeta de red inalámbrica que se pretende usar como AP soporta este modo, para ello se debe ejecutar el siguiente comando:

iw list

El cual devolverá la información sobre la tarjeta de red inalámbrica, ahí se debe buscar si la tarjeta soporta el modo AP, esto se encuentra en el apartado Supported interface modes, se debe buscar la palabra AP, es algo parecido a como se ve a continuación:

	Supported interface modes: 
		 ...
		 * AP
		 ...

Si la tarjeta de red no soporta el modo AP este tutorial no funcionará, pero aún se puede crear un hotspot en modo ad-hoc (o conseguir otra tarjeta que sí soporte el modo AP).

Si se tiene más de una tarjeta de red inalámbrica el anterior comando desplegará las características de cada una de ellas indentificandolas como Wiphy phy# , donde # es su identificador, pero no dirá cuál tarjeta es. Para saber de cuál se trata el programa lshw puede ayudar. Se debe ejecutar el siguiente comando:

sudo lshw -C network

El cual devolverá una lista de los dispositivos de red que se tienen, se debe buscar en aquellas que sean "Wireless interface" y revisar su physical id, p. ej:

  *-network 
       description: Wireless interface 
       product: AR9285 Wireless Network Adapter (PCI-Express) 
       vendor: Atheros Communications Inc. 
       physical id: 0
       ...

En este caso Wiphy phy0 corresponde a la tarjeta integrada de mi laptop (Una Atheros AR9285).

Una vez comprobado que la tarjeta de red soporta el modo AP se procede a actualizar la lista de paquetes e instalar los paquetes que se van a necesitar:

sudo apt-get update
sudo apt-get install hostapd dnsmasq

En Ubuntu 13.10 no viene instalado el paquete gksu, así que hay que instalarlo:

sudo apt-get install gksu

El programa dnsmasq se iniciará automáticamente después de instalarlo, para detenerlo basta con ejecutar:

sudo service dnsmasq stop

Se deshabilita el inicio automático de estos programas:

sudo update-rc.d -f hostapd disable
sudo update-rc.d -f dnsmasq disable

Nota: Si se usa dnsmasq no se debe deshabilitar

CONFIGURANDO HOSTAPD

Se procede a configurar las opciones para el punto de acceso, en este caso con seguridad WPA2. Para ello se necesita crear el archivo de configuración para hostapd en /etc/hostapd/hostapd.conf con el siguiente contenido:
(gksu gedit /etc/hostapd/hostapd.conf)

# Interfaz que se usara como AP:
# Cambiarla de acuerdo a sus necesidades
interface=wlan0 

# Driver a usar:
driver=nl80211 

# Nombre del punto de acceso (SSID):
# Obviamente este hay que cambiarlo
ssid=MiRedCasera

# Modo de radio, este depende de las capacidades del la tajeta que se usara, puede ser a,b,g o n:
hw_mode=g 

# Canal que usará el AP: 
channel=6

# Modo WPA que se usará (1 para WPA, 2 para WPA2, 3 para WPA + WPA2) 
wpa=2 

# Tipo de gestión de claves: WPA-PSK (WPA personal) o WPA-EAP (WPA Enterprise) 
wpa_key_mgmt=WPA-PSK 

# Contraseña de nuestra red:
# También esto hay que cambiarlo
wpa_passphrase=MiClaveFacil

# Filtrado de direcciones MAC: 0 acepta todos clientes excepto aquellos que estén en deny_mac_file,
# 1 Acepta solo a los clientes que estén en accept_mac_file.
macaddr_acl=0

# Ubicación completa de las listas accept_mac_file y deny_mac_file
# (deben contener una dirección MAC por linea):
#accept_mac_file=/etc/hostapd.accept
#deny_mac_file=/etc/hostapd.deny

# Algoritmo de autenticación: 0 Autenticación abierta, 1 Autenticación con clave compartida y 3 ambos.
auth_algs=1 

# Difusión de SSID: 0 Visible, 1 Oculto:
ignore_broadcast_ssid=0

* Se puede ajustar al gusto si se sabe qué hay que modificar, yo solo pongo este como ejemplo *

Y después se edita el archivo /etc/default/hostapd para que tome la configuración que se ha creado.
(gksu gedit /etc/default/hostapd)
Se cambia la linea

#DAEMON_CONF=""

por

DAEMON_CONF="/etc/hostapd/hostapd.conf"

CONFIGURANDO DNSMASQ

Se usará a dnsmasq como servidor dhcp, para ello se debe añadir las siguientes lineas al archivo /etc/dnsmasq.conf:
(gksu gedit /etc/dnsmasq.conf)

# Para que dnsmasq no lea el archivo /etc/resolv.conf
# o ningún otro en busca de servidores dns:
no-resolv

# Interfaz en la que dnsmasq responderá (¿escuchará?)a peticiones DHCP y DNS:
interface=wlan0

# Rango de direcciones IP para los (15) clientes que
# se pueden conectar al AP y duración de cesión (12 horas) de cada IP:
dhcp-range=10.10.0.1,10.10.0.16,12h

# Como se ha establecido que hostapd no lea ningún archivo externo
# en busca de servidores DNS se tienen que especificar aquí
# (en este caso se usan los DNS de Google):
server=8.8.8.8
server=8.8.4.4

A partir de Ubuntu 12.04 network-manager trae integrado su propia implementación de dnsmasq, lo que puede causar problemas al tratar de iniciar el programa dnsmasq, para solucionar esto hay que editar (con gksu gedit ...) el archivo /etc/NetworkManager/NetworkManager.conf y comentar o eliminar la linea que dice dns=dnsmasq .
Además para evitar que network-manager cause problemas con la conexión se le debe indicar que no controle esa tarjeta de red (la de la interfaz wlan0 en este caso). Para esto se debe conocer la MAC de la tarjeta que se usará como AP, por ejemplo si la MAC de wlan0 es 00:11:22:33:44:55 se debe agregar lo siguiente al final del archivo /etc/NetworkManager/NetworkManager.conf:

[keyfile] 
unmanaged-devices=mac:00:11:22:33:44:55

Y reiniciar network-manager:

sudo restart network-manager

PASOS FINALES

Iniciando hostapd y dnsmasq, inicio, asignación de IP estática y mascara de red a interfaz wlan0, ...etc
Recordar que para este ejemplo la conexión a internet se hace a través de eth0 y se comparte a travez de wlan0 :

sudo service hostapd start

sudo sysctl -w net.ipv4.ip_forward=1

sudo iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -o eth0 -j MASQUERADE

sudo ifconfig wlan0 up 10.10.0.1 netmask 255.255.255.0

sudo service dnsmasq start

Esto se debe hacer cada que se reinicie o apague (y vuelva a encenderse, naturalmente) el equipo.

OTRAS NOTAS

Si necesita conectarse a internet a traves de la tarjeta que se está usando como AP (wlan0) se deben ejecutar los siguientes comandos:

sudo service hostapd stop

sudo sysctl -w net.ipv4.ip_forward=0

sudo iptables -t nat -D POSTROUTING -s 10.10.0.0/16 -o eth0 -j MASQUERADE

Si no se usa dnsmasq tambien se puede detener con:

sudo service dnsmasq stop

Por último comentar la linea que se ha agregado al archivo /etc/NetworkManager/NetworkManager.conf (para que NM vuelva a gestionar la tarjeta de red) dejándola así:

#unmanaged-devices=mac:00:11:22:33:44:55

Y reiniciar network-manager:

sudo restart network-manager

Y para volver al modo AP descomentar la linea que se comentó en /etc/NetworkManager/NetworkManager.conf , reiniciar network-manager y ejecutar los PASOS FINALES.

------------------------------

Creo que eso es todo y como ya dije: aplicar el sentido común.

Fuentes:
* askubuntu.com/
* nims11.wordpress.com
* Y otras varias páginas (para ciertos detalles).