Tutorial Rasbperry Pi - Cómo crear un punto de acceso WiFi

Consigue gratis tu cuenta

Curso de Docker

En este curso aprenderás todo lo necesario para utilizar Docker: crear contenedores, generar imágenes, configurar servidores web y comandos útiles, entre otras muchas cosas. Cuando acabes el curso serás capaz de utilizar Docker como si llevaras toda la vida haciéndolo.

Comenzar ahora
raspberry pi punto de acceso wifi nat tutorial geeky theory iptables portada Bienvenidos a un nuevo tutorial de Raspberry Pi, en el cual aprenderemos a crear un punto de acceso WiFi a través del cual tendremos acceso a Internet. Muchas veces he estado en sitios que tenían toma Ethernet pero no señal WiFi, por lo que conectar por ejemplo un teléfono o tablet era imposible. Sin embargo, con este tutorial tendremos una red WiFi para nosotros solos gracias a la Raspberry Pi.

Material necesario

  • Raspberry Pi.
  • Cable Ethernet.
  • Adaptador WiFi.
  • Tarjeta de memoria compatible (mínimo 4GB).

Instalación de Raspbian

Este tutorial lo he realizado tras instalar Raspbian en la Raspberry Pi. Puedes ver cómo hacerlo desde este tutorial. Una vez hecho esto, podemos seguir con los pasos siguientes.

Instalar los programas necesarios

Antes de nada, como siempre hay que hacer al instalar un nuevo sistema operativo, actualizamos los programas instalados con estos comandos:
sudo apt-get update
sudo apt-get upgrade
Tras esto, instalaremos dos programas que nos permitirán crear el punto de acceso WiFi: hostapd y isc-dhcp-server.
sudo apt-get install hostapd isc-dhcp-server
Configurar el servidor DHCP DHCP es el protocolo que hace que automáticamente se nos asigne una dirección IP al conectarnos a una red. Para configurarlo, abre su fichero de configuración:
sudo nano /etc/dhcp/dhcpd.conf
Busca las siguientes líneas:
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
Cuando las hayas encontrado, coméntalas con un caracter almohadilla '#' delante:
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
Ahora busca las siguientes líneas:
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;
Descomenta la tercera línea para que quede así:
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
Por último, añade las siguientes líneas al final del archivo:
subnet 192.168.100.0 netmask 255.255.255.0 {
    range 192.168.100.10 192.168.100.50;
    option broadcast-address 192.168.100.255;
    option routers 192.168.100.1;
    default-lease-time 600;
    max-lease-time 7200;
    option domain-name "local";
    option domain-name-servers 8.8.8.8, 8.8.4.4;
}
Ya hemos terminado de modificar este archivo, así que ciérralo con las teclas CTRL+X y luego Y. A continuación, abriremos otro archivo de configuración:
sudo nano /etc/default/isc-dhcp-server
Busca la línea INTERFACES="" y entre las comillas añade "wlan0": INTERFACES="wlan0". Una vez hecho esto, cierra y guarda el archivo. Configurar una IP estática en wlan0 A continuación, configuraremos una dirección IP estática para wlan0. De esta manera, siempre será la misma. Para ello, desactivamos la interfaz wlan0 con el siguiente comando:
sudo ifdown wlan0
Una vez desactivada la interfaz, hay que modificar su configuración:
sudo nano /etc/network/interfaces
Después de la línea allow-hotplug wlan0, añade lo siguiente:
iface wlan0 inet static
  address 192.168.100.1
  netmask 255.255.255.0
Y comenta con un '#' las tres líneas siguientes. El archivo completo debe quedar así:
auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0

iface wlan0 inet static
  address 192.168.100.1
  netmask 255.255.255.0

#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp
Cierra el archivo y guárdalo. Tras esto, asigna la IP a la interfaz wlan0 y habilítala con el siguiente comando:
sudo ifconfig wlan0 192.168.100.1

Configurar el punto de acceso

Ahora toca configurar el punto de acceso (SSID, contraseña, tipo de seguridad, etc.). Para ello, vamos a crear un nuevo archivo con el siguiente comando:
sudo nano /etc/hostapd/hostapd.conf
Debido a que acabamos de crearlo, no tiene ningún contenido, por lo que hay que pegar lo siguiente:
interface=wlan0
driver=rtl871xdrv
ssid=RPi_PA
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=contrasena
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Podéis cambiar el SSID de RPi_PA (Raspberry Pi Punto de Acceso) al que queráis, así como la contraseña (wpa_passphrase). Asegúrate de que el archivo no tiene líneas extra ni espacios al final de cada línea. A continuación, debemos decirle a la Raspberry Pi dónde encontrar el archivo de configuración que acabamos de crear. Para ello, modificamos la línea #DAEMON_CONF del siguiente archivo:
sudo nano /etc/default/hostapd
La vamos a dejar así: DAEMON_CONF="/etc/hostapd/hostapd.conf". Acuérdate de quitar la almohadilla para descomentar la línea. Guarda y cierra el archivo. Configuración de NAT NAT (Network Address Translation) es el protocolo que permite que muchos clientes puedan conectarse a Internet a través de una única conexión IP "tunelando" la conexión. Debes hacer esto incluso si sólo vas a tener un cliente conectado. Abre el siguiente archivo de configuración:
sudo nano /etc/sysctl.conf
Añade la siguiente línea al final:
net.ipv4.ip_forward=1
Estos cambios se aplicarán cuando reiniciemos el sistema, pero para hacerlo inmediatamente puedes introducir lo siguiente en consola, que tiene el mismo objetivo que lo anterior:
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
Ahora hay que configurar las iptables para hacer la "traducción" entre la interfaz Ethernet (Eth0) y la WiFi (wlan0):
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
El problema de esto es que habría que ejecutar los comandos anteriores cada vez que encendamos la Raspberry Pi, pero para que sea automático introducimos lo siguiente:
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
A continuación volvemos al archivo de configuración de las interfaces de red que hemos modificado con anterioridad:
sudo nano /etc/network/interfaces
Al final del todo, hay que añadir la línea siguiente:
up iptables-restore < /etc/iptables.ipv4.nat

Actualizar hostapd

Dependiendo de dónde hayáis comprado vuestro adaptador WiFi, este tutorial funcionará o no. Para intentar arreglarlo, actualizaremos a una versión nueva de hostapd que proporcionan desde AdaFruit:
wget http://adafruit-download.s3.amazonaws.com/adafruit_hostapd_14128.zip
unzip adafruit_hostapd_14128.zip
Ahora toca intercambiar la versión antigua por la nueva:
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.ORIG
sudo mv hostapd /usr/sbin
sudo chmod 755 /usr/sbin/hostapd

¿Funcionará?

Para ver si todo funciona correctamente, ejecuta este comando e intenta conectarte a la red WiFi que verás desde tu ordenador y que acabamos de crear:
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
raspberry pi punto de acceso wifi nat tutorial geeky theory iptables Puedes dejar de ejecutar el comando anterior y tener acceso a la terminal pulsando Control+C.

Últimos detalles

Ahora que ya sabemos que funciona, vamos a crear un daemon que se ejecutará cada vez que la Raspberry Pi se encienda:
sudo service hostapd start
sudo service isc-dhcp-server start
Es posible conocer el estado de los daemon con los siguientes comandos:
sudo service hostapd status
sudo service isc-dhcp-server status
Finalmente, para habilitar los daemon:
sudo update-rc.d hostapd enable
sudo update-rc.d isc-dhcp-server enable
Una vez hecho esto, ya tendremos nuestro punto de acceso WiFi configurado para que podamos acceder a Internet a través de nuestra Raspberry Pi conectada a un puerto Ethernet. Este tutorial ha quedado bastante largo y es un poco tedioso, pero merece la pena hacerlo porque es la primera parte de otro que publicaré pronto. ¡Un saludo!

Artículos relacionados

Arduino + Raspberry Pi - RaspDuino

Vamos a establecer una comunicación a través del puerto serie entre Arduino y Raspberry Pi

Tutorial Raspberry Pi - Texto a voz con Twitter y Google Translate

Tutorial para aprender cómo hacer con Google Translate y Twitter para que la Raspberry Pi les lea sus Tweets.


¿Quieres seguir aprendiendo?