====== 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