Compartir en facebook Compartir en google+ Compartir en twitter Compartir en pinterest Compartir en linkedin

Configura Orange Pi como punto de acceso WiFi

Publicado en Mayo de 2017

¿Te gustaría usar tu Pi como un punto de acceso WiFi? Si quieres usar una configuración inalámbrica y no dispones de router WiFi, o si quieres ensanchar la cobertura en un punto donde tengas acceso sólo a través de Ethernet. O quizás el primer paso para acceder a la Deep Web (internet profunda, internet invisible o internet oculta). Entonces este es tu tutorial.

Que necesitas:

En realidad, para este tutorial no necesitas ni monitor ni teclado si todo lo haces a través de SSH. Esta guía se basa en una Orange Pi 2, aunque puede ser cualquiera que tenga conexión WiFi, ya sea por hardware o a través de un dongle. Para arrancar partiremos de una instalación Arbiam y conexión a internet a través de Ethernet.

Primero debemos localizar nuestra tarjeta WiFi. Con

ifconfig -a

veremos todas las conexiones. Una de ellas será nuestra WiFi, normalmente será wlan0. Asegúrate de que sea esa o ajusta el código siguiente y cambia wlan0 por tu tarjeta.

root@orangepi2mini:~# ifconfig -a
eth0      Link encap:Ethernet  HWaddr ea:3b:30:d7:50:41
          inet addr:192.168.1.7  Bcast:192.168.1.255  Mask:255.255.255.0
......

wlan0     Link encap:Ethernet  HWaddr 58:63:56:cd:4c:23
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)				

Comenzamos por los imprescindibles:

sudo apt-get update
sudo apt-get upgrade

Ahora instalamos el software que actuará como el 'hostap' (punto de acceso del host) y un iptables manager:

sudo apt-get install hostapd isc-dhcp-server
sudo apt-get install iptables-persistent

Pulsa Enter para validar las 2 siguientes pantallas para salvar las reglas de las iptables para IPv4 e IPv6.

En los siguientes pasos vamos a configurar el servidor de DHCP, siglas en inglés de Dynamic Host Configuration Protocol, en español "protocolo de configuración dinámica de host", que es un servidor que usa protocolo de red de tipo cliente/servidor en el que generalmente un servidor posee una lista de direcciones IP dinámicas y las va asignando a los clientes conforme éstas van quedando libres. Editaremos el archivo /etc/dhcp/dhcpd.conf para que las conexiones WiFi entrantes obtengan automáticamente direcciones IP, DNS, etc. Ejecuta este comando para editar el archivo:

sudo nano /etc/dhcp/dhcpd.conf

Encuentra las siguientes líneas y coméntalas con el símbolo # para que no tengan efecto:

option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

quedando de la siguiente forma:

#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;

quita el símbolo # de la línea authoritative; para que SI se ejecute, quedando:

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

Y añade las siguientes líneas al final del archivo que configuran nuestra red:

subnet 192.168.42.0 netmask 255.255.255.0 {
	range 192.168.42.10 192.168.42.50;
	option broadcast-address 192.168.42.255;
	option routers 192.168.42.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;
}

Guarda el fichero y sal del editor. Vamos a editar otro archivo. Ejecuta:

sudo nano /etc/default/isc-dhcp-server

y busca la línea donde pone INTERFACES="" y cámbialo por el nombre de tu adaptador WiFi:

INTERFACES="wlan0"

Lo siguiente es asignar una IP estática a la conexión WiFi, así que lo primero es desactivarla si estaba arrancada. Si no lo estaba, tampoco pasa nada por ejecutar la siguiente instrucción, así que vamos a lanzarla de todas maneras:

sudo ifdown wlan0

A continuación, configuraremos la conexión wlan0 para que sea estática y entrante. Para editar el archivo, ejecuta:

sudo nano /etc/network/interfaces

Encuentra la línea donde pone auto wlan0 y añade el símbolo # para que esa línea no se ejecute. Hazlo en todas la líneas que se refieran a wlan0 porque necesitamos actualizarlas. Dependiendo de la distribución, habrá más o menos referencias así que no puedo ser más explícito. Ahora añade al final:

allow-hotplug wlan0
iface wlan0 inet static
  address 192.168.42.1
  netmask 255.255.255.0

Debe quedarte más o menos así:

Asigna manualmente una IP fija o estática al adaptador WiFi con la siguiente línea:

sudo ifconfig wlan0 192.168.42.1

Ahora tenemos que configurar los detalles del punto de acceso. Crearemos una red protegida con contraseña para mayor seguridad. Crea un nuevo fichero con la siguiente línea:

nano /etc/hostapd/hostapd.conf

y pega el siguiente contenido para crear y configurar esa red:

interface=wlan0
#driver=rtl871xdrv
ssid=Onion Pi
country_code=ES
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=pa22w0rd_extra_d1f1c1l
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
wpa_group_rekey=86400
ieee80211n=1
wme_enabled=1

Algunas observaciones. Como puedes ver hay una línea comentada que hace referencia a un driver. Este es el driver del adaptador WiFi. Con mi Orange Pi 2 no lo he necesitado, pero si usas un dongle u otra tarjeta, quizás lo necesites. El que he usado aquí, el rtl871xdrv es genérico, pon el tuyo en caso de necesitarlo. En ssid puedes poner lo que quieras, es el nombre de tu nueva red WiFi. En wpa_passphrase=pa22w0rd_extra_d1f1c1l pon la tuya propia. Guarda y sal. Para que se pueda ejecutar este archivo, tenemos que configurar lo siguiente. Ejecuta:

sudo nano /etc/default/hostapd

y encuentra la línea donde pone #DAEMON_CONF="" y cámbialo por:

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

Recuerda quitar el símbolo # porque necesitamos que esa línea se ejecute. Guarda y sal. Venga, que ya estamos acabando. Ejecuta:

sudo nano /etc/init.d/hostapd

y encuentra la línea DAEMON_CONF= para decirle que la configuración que tiene que usar es la que hemos creado en los pasos anteriores:

DAEMON_CONF=/etc/hostapd/hostapd.conf

Necesitamos configurar NAT para que, al arrancar, permita a uno o a varios clientes conectarse al WiFi y disponer de todos los datos a través de la IP única de Ethernet. Ejecuta:

sudo nano /etc/sysctl.conf

Y añade la siguiente línea al final del archivo:

net.ipv4.ip_forward=1

Ejecuta las siguientes líneas para ejecutarlo inmediatamente y que no sea necesario reiniciar y para crear la traducción de red entre el puerto Ethernet eth0 y el puerto wifi wlan0:

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
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

Si quieres ver las tablas usa:

sudo iptables -t nat -S
sudo iptables -S

Te debe dar algo así:

root@orangepi2mini:~# sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -i wlan0 -p tcp -m tcp --dport 22 -j REDIRECT --to-ports 22
-A PREROUTING -i wlan0 -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
-A PREROUTING -i wlan0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040
-A POSTROUTING -o eth0 -j MASQUERADE
root@orangepi2mini:~# sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -j ACCEPT

Para que toda la magia se arranque al iniciar con la herramienta iptables-persistent que instalamos al principio, ejecuta lo siguiente:

sudo sh -c "iptables-save > /etc/iptables/rules.v4"

Y ya por último, para ver que todo funciona correctamente:

sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

Esto ejecuta hostapd manualmente con nuestro archivo de configuración.

root@orangepi2mini:~# sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
Configuration file: /etc/hostapd/hostapd.conf
Using interface wlan0 with hwaddr 58:63:56:cd:4c:23 and ssid "Onion Pi"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED

Una última advertencia. Tras ejecutar esta línea te quedarás sin PROMPT, es decir, este terminal quedará inutilizado, pero esto sólo te pasará esta vez, el siguiente arranque todo será automático. Lo digo por que la primera vez yo me quedé esperando una respuesta que nunca llegó... Ahora puedes comprobar con otro equipo wifi que ves tu SSID y puedes conectarte a ella (recuerda la que pusiste en el archivo /etc/hostapd/hostapd.conf. En el ejemplo se llama Onion Pi). Si es así, !!has configurado correctamente el punto de acceso¡¡.

Tu punto de acceso ya funciona. Laborioso, pero fácil ¿verdad?. Espero que te haya sido de utilidad, no dudes en escribir un comentario si ves algún error o si puedo ayudarte.


Utiliza este espacio si quieres añadir algún comentario adicional o si tienes alguna duda.
No olvides añadir tu distribución y tu placa.

Todos los comentarios serán validados antes de su publicación.
  1. Michi

    Genial! Muy completo. Me ha funcionado "casi" a la primera. He tenido un problemilla con la orange pi zero (h2+). Primero, el ultimo armdebian (en este momento con el kernel 4.11) no soporta wifi. Asi que he instalado un 3.4. Aun asi he tenido que anadir estas lineas en el /etc/init.d/hostapd.conf

    --- entre las lineas start) y log_daemon
    start)
    nmcli nm wifi off
    rfkill unblock wlan
    ifconfig wlan0 192.168.2.1/24 up
    sleep 1
    service isc-dhcp-server restart
    log_daemon_msg "Starting $DESC" "$NAME"

    El motivo, en https://askubuntu.com/questions/472794/hostapd-error-nl80211-could-not-configure-driver-mode

    Y por ultimo, para que arrancara directamente al iniciar:
    sudo update-rc.d hostapd enable

    Muchas gracias por el curre!!!


  2. Javier

    Hola Michi. Cada placa y distribución tienen sus propias características, y en tu caso, te has tenido que buscar la vida y lo has resuelto. Felicidades. Y muchas gracias por aportar la solución, que seguro a alguien le sirve también. Muchas gracias de nuevo.


  3. Saul

    hola hice todo al pie de la letra salvo en auto wlan0 que no me aparecio, intente conectar y se queda en: obteniendo direccion ip... que puedo hacer?


  4. Javier

    Hola Saul. No se a que parte te refieres. Lo único que te puedo decir es que repases todo el código y busques algún error tipográfico. Saludos.



Nombre*

Email* Nunca será publicado ni compartido

Comentario*



Copyright © 2016. Todos los derechos reservados | Diseño JaviPSantos

Solicitamos su permiso para obtener datos estadísticos de su navegación en esta web, en cumplimiento del Real Decreto-ley 13/2012. Si continúa navegando consideramos que acepta el uso de cookies.

OK | Más información