User Tools

Site Tools


guifi.net:hotspot

This is an old revision of the document!


Bullet M2

No se le puede poner openwrt, la dejamos como bridge y delegamos en una raspberry

Hotspot con wifi Raspberry

Fuente: https://pimylifeup.com/raspberry-pi-captive-portal/

Hotspot con el wifi de Raspberry haciendo de AP y conectada por cable a internet

Configuración básica raspberry

Imagen: 2020-02-13-raspbian-buster-lite.img

sudo dd if=2020-02-13-raspbian-buster-lite.img of=/dev/mmcblk0

Tarda 12 minutos con dell latitude E5470 y 5 minutos con dell latitude 5400:

3612672+0 records in
3612672+0 records out
1849688064 bytes (1.8 GB, 1.7 GiB) copied, 760.353 s, 2.4 MB/s

Modificamos la tarjeta para poder acceder sin monitor:

Ponemos IP fija cambiando el fichero /etc/dhcpcd.conf añadiendo al final:

interface eth0
static ip_address=192.168.1.13/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

Habilitamos ssh dejando un fichero en la partición boot que se llame ssh (da igual el contenido o si está vacio)

Ya podemos acceder por ssh

Login: pi
Password: raspberry

Si queremos cambiar el teclado a español:

sudo raspi-config
4 Localisation Options Set up language and regional settings to match your location
I3 Change Keyboard Layout Set the keyboard layout to match your keyboard

Keyboard model:
Generic 105-key PC (intl.)
Keyboard layout:
Other
Country of origin for the keyboard:
Spanish
Ahora ya nos aparece una lista de todos los teclados Spanish. Cogemos el primero por ejemplo.
Keyboard layout:
Spanish
Key to function as AltGr:
The default for the keyboard layout
Compose key:
No compose key

Actualizamos paquetes:

sudo apt-get update
sudo apt-get upgrade

Instalamos vim

sudo apt-get install -y vim

Configuramos vim, añadimos a los ficheros:

echo "set mouse-=a" > /home/pi/.vimrc
sudo su -c "echo 'set mouse-=a' > /root/.vimrc"

Configuración tunel entre wifi y cable

Si queremos poner ip fija a eth0:

sudo vim /etc/dhcpcd.conf

Y al final del fichero añadimos:

interface eth0
static ip_address=192.168.1.13/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1 8.8.8.8

Para configurar el wifi primero tenemos que poner el pais.
Si nos fijamos, al arrancar la raspberry sale el mensaje:

Wi-Fi is currently blocked by rfkill.
Use raspi-config to set the country before use.

Al hacer un iwconfig no aparece Tx-Power

wlan0     IEEE 802.11  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on

Habilitamos country en wifi

sudo raspi-config
4 Localisation Options Set up language and regional settings to match your location
I4 Change Wi-fi Country   Set the legal channels used in your country
ES Spain

Ahora al hacer iwconfig si vemos Tx-Power

iwconfig
wlan0     IEEE 802.11  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=31 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on

Ahora configuramos el wifi de la raspberry como access point:

sudo apt-get install -y hostapd dnsmasq
sudo systemctl stop hostapd
sudo systemctl stop dnsmasq

Añadimos al final de la configuración de DHCP:

sudo vim /etc/dhcpcd.conf
interface wlan0
    static ip_address=192.168.220.1/24

Reiniciamos dhcp:

sudo systemctl restart dhcpcd
sudo vim /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211

hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=0
macaddr_acl=0
ignore_broadcast_ssid=0

auth_algs=1
wpa=0

# This is the name of the network
ssid=raspberry

Modificamos estos 2 ficheros:

sudo vim /etc/default/hostapd

Cambiamos esta línea:

#DAEMON_CONF="" 

Por:

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

Y este otro que en mi caso ya estaba cambiado:

sudo vim /etc/init.d/hostapd

Cambiamos esta línea:

DAEMON_CONF= 

Por esta:

DAEMON_CONF=/etc/hostapd/hostapd.conf

Ahora configuramos DHCP:

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
sudo vim /etc/dnsmasq.conf
interface=wlan0       # Use interface wlan0  
server=1.1.1.1       # Use Cloudflare DNS  
dhcp-range=192.168.220.50,192.168.220.150,12h # IP range and lease time  

Ahora enrutamos el tráfico de wifi a cable, es decir, de wlan0 a eth0

sudo vim /etc/sysctl.conf

Descomentamos:

net.ipv4.ip_forward=1

Añadimos IPTABLES:

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Lo grabamos:

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

Para hacer persistente en los reinicios:

sudo vim /etc/rc.local

Añadimos encima de la línea exit 0:

iptables-restore < /etc/iptables.ipv4.nat

Grabamos los servicios:

sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
sudo service dnsmasq start

Si miramos wlan0 vemos que ahora está como Mode:Master

iwconfig
wlan0     IEEE 802.11  Mode:Master  Tx-Power=31 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on

Reiniciamos

sudo reboot

Ya nos podemos conectar al wifi de la raspberry y salir por internet

Configuración Hotspot

Instalamos paquetes necesarios para portal captivo:

sudo apt install -y git libmicrohttpd-dev

Clonamos el repo de nodogsplash

git clone https://github.com/nodogsplash/nodogsplash.git

Compilamos:

cd nodogsplash
make
sudo make install

Modificamos estos parámetros de la configuración:

sudo vim /etc/nodogsplash/nodogsplash.conf
GatewayInterface wlan0
GatewayAddress 192.168.220.1
MaxClients 250
AuthIdleTimeout 480

Arrancamos el software:

sudo nodogsplash

Nos dará este error:

libmicrohttpd is out of date, please upgrade to version 0.9.69 or higher

Eso es porque raspbian no está actualizada, podemos forzar a que el hotspot no valide versiones antiguas o compilar a mano la versión que toca:

Saltar versiones antiguas:

sudo vim /etc/nodogsplash/nodogsplash.conf
use_outdated_mhd 1

Compilar nueva versión:
Hay que compilar y despues desinstalar los antiguos:

Descargamos nueva versión y compilamos:

cd ~
wget ftp://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.70.tar.gz
tar zxvf libmicrohttpd-0.9.70.tar.gz
mv libmicrohttpd-0.9.70 libmicrohttpd
cd libmicrohttpd
sudo ./configure
sudo make
sudo make install

Desinstalamos la versión antigua:

sudo apt-get remove -y libmicrohttpd12 libmicrohttpd-dev

Para que arranque en el principio, modificamos el fichero

sudo vim /etc/rc.local

Y añadimos encima de exit 0 la línea:

nodogsplash

Configuración nodogsplash

Fichero web entrada:

/etc/nodogsplash/htdocs/splash.html

https://nodogsplashdocs.readthedocs.io/en/stable/ndsctl.html

Radius

Con docker, quitar ipv6 de:

/etc/freeradius/3.0/sites-enabled/default

Se crea un usuario de prueba en el fichero users que es un enlaces simbólico a authorize:

/etc/freeradius/3.0/users
/etc/freeradius/3.0/mods-config/files/authorize
bob     Cleartext-Password := "hello"
        Reply-Message := "Hello, %{User-Name}"

Para poder hacer consulta que no sea desde localhost:

/etc/freeradius/3.0/clients.conf
client private-network-1 {
        ipaddr          = 192.168.1.0/24
        secret          = probando
}

Hacemos la consulta:

radtest bob hello 192.168.1.13 0 probando

openwrt

/etc/config/nodogsplash
option gatewayinterface 'br-wan'

FAS

Delega la autenticación en una web externa.

Hay varios campos a configurar:

fas_secure_enabled
fasremotefqdn
fasremoteip
faspath
fasport
faskey

Hay 4 tipos de login:

fas_secure_enabled 0

Petición:

http://portalcaptiu.lobo99.info/login1.html?authaction=http://192.168.220.1:2050/nodogsplash_auth/?clientip=192.168.220.68&gatewayname=NoDogSplash&tok=fe4a245b&redir=http%3a%2f%2fwiki.legido.com%2f

Si vamos a la url que le pasa por GET como variable authaction estamos logados, es decir:

http://192.168.220.1:2050/nodogsplash_auth/?clientip=192.168.220.68&gatewayname=NoDogSplash&tok=fe4a245b&redir=http%3a%2f%2fwiki.legido.com%2f

fas_secure_enabled 1 y faskey no activado

Se envía la petición sin el token y FAS tiene que pedirlo a nodogsplah

Petición:

http://portalcaptiu.lobo99.info/login2.php?clientip=192.168.220.68&gatewayname=NoDogSplash&redir=http%3a%2f%2fdetectportal.firefox.com%2fsuccess.txt

fas_secure_enabled 1 y faskey activado

Envia el token en la variable hid. Si el login es correcto, tiene que devolver la petición concatenando hid con el faskey

Petición:

http://portalcaptiu.lobo99.info/login1.html?clientip=192.168.220.68&gatewayname=NoDogSplash&hid=567c8ad9a0da6759af0c256d75f3031690d78768a370458105ba10bd809b0fd8&gatewayaddress=192.168.220.1:2050&redir=http%3a%2f%2fdetectportal.firefox.com%2fsuccess.txt

Según la documentación hay que devolver el hash 256 del hid concatenado con el faskey como variable tok, pero poniendo cualquiera funciona, es decir:

http://192.168.220.1:2050/?tok=f140c19ec970fd853abc54db46d7bb7152e16c6571f5349a9c0ee8c3bde46872&redir=http%3a%2f%2fwiki.legido.com%2f

fas_secure_enabled 3

Conecta por https.

Nodogsplash:

fas_secure_enabled 3
fasremotefqdn portalcaptiu.lobo99.info
fasremoteip 37.132.244.99
faspath /login3.php
fasport 443
faskey 1234567890

login3.php

<?php
$key="1234567890";
$string=$_GET['fas'];
$iv=$_GET['iv'];
$cipher="AES-256-CBC";
$decrypted=openssl_decrypt( base64_decode( $string ), $cipher, $key, 0, $iv );

echo $decrypted;
?>

Al conectar al hotspor redirige la petición por https a:

https://portalcaptiu.lobo99.info/index1.php?fas=UElmM3o1a2ljbEQrQlU1L3dOa2RxbXV0RVYxbFF6dDlQM0xuR0pmNXVzZlE3NWVYMUZ6c3NYaUFOMDlmcG9tM3V6S1dtOTBhTTk5L09jRW1PUTNjUFZ4Y2hETG9BN1hBRjA1Z1ZvRmUxRXIzWExBeWhlTG83WVJHalV6blhlaUh0TXYvb0J5R2hYckFWTmNBajBadVo5MjJzT24zcHdpV3FyaXdQdG00R25GZDhhU2RVNEtHNlR4d3pkTnBxTzVuRUJaRjA5amhiMm1zaTdRaXZ3bS9INjVJOFQvUXZmYmlOUDRQSVRqYks5bXltWFdUeUNoNGZ4cjFMeW1ValhZSDJNbHpSRFgxQVZnK05JMytBQzN3bStXRjhNbkhHTUdWQUFkMm9HTDFVQzY2ZWczQmdQRFlha3l3Uy9lU00yRnY=&iv=c8887a287b60c864

Envía por get la variable fas con el contenido encriptado con la shred-key que tenemos configurado en faskey y la variable iv que es una semilla.

Podemos desencriptar el contenido con el comando de php:

openssl_decrypt( base64_decode( $string ), $cipher, $key, 0, $iv );

En este caso el resultado es:

clientip=192.168.220.51, clientmac=30:07:4d:d6:31:f6, gatewayname=NoDogSplash, tok=2861af5d, gatewayaddress=192.168.220.1:2050, authdir=nodogsplash_auth, originurl=http%3a%2f%2fconnectivitycheck.gstatic.com%2fgenerate_204
guifi.net/hotspot.1588517497.txt.gz · Last modified: 2020/05/03 14:51 by jose