====== 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
Hay hay que devolver el hash 256 del hid concatenado con el faskey como variable tok:
http://192.168.220.1:2050/nodogsplash_auth/?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**
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