Punto de Acceso WI-FI 📡 en una Raspberry 🍓

destapeman

FUCK PUSSYS, YES BADASS
Miembro del equipo
Paladín de Nodo
Jinete de Nodo
Burgués de Nodo
Moderador
Noderador
Nodero
Noder
11 Ene 2019
3.128
4.425
Buenas noders,

Lo bueno siempre se hace esperar, esta vez os traigo un post de como convertir nuestra Raspberry Pi en un AP o Access Point o Punto de Acceso WI-FI, para conectarnos con el smartphone cuando nos encontramos en una situación en la que solo tenemos una conexión ethernet sin opción inalámbrica por ejemplo; echadle vosotros imaginación y econtradle utilidades a este post.

Para este tutorial necesitaremos:

- Raspberry Pi 2 Modelo B (Yo lo realizaré sobre esta versión)
- S.O. Raspbian Jessie 8 (Yo lo realizaré sobre esta versión)
- Adaptador WI-FI (En el modelos de raspi que utilizo ya viene con uno integrado de serie)


Lo primero será actualizar los repositorios para los programas que nos descarguemos para el post, estén actualizados:
$> sudo apt-get update

Ahora instalaremos los programas que harán correr los servicios:
$> sudo apt-get install hostapd isc-dhcp-server
hostapd-> es el encargado de crear el punto de acceso
isc-dhcp-server-> es el encargado de crear el servicio DHCP

Con esto ya tenemos instaladas todas las herramientas necesarias para la tarea que nos atañe, ahora toda configurarlas:

DHCP

Vemos si el servicio DHCP está corriendo y si en efecto lo vemos activo lo paramos:
$> sudo service isc-dhcp-server status $> sudo service isc-dhcp-server stop

Lo primero antes de nada Y ESTO GRABÁROSLO A FUEGO es realizar backup de CADA FICHERO que vayáis a modificar.
$> sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.20190104

Un vez realizado el backup, podemos modificarlo para dar el servicio que necesitamos
Abrimos el fichero de configuración del servicio DHCP, el fichero es '/etc/dhcp/dhcpd.conf ' ejecutando un editor de texto, yo utilizo vi, podéis utilizar otros como nano si os sentín más cómodos, esto no es ley.
$> vi /etc/dhcp/dhcpd.conf

El fichero tiene muchas opciones, pero en este post solo explicaré las que necesitamos, si queréis saber para que funcionan el resto podéis mirarlo en el man o lo indicáis en el post y abriré uno nuevo explicando para qué sirven los parámetros.

Buscamos las siguientes líneas que estarán descomentadas:
option domain-name "example.org"; option domain-name-servers ns1.example.org, ns2.example.org;

La opción 'domain-name-servers' se emplea para enviar al cliente los servidores DNS que utilizará. Los servidores hay que especificarlos por orden de preferencia, primero el principal, y luego los secundarios. Si no disponemos de un servidor DNS en nuestra red entonces deberemos poner la IP del servidor y aún así se aconseja poner la IP porque ahorras trabajo al no tener que hacer resoluciones DNS cada vez que se quiera llamar al servidor. Nosotros lo incluiremos mas tarde dentro de la configuración que enviaremos al cliente en el paquete dhcp, por lo que las comentamos poniendo una "almohadilla" delante '#':
#option domain-name "example.org"; #option domain-name-servers ns1.example.org, ns2.example.org;

Buscamos la línea:
#authoritative;

Si un servidor es autoritario entonces podrá enviar mensajes DHCPNACK a aquellos clientes que envían un DHCPREQUEST con una propuesta de IP no válida, debido a que al cliente se le ha cambiado de segmento de red. En estos casos, si el servidor no es autoritario, lo que hace es no contestar.
Este parámetro se suele poner en el ámbito global indicándose así que el servidor DHCP es autoritario en todos los segmentos de la red, pero también puede aplicarse individualmente a cada segmento. No puede haber mas de un servidor DHCP autoritario en el mismo segmento de red, sino ocasionaría un problema.
El comportamiento autoritario del servidor DHCP también tiene una serie de connotaciones de seguridad, pues hace que los mensajes del diálogo entre el cliente y el servidor incluyan una serie de códigos para impedir que un equipo atacante puede interferir en dicho diálogo.
Y la descomentamos:
authoritative;

Buscamos las siguientes líneas
# A slightly different configuration for an internal subnet. #subnet 10.5.5.0 netmask 255.255.255.224 { # range 10.5.5.26 10.5.5.30; # option domain-name-servers ns1.internal.example.org; # option domain-name "internal.example.org"; # option routers 10.5.5.1; # option broadcast-address 10.5.5.31; # default-lease-time 600; # max-lease-time 7200; #}

Y las modificamos para que quede algo así:
# A slightly different configuration for an internal subnet. subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.10 192.168.10.90; option domain-name-servers 8.8.8.8, 8.8.4.4; option domain-name "raspberry"; option routers 192.168.10.1; option broadcast-address 192.168.10.255; default-lease-time 600; max-lease-time 7200; }

Para resumir:
- indicamos que la subred que vamos a ofrecer en el servidor DHCP es la 192.168.10.0/24
- que el rango de IPs que vamos a dar va de la .10 a la .90
- los DNS a los que se conectan para resolución de nombres indicamos que se conecten a los gratuitos de Google
- el nombre de nuestra raspberry
- la puerta de enlace (la IP de nuestra raspberry)
- la dirección broadcast
- los tiempos en segundos de concesión y de expiración.

Podéis poner cualquier IP del rango reservado para privadas, yo he puesto la 192.168/16 por costumbre, ya que tampoco vamos a conectar 5000 equipos a nuestra raspi

Según hemos configurado el archivo de esa forma, lo guardamos y salimos. En mi caso :wq y para los que usan nano creo que era ctrl+o y ctrl+x

Ahora toca modificar el archivo '/etc/default/isc-dhcp-server' (realizamos backup)
$> sudo vi /etc/default/isc-dhcp-server

Buscamos la línea:
INTERFACES=""

Incluimos nuestra interfaz de red wi-fi, en mi caso la wlan0 entre las comillas:
INTERFACES="wlan0"

Con esto indicamos que las peticiones del servicio dhcpd se gestionarán por esta interfaz.

Ahora tenemos nuestro servidor DHCP configurado, pero no hemos terminado, aún tenemos que modificar la IP de la interfaz wlan0 e indicarle una IP estática puesto que la hemos configurado como puerta de enlace y receptor de las peticiones, en definitiva, es la interfaz a la que nos conectaremos.

Desactivamos la interfaz que vamos a modificar:
$> sudo ifdown wlan0

Vamos al archivo '/etc/network/interfaces' y lo modificamos (realizamos backup):
$> sudo vi /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 '#' estas tres líneas:
#iface wlan0 inet manual #wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf #iface default inet dhcp

Una vez configurado, lo guardamos y salimos, y volvemos activar la interfaz de red pero con la nueva IP que le hemos puesto:
$> sudo ifconfig wlan0 192.168.10.1

Con esto hermos terminado con el DHCP, ahora toca el siguiente.

HOSTAPD

Le toca el turno al AP (Access Point, iros acostumbrando a las siglas porque se utilizan mucho). Crearemos el archivo de configuración nosotros:
$> sudo /etc/hostapd/hostapd.conf

Una vez dentro añadimos las siguientes líneas al fichero, mucho ojo de no dejar ningún salto de línea o espacio al final de cada parámetro, podría dar fallo:
interface=wlan0 driver=rtl871xdrv ssid=WIFI_DESTAPEMAN hw_mode=g channel=6 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=El_Puto_Nodo313 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP

Menciones especiales:
- driver: el que he puesto es el de por defecto, y es el que necesito yo y cualquiera que realice esto en su raspberry, pero si utilizáis un dongle como antena para emitir la señal, tendréis que poner el driver de vuestra dongle.
- ssid: es el nombre con el que se va a ver la red, podéis poner AP_RASPBERRY, WIFI_RASPBERRY, ME_CAGO_EN_MIS_VECINOS....el que queráis, a gusto de consumidor.
- wpa_passphrase: aquí irá la contraseña, podéis no ponerla, lo mismo que lo anterior, a gusto del consumidor.

Ahora que tenemos nuestro fichero de configuración creado necesitamos indicar a la raspberry donde tiene que llamarlo. Para ello hay que modificar el archivo '/etc/default/hostapd' (realizar backup):
$> sudo vi /etc/default/hostapd

Una vez dentro buscamos la línea '#DAEMON_CONF' , la modificamos incluyendo de nuestro archivo de configuración y descomentamos la línea; debería de quedar así:
DAEMON_CONF="/etc/hostapd/hostapd.conf"

Ya tenemos el AP creado, pero queda un paso más para ponerlo en marcha, hay que realizar un NAT.

NAT

Para quien no lo sepa, a groso modo, NAT son las sigla de Network Address Translation. La idea es sencilla, hacer que redes de ordenadores utilicen un rango de direcciones especiales (IPs privadas) y se conecten a Internet usando una única dirección IP (IP pública). Lo hace el router de nuestra casa, es algo básico de redes. En nuestro caso para salir a internet sería raspberry>router>ISP, habría dos saltos. Se harían dos NAT, uno de IP privada a IP Privada, la de la red de nuestra raspberry y la del router de donde nos conectemos, y otra entre la red del router y el ISP (Provedor de Servicios de Internet). Lo mismo que con el DHCP, si queréis mas información sobre NAT, mirad el man o pedírmelo por comentarios.

Lo primero necesitamos modificar el siguiente archivo de configuración (realizad backup):
$> sudo vi /etc/sysctl.conf

Buscamos la línea #net.ipv4.ip_forward=1 y la descomentamos:
net.ipv4.ip_forward=1

Binario básico, 1 activo y 0 desactivado. 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"

Por último configuramos las iptables para dirigir el tráfico a través de las interfaces y que todo fluya:
$> 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

Vale, cosa importante, eth0 es el nombre de la interfaz física, puede que a vosotros no os salga así nombrada, puede que os salga algo así como enp0s3 o algo por el estilo, simplemente es modificarlo. La wlan0 si que entiendo que al menos habéis hecho lo que teníais que hacer y la habéis llamado así.
En mi caso yo le he metido un dongle y así poder conectar de WI-FI a WI-FI, es lo mismo, pero con interfaces inalámbricas, es un dato para que sepáis que también se puede hacer así.
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 vi /etc/network/interfaces

Al final del todo, hay que añadir la línea siguiente:
up iptables-restore < /etc/iptables.ipv4.nat

Ahora que tenemos todo configurado y hemos llegado a este punto, solo queda iniciar los demonios y ver si funciona:
$> sudo service hostapd start $> sudo service isc-dhcp-server start

Y para habilitar los demonios:
$> sudo update-rc.d hostapd enable $> sudo update-rc.d isc-dhcp-server enable

Parece que si me da la opción a conectarme:
1243


No me voy a desconectar porque estoy con otros asuntos, pero funciona.
Bueno, es largo pero entretenido, no está mal para pasar la tarde, o en mi caso la noche 😂😂😂😂

Ya con esta base podéis dejar volar la imaginación y hacer cosas muy chulas, yo cuando estudie FP Medio me hice una de estas y le añadí el TOR para conectarse a la deepweb y poder navegar de forma anónima. Hay varios proyectos que parten de esta misma base, podéis haceros un FW con iptables, si le añadís un squid y configuráis un proxy transparente podéis fichar donde se conectan por http y https los usuarios de la red, y con un SSL strip romper las cadenas de cifrado y ver credenciales....¡no se experimentad coño, que mas ideas se os ocurren joder! Si falta algo decídmelo por comentarios, o tenéis problemas....lo que sea.

Viva el puto NODO313
 

cbrn

dev & social media manager
Noderador
Nodero
Noder
23 Dic 2018
952
563
ostia no había visto esta joya de tutorial

nice brother, bien explicado paso a paso y definiciones en cada punto etc, muy buena tío
 
  • Like
Reacciones : Crowned y destapeman

destapeman

FUCK PUSSYS, YES BADASS
Miembro del equipo
Paladín de Nodo
Jinete de Nodo
Burgués de Nodo
Moderador
Noderador
Nodero
Noder
11 Ene 2019
3.128
4.425
ostia no había visto esta joya de tutorial

nice brother, bien explicado paso a paso y definiciones en cada punto etc, muy buena tío
Gracias tronco
 

KTaneR

Activo muy miembro
Burgués de Nodo
Noderador
Nodero
Noder
25 Oct 2019
1.355
1.786
Putisimo genio, vaya currazo. La verdad que recomiendo meterle mano a las raspberrys, si tienes algo de imaginacion tienen infinidas de usos.
 
  • Like
Reacciones : destapeman

destapeman

FUCK PUSSYS, YES BADASS
Miembro del equipo
Paladín de Nodo
Jinete de Nodo
Burgués de Nodo
Moderador
Noderador
Nodero
Noder
11 Ene 2019
3.128
4.425
Putisimo genio, vaya currazo. La verdad que recomiendo meterle mano a las raspberrys, si tienes algo de imaginacion tienen infinidas de usos.
eso es, al final es un PC como otro cualquiera, pero baratísimo, ocupa poco espacio, y para trastear están dpm.

muy recomendado para la gente que empieza a dar sus primeros pasos en la informática para ver como se comporta una máquina en un ambiente real y no de laboratorio virtualizado.
 
  • Like
Reacciones : KTaneR

Sadsuke

Respetador de respetadores
Noderador
Nodero
Noder
26 Dic 2018
724
780
que guapo

Putisimo genio, vaya currazo. La verdad que recomiendo meterle mano a las raspberrys, si tienes algo de imaginacion tienen infinidas de usos.

yo me quede flipado con un pavo que cada vez que daba un puñetazo ssalia fuego de un lanzallamas por la programacion de su raspberry

 
  • Haha
Reacciones : KTaneR y destapeman
Arriba Pie