Wifi in Hotel : howto tecnico

Come promesso un paio di settimane fa , ho pronto l’howto secco e come al solito step by step per approntare un sistema di hotspot fai da te per un albergo , una struttura comunitaria , un centro uffici e chi più ne ha più ne metta.

Come al solito è un pippone tecnico , quindi consiglio la lettura solo a chi è veramente interessato

Per una migliore visualizzazione clicca sulla foto

Requisiti :

  1. una macchina 386 in disuso
  2. tre schede di rete
  3. due switch da n porte per quanti client e quanti access point intendete collegare
  4. n access point a seconda dell’area da coprire
  5. matassa di cavo di rete cat5 per cablare dallo switch fino agli access point
  6. eventuali moduli POE (non trattati in questo howto)

Per prima cosa procuriamoci il computer che trasformeremo in router , firewall , server radius/mysql e gestore dei vouchers prepagati.

Procuriamoci un disco di installazione di ubuntu server . Questo howto è stato compilato prendendo in esame la 8.10 , ma credo che non ci siano particolari differenze se usiamo l’ultima 9.04.

Installiamo ubuntu server , scegliendo la configurazione LAMP in modo da avere al termine , già funzionanti il server web Apache , mysql e PHP5. E’ buona pratica scegliere anche il demone ssh per poter amministrare l’installazione tramite un client di rete. Per installare ssh
sudo aptitude install ssh

Preparativi post installazione:

Appena terminata l’installazione occupiamoci delle interfacce di rete che andremo a configurare come segue :

eth0 => WAN
eth1 => rete locale
eth2 => hotspot

Ecco il file /etc/network/interfaces

[sourcecode language=’cpp’]
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1

auto eth1
iface eth1 inet static
address 192.168.0.1
netmask 255.255.255.0
broadcast 192.168.0.255
network 192.168.0.0
[/sourcecode]

Abbiamo bisogno di un server dhcp dal momento che scollegando il router internet dalla lan i client si ritrovano privi di indirizzo IP .

Installiamo l’helper dns e server dhcp dnsmasq con
sudo aptitude install dnsmasq
ed editiamo il file di configurazione /etc/dnsmasq.conf come segue :

[sourcecode language=’cpp’]
server=208.67.222.222 #aggiungere questa riga che indica il server dns esterno a cui appoggiarsi
dhcp-range=eth1,192.168.0.50,192.168.0.150,12h
[/sourcecode]

Editiamo il file /etc/resolv.conf

[sourcecode language=’cpp’]
nameserver 127.0.0.1
[/sourcecode]

Facciamo ripartire dnsmasq con
sudo /etc/init.d/dnsmasq restart

e proviamo a pingare un host esterno ( google?) e diamo temporaneamente accesso ad internet alla rete locale con
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

A questo punto facciamo partire il demone ssh con
sudo /etc/init.d/ssh restart
Colleghiamo lo switch1 alla nostra rete locale e all’interfaccia eth1 e dovremo essere in grado sia di uscire su internet che di collegarci in ssh all’host 192.168.0.1.

Se qualcosa andasse storto fate ripartire tutti i demoni sopra menzionati
sudo /etc/init.d/networking restart
sudo /etc/init.d/dnsmasq restart
sudo /etc/init.d/ssh restart

e poi da ultimo
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Configurazione Apache:

Spostiamoci ora su un host della rete locale con ip 192.168.0.0/24 e colleghiamoci via ssh all’indirizzo 192.168.0.1 per una migliore gestione del nostro router .

Per prima cosa verifichiamo che Apache ci risponda sulla porta 80 , facendo puntare il nostro browser di fiducia all’indirizzo http://192.168.0.1 .

Per il nostro setup però , avremo bisogno di attivare ssl in Apache.

Entriamo nella directory /etc/apache2/mods-available e verifichiamo l’esistenza di ssl con
sudo ls | grep ssl
Se tutto è a posto dovremmo avere ssl.conf e ssl.load come risposta al comando precedente.

Attiviamo i moduli ssl con
sudo a2enmod ssl
sudo /etc/init.d/apache2 force-reload

Generiamo certificati e chiavi per il server Apache.

[sourcecode language=’cpp’]
cd /etc/apache2
sudo openssl genrsa -des3 -out server.key 1024
sudo openssl req -new -key server.key -out server.csr[/sourcecode]

Ci verranno richieste la nostra località di lavoro , una challenge password etc etc. Completiamo  e rispondiamo ai form nella maniera che riteniamo più opportuna.

Per finire generiamo ed installiamo il certificato vero e proprio

[sourcecode language=’cpp’]
sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private[/sourcecode]

Ricordiamo la password che abbiamo inserito quando abbiamo generato la chiave , ci verrà richiesta per firmare il certificato e al primo riavvio di Apache.

A questo punto dobbiamo completare la configurazione in /etc/apache2/sites-available.

Con il nostro editor di testo preferito diamo un’occhiata al file default-ssl che dovrebbe essere già completamente configurato. Accertimoci che queste voci siano decommentate.

[sourcecode language=’cpp’]
sudo nano default-ssl
SSLEngine on
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SLCertificateFile    /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key[/sourcecode]

A questo punto ci basta solo attivare il default SSL site con
sudo a2ensite default-ssl
e far ripartire Apache con
sudo /etc/init.d/apace2 force-reload

Verifichiamo il corretto funzionamento , facendo puntare il nostro browser a https://192.168.0.1.

Il browser ci avviserà che il sito non è attendibile , ma forzando l’acquisizione del certificato aggireremo il problema e ai prossimi collegamenti non verremo più disturbati da questi avvisi.

Per fare in modo che lo script di init di Apache non ci richieda sempre la password del certificato dobbiamo rimuovere la crittatura della chiave RSA.

Posizioniamoci in /etc/ssl/private e diamo

[sourcecode language=’cpp’]
sudo mv server.key server.key.temp
openssl rsa -in server.key.temp -out server.key[/sourcecode]

Installazione Freeradius, i preliminari:

Sfortunatamente il nostro sistema di hotspot a voucher non funziona con freeradius 2.x , o meglio , il gestore degli accessi a tempo phpmyprepaid non ha ancora rilasciato la versione per le nuove tabelle di freeradius 2.x.

Le moderne Ubuntu dalla 8.10 in poi hanno adottato giustamente la nuova versione di freeradius quindi non potremo installare il demone semplicemente con
sudo aptitude install freeradius

Niente paura , preleviamo i sorgenti di freeradius e compiliamoli.

Per prima cosa scarichiamo la distribuzione sorgente all’indirizzo ftp://ftp.freeradius.org/pub/radius/freeradius-1.1.7.tar.gz ( ho anche approntato un mirror nel caso remoto freeradius decidesse di non rendere più disponibile la versione 1.1.7 in quanto non più mantenuta)

Otteniamo i privilegi di superutente con sudo su , posizioniamoci nella nostra directory root con cd e poi diamo
wget ftp://ftp.freeradius.org/pub/radius/freeradius-1.1.7.tar.gz

Esplodiamo l’archivio con
tar zxvf freeradius-1.1.7.tar.gz

A questo punto dobbiamo compilare i sorgenti a la debian way ecco i passi :

[sourcecode language=’cpp’]
aptitude install debhelper dpatch autotools-dev libtool libltdl3-dev libpam0g-dev libgdbm-dev libldap2-dev libsasl2-dev libiodbc2-dev libkrb5-dev libperl-dev snmp libsnmp9-dev libsnmp5-dev libsnmp4.2-dev libpq-dev postgresql-dev libssl-dev

aptitude install build-essential linux-headers

cd /root/freeradius-1.1.7

dpkg-buildpackage -rfakeroot[/sourcecode]

Questo processo creerà i pacchetti .deb di cui avremo bisogno per installare freeradius 1.1.7 nel nostro server.

Al termine di dpkg-buildpackage , troveremo in /root i seguenti pacchetti .deb : freeradius_1.1.7-0_i386.deb
freeradius-dialupadmin_1.1.7-0_all.deb
freeradius-iodbc_1.1.7-0_i386.deb
freeradius-krb5_1.1.7-0_i386.deb
freeradius-ldap_1.1.7-0_i386.deb
freeradius-mysql_1.1.7-0_i386.deb
freeradius-postgresql_1.1.7-0_i386.deb

Troppa grazia Sant’Antonio ! A noi servono solo i pacchetti freeradius_1.1.7-0_i386.deb e freeradius-mysql_1.1.7-0_i386.deb.

Installiamoli con
dpkg -i freeradius_1.1.7-0_i386.deb

dpkg -i freeradius-mysql_1.1.7-0_i386.deb

Avremmo finito con l’installazione preliminare di freeradius , lo riprenderemo in mano più tardi , una volta installato coova-chilli e phpmyprepaid e sistemato i parametri di mysql.

Per evitare che un aggiornamento di Ubuntu ci rimpiazzi la versione 1.1.7 di freeradius dobbiamo bloccare la versione del pacchetto in apt .

Andiamo in /etc/apt e creiamo un file di testo chiamato preferences e copiamo questo contenuto :

[sourcecode language=’cpp’]
Package: freeradius
Pin:version 1.1.7-0
Pin-Priority: 1001

Package: freeradius-mysql
Pin:version 1.1.7-0
Pin-Priority: 1001[/sourcecode]

In questo modo saremo sicuri che anche se aggiorneremo il nostro server non avremo problemi di rimpiazzamento di freeradius in versione 2.x 🙂

Coova-chilli:

Siamo giunti all’installazione di coova-chilli . Questo demone ci fornirà il captive portal , una pagina web che ci permetterà di inserire le nostre credenziali per il login e autenticarci presso freeradius e in buona sostanza fornirci l’accesso ad internet.

Sempre come superutenti posizioniamoci nella directory /root e scarichiamo il pacchetto precompilato per debian
wget http://ap.coova.org/chilli/coova-chilli_1.0.13-1_i386.deb
dpkg -i coova-chilli_1.0.13-1_i386.deb

In questo modo abbiamo immediatamente il demone chillispot per l’autentifica pronto per essere lanciato con il comando
/etc/init.d/chilli start

Facciamo il tuning del sistema . Posizioniamoci in /etc ed rinominiamo il file di configurazione chilli.conf  in chilli.conf.orig. Sostituiamo completamente il contenuto del file di configurazione originale con il seguente contenuto:

[sourcecode language=’cpp’]
dns1 192.168.182.1
domain mydomain
dhcpif eth2
radiusserver1 127.0.0.1
radiusserver2 127.0.0.1
radiussecret myradiussecret #vedremo più tardi dove inserire la passwdord di radius
uamallowed www.google.com,gmail.com,mail.google.com,1.gravatar.com,s3.wordpress.com,demablog.wordpress.com,192.168.182.1
uamserver https://192.168.182.1/cgi-bin/hotspotlogin.cgi
uamsecret demahotspot[/sourcecode]

Per ultima cosa scarichiamo lo script cgi che ci permetterà il login tramite pagina web

[sourcecode language=’cpp’]
cd /usr/lib/cgi-bin
wget http://files.demaitalia.com/radius/hotspotlogin.cgi
chmod +x hotspotlogin.cgi[/sourcecode]

Chilli è a posto ora , lasciamolo da una parte per ora ed andiamo ad interessarci di phpmyprepaid

Phpmyprepaid:

Dobbiamo installare uno script php per la gestione delle login del nostro captive portal. Mica vorremo riempire le tabelle di mysql a mano !!!

Procuriamoci l’ultima versione di phpmyprepaid .

Ecco lo step by step

[sourcecode language=’cpp’]
sudo su
password:
cd
wget http://dfn.dl.sourceforge.net/sourceforge/phpmyprepaid/phpmyprepaidRC3.tgz
tar xvf phpmyprepaidRC3.tgz
cp phpmyprepaid /var/www/prepaid
chown -R www-data:www-data /var/www/prepaid
[/sourcecode]

A questo punto colleghiamoci con il browser all’indirizzo http://192.168.0.1

Seguiamo passo passo questi screenshots:

Ora giusto un paio di chiarimenti . Nelle schermate qui sopra non ci sono bisogno di spiegazioni . Gli unici campi che possono generare confusione sono :

  1. schermata 3  php memory limit:
    Ci si puo’ presentare un errore (scritta in rosso) dicendo che abbiamo settato il limite di memoria nei nostri settaggi di PHP. Per correggere editiamo il file /etc/php5/apache2/php.ini , cerchiamo il parametro memory_limit e portiamolo a 16M (memory_limit = 16M)
  2. schermata 5 parametri radius:
    Controlliamo per bene i path che ci vengono proposti di default e cambiamoli se necessario. Una nota speciale per Freeradius secret. Finora non abbiamo toccato nessun file di configurazione di /etc/freeradius e la secret di default di freeradius è testing123. E’ una buona idea cambiarla in /etc/freeradius/clients.conf (lo vedremo anche più tardi)
  3. schermata 6 User interface administration:
    Inseriamo i valori che desideriamo per l’accesso dell’amministratore dell’interfaccia di phpmyprepaid.
  4. schermata 7 database configuration:
    Quando abbiamo installato Ubuntu Server ed abbiamo scelto la configurazione LAMP ad un certo punto ci è stata richiesta una password di amministratore per il database mysql ricordate ? Ebbene quella è la password da inserire nei campi di questa schermata.
    Nel caso non vi ricordiate più la password inserita
    sudo dpkg-reconfigure mysql-server-5.0

una volta installato e settato il tutto facciamo pulizia con
sudo rm -R /var/www/prepaid/www/install

Possiamo già creare i nostri coupons e stamparli . Questo è il risultato

Verifichiamo che le tabelle del database vengano create correttamente

[sourcecode language=’cpp’]
mysql -uroot -p phpmyprepaid
Enter password:
mysql>select * from radcheck;
+—-+———-+——————-+—-+———————————————+
| id | UserName | Attribute         | op | Value                                       |
+—-+———-+——————-+—-+———————————————+
|  1 | lztudl   | User-Password     | := | wmf                                         |
|  2 | lztudl   | Max-All-Session   | := | 86400                                       |
|  3 | lztudl   | WISPr-Location-ID | := | isocc=IT,cc=39,ac=,network=chiavari/myhotel |
|  4 | lztudl   | Expiration        | := | 5 May 2009 18:11:45                         |
+—-+———-+——————-+—-+———————————————+
4 rows in set (0.00 sec)[/sourcecode]

Evviva , ci siamo quasi 🙂

Configurazione Freeradius:

I file di configurazione della distribuzione di freeradius sfortunatamente non sono così semplici da configurare . Potrei dirvi di cambiare questo e quel  parametro in authorize , instantiate e così via.

Ho preferito rendere disponibili i file di configurazione già pronti , in modo che li possiate scaricare e mettere direttamente nella vostra /etc/freeradius.

[sourcecode language=’cpp’]

cd /etc/freeradius
wget http://files.demaitalia.com/radius/sql.conf
wget http://files.demaitalia.com/radius/radiusd.conf
[/sourcecode]

Editiamo il file /etc/freeradius/clients.conf e cambiamo la default secrect testing123 in una password che andremo ad inserire anche nel valore radiussecret del file chilli.conf

Editiamo il file sql.conf appena scaricato e cambiamo le credenziali di accesso al database

[sourcecode language=’cpp’]
sql {
# Database type
# Current supported are: rlm_sql_mysql, rlm_sql_postgresql,
# rlm_sql_iodbc, rlm_sql_oracle, rlm_sql_unixodbc, rlm_sql_freetds
driver = “rlm_sql_mysql”

# Connect info
server = “localhost”
login = root
password = MYPASS

# Database table configuration
radius_db = phpmyprepaid[/sourcecode]

Ultimo tocco editare il file /etc/freeradius/dictionary e inserire la seguente linea
ATTRIBUTE       Max-All-Session                         3000    integer

Firewalling:

Il fido shorewall si prenderà cura del firewalling .

[sourcecode language=’cpp’]
sudo aptitude install shorewall
sudo cp /usr/share/doc/shorewall-common/examples/three-interfaces/* /etc/shorewall
sudo cd /etc/shorewall[/sourcecode]

Editiamo i seguenti files :

  1. /etc/shorewall/interfaces [sourcecode language=’cpp’]
    ###############################################################################
    #ZONE   INTERFACE       BROADCAST       OPTIONS
    net     eth0            detect          dhcp,tcpflags,routefilter,nosmurfs,logmartians
    hot     tun0            detect          dhcp
    loc     eth1            detect          dhcp
    #LAST LINE — ADD YOUR ENTRIES BEFORE THIS ONE — DO NOT REMOVE[/sourcecode]
  2. /etc/shorewall/masq [sourcecode language=’cpp’]
    ###############################################################################
    #INTERFACE              SOURCE          ADDRESS         PROTO   PORT(S) IPSEC   MARK
    eth0                    tun0
    eth0                    eth1
    #LAST LINE — ADD YOUR ENTRIES ABOVE THIS LINE — DO NOT REMOVE[/sourcecode]
  3. /etc/shorewall/policy [sourcecode language=’cpp’]
    ###############################################################################
    #SOURCE         DEST            POLICY          LOG LEVEL       LIMIT:BURST
    hot             net             ACCEPT
    hot             $FW             ACCEPT
    hot             all             REJECT          info
    loc             net             ACCEPT
    loc             $FW             ACCEPT
    loc             all             REJECT          info
    $FW             net             ACCEPT
    $FW             hot             ACCEPT
    $FW             all             REJECT          info
    $FW             loc             ACCEPT
    net             $FW             ACCEPT
    net             hot             DROP            info
    net             all             DROP            info
    all             all             REJECT          info
    #LAST LINE — ADD YOUR ENTRIES ABOVE THIS LINE — DO NOT REMOVE[/sourcecode]
  4. /etc/shorewall/rules [sourcecode language=’cpp’]
    #############################################################################################################
    #ACTION         SOURCE          DEST            PROTO   DEST    SOURCE          ORIGINAL        RATE            USER/  $
    #                                                       PORT    PORT(S)         DEST            LIMIT           GROUP
    #
    DNS/ACCEPT      $FW             net
    SSH/ACCEPT      loc             $FW
    Ping/ACCEPT     loc             $FW
    Ping/DROP       net             $FW
    ACCEPT          $FW             loc             icmp
    ACCEPT          $FW             net             icmp
    #LAST LINE — ADD YOUR ENTRIES BEFORE THIS ONE — DO NOT REMOVE[/sourcecode]
  5. /etc/shorewall/zones [sourcecode language=’cpp’]
    ###############################################################################
    #ZONE   TYPE    OPTIONS                 IN                      OUT
    #                                       OPTIONS                 OPTIONS
    fw      firewall
    net     ipv4
    hot     ipv4
    loc     ipv4
    #LAST LINE – ADD YOUR ENTRIES ABOVE THIS ONE – DO NOT REMOVE[/sourcecode]
  6. Cambiare il parametro STARTUP_ENABLED=Yes in shorewall.conf
  7. Editare il file /etc/default/shorewall e impostare il parametro startup=1.

Restart di tutti i demoni coinvolti :

/etc/init.d/networking restart
/etc/init.d/dnsmasq restart
/etc/init.d/freeradius restart
/etc/init.d/apache2 force-reload
/etc/init.d/mysql restart
/etc/init.d/chilli stop
/etc/init.d/chilli start
/etc/init.d/shorewall restart

Collegamento Access Point:

A questo punto possiamo collegare tanti access point quante porte abbiamo disponibili nello switch2 .

Controlliamo con un notebook ed un netstumbler le aree di copertura radio e piazziamo gli access point nelle aree più consone per una copertura ottimale.

Possiamo usare qualsiasi access point , io per le prove ho usato dei d-link dwl-g700ap

Conclusioni:

Credo  di essere stato sufficientemente chiaro e lineare in questo howto.  Questa guida è stata compilata in quanto non ho trovato in rete nulla che trattasse il tema di hot spot in maniera passo a passo.

Vi invito a provare sul campo questo setup e di segnalarmi problemi , inesatezze e magari suggerire migliorie e aggiornamenti.

48 thoughts on “Wifi in Hotel : howto tecnico

  1. […] poi realizzato, per vari motivi, ma ci ha pensato il buon Dema. Ecco il suo ottimo “Wifi in Hotel: howto tecnico“! Ti è piaciuto l’articolo, eh? OFFRIMI UNA BIRRA! (è sufficiente essere iscritti a Paypal […]

  2. @hikari
    Grazie del commento Luca.
    I log di inizio e fine sessione vengono conservati in /var/log/radius/radacct/127.0.0.1.
    Si potrebbe senza fatica inserire un transparent proxy e loggare anche il traffico.
    Nello scenario tipico di un albergo basterebbe adattare il sistema informatico di gestione degli ospiti inserendo una tabella per associare login ad affituario della camera.
    E poi speriamo che questa assurda Pisanu venga cancellata al più presto.
    Mica si puo’ continuare a colpi di mille proroghe? 🙂

  3. Veramente ottimo howto, manca solo il sistema di gestione delle identità e dei log.

    Purtroppo per la legge pisanu il tuo sistema è uguale ad un access point lasciato lasciato aperto e attaccato al router.

    Però tecnicamente il sistema di pagamento è ben fatto.

    Presto pubblicherò la mia soluzione al problema delle identità.

  4. Sempre begli articoli Anton, complimenti!

    Ora non ti rimane che completarla con la gestione delle identità e dei log, come indicato da Luca. Forza!

  5. Fantastico, i tuoi how-to sono sempre ben fatti, ma questo arriva proprio come il cacio sui maccheroni, io dovrei agganciarlo ad una base utenti su LDAP anzichè su Radius,
    tu che mi consigli?

  6. @Giorgio
    Ora mi riposo un po’ e poi ci penso 🙂 Grazie del commento
    @Archimedix
    Radius funziona di sicuro anche con LDAP. La chiave sta nell’edit corretto di radiusd.conf. Non l’ho mai provato , ma di sicuro ci butto un occhio appena possibile. Grazie del commento e dei complimenti.

  7. Ciao, davvero un ottimo articolo come al solito, complimenti! Non vorrei sembrare fuori luogo con la domanda, ma mi piacerebbe sapere se esiste un software (e quindi eventualmente qual è) per disegnare diagrammi di rete come quello posto all’inizio dell’articolo. Grazie mille!

  8. @Giuseppe
    I grafici sono generati con l’ottimo Gliffy (http://gliffy.com)
    Ciao e grazie del commento.

  9. IMPORTANTE.
    Su Ubuntu va specificato in /etc/php5/apache2/php.ini il seguente parametro :
    short_open_tag = On
    Altrimenti phpmyprepaid non puo’ funzionare 🙂
    UPDATE:
    Il problema di un php.ini malconfigurato puo’ generare molti malfunzionamenti , incluso il non funzionamento delle classi fpdf per la stampa dei coupons.
    Il php.ini in /etc/php5/apache2/ il 99% delle volte è Ok , basta solo incrementare il valore di memoria da usare.

  10. Come la mettimo con il freeradius obsoleto? Ci sono bug di sicurezza? A questo punto non si potrebbe trovare una soluzione piu’ affidabile, magari gia’ inserita nei repository di ubuntu, al posto di phpmyprepaid?

  11. Te ne do pienamente atto : il flaw è in freeradius non più mantenuto.

    Purtroppo non ho trovato ancora nessuna interfaccia php/mysqsl per
    gestire facilmente i coupons 🙁

  12. Complimenti per l’articolo…
    Una sola cosa: come configurare gli acces point? Dando a ciascuno un ip statico 192.168.182.x?

    Grazie
    Ciao.

  13. Basta attestarli allo switch , prenderanno il loro ip in automatico 🙂

  14. Un how-to veramente grandioso, che ho utilizzato come spunto per integrare l’autenticazione di una rete basata su apparati mesh che integrano chillispot al loro interno…
    Purtroppo ho un errore su freeradius che suppongo sia dovuto ad un problema di compilazione, perchè non trova rlm_sql_mysql.so, e cercando qui e là ho letto che potrebbe trattarsi di un problema di compilazione.
    Installando phpmyprepaid ho visto la possibilità di interfacciarlo con freeradius 2.x, come mai non procedere con questa versione?

  15. Ciao Antonio , riguardo all’errore di compilazione , non ti saprei dire . Puoi provare a compilare freeradius nella maniera tradizionale dando un occhio all’output di ./configure . rlm_sql_mysql.so viene compilato dai sorgenti di freeradius , quindi dai un occhio .

    Per quanto riguarda phpmyprepaid , io ho provato a farlo funzionare con la versione 2.x di freeradius ma non c’è stato verso.

    Grazie dei complimenti e un saluto

  16. incredibile… adesso stavo tentando di risolvere il problema sopra menzionato ed ora non esiste più il componente openssl….. e mai possibile! inizio a rimpiangere il vecchio windows…

  17. ok, ora ci sono. Il server è in piedi, mi autentica e mi reindirizza verso internet…
    Solo che se vado a controllare lo stato d’uso degli account su phpmyprepaid mi rendo conto che qualcosa non sta funzionando, perchè gli utenti sono sempre nella tabella unused, ed anche quando navigo autenticato non risulto nelle sessioni aperte…
    Considerate che il chillispot non è a bordo del server ma direttamente sui router… suppongo sia una consigurazione fra phpmyprepaid e freeradius… idee?

  18. In effetti il mio setup non tiene conto delle statistiche di uso come il tempo , la banda etc etc. Per mia pigrizia una volta riuscito a validare i ticket ed attivato il countdown mi sono fermato nel setup. Puoi spingerti più in profondo dando un’occhiata ai files di configurazione di phpmyprepaid in /var/www/phpmyprepaid/configfiles/radius . Antonio , se vuoi provare mi dai un feedback così integriamo la documentazione ?

    Ciao e grazie.

  19. Gran bel lavoro.. Tuttavia non sono riuscito neanche io a far andare la parte di statistiche… vedo sempre tutte le card com non utilizzate!

  20. Penso di aver trovato la soluzione (dalle prime prove).. il problema è che il freeradius non era configurato per scrivere i dati di accounting in sql. Per fare ciò è sufficiente decommentare la voce “sql” presente nella sezione accounting del file radiusd.conf…

    Spero di essere utile a qualcuno…

    Ciao

  21. statistiche avviate…. occorre modificare il file radiusd abilitando i sql-log… e dopo funge tutto alla grande…
    Invece ho un problema con chillispot che mi rallenta tantissimo il collegamento… Se esco libero, senza captive tutto ok… mentre se esco tramite autenticazione gira malissimo.

  22. dimenticavo, malgrado questa strana lentezza il log di freeradius è pulito da errori ed i file nel radacct sono correttamente creati…
    Non capisco, sembra che chillispo stia facendo una limitazione a pallino, perchè pingando il dns passano sei pacchetti e ne vengono scartati 4 con cadenza praticamente perfetta…
    Per le statistiche pocanzi ho detto una fregnaccia, configurate il file sql.conf così:
    nano -w /etc/freeradius/sql.confsql { driver = “rlm_sql_mysql” server = “localhost” login = “radius” password = “mysqlsecret” radius_db = “radius” […] # Set to ‘yes’ to read radius clients from the database (‘nas’ table) readclient = yes ###change manually}nano -w /etc/freeradius/radiusd.conf $INCLUDE ${confdir}/sql.confauthorize { preprocess chap suffix eap #files sql}authenticate { Auth-Type PAP { pap } Auth-Type CHAP { chap } eap}accounting { detail radutmp sql ###change manually}session { sql ###change manually}

    istruzione originaria presa da:
    http://www.open-mesh.com/activekb/questions/25/Using+your+own+RADIUS+server

    anche se la loro soluzione non funziona manco ad ammazzarla, con queste modifiche andrete a cannone…

  23. niente da fare… ci sto lavorando come un ossesso, ma stranamente chillispot non mi fa lavorare correttamente… denoto anche una certa lentezza dal momento in cui faccio la login a quando effettivamente hotspotlogin.cgi mi conferma l’avvenuta login.
    Se consideriamo che il server e la macchina chillispot sono collegati in lan a cosa è molto strana

  24. 🙁 non saprei come aiutarti , da queste parti tutto normale e veloce

  25. immagino, purtroppo infatti temo che il problema risieda nel fatto che chillispot gira sul’access point gateway della rete, che regolarmente mi interfaccia con apache e con la hotspotlogi.cgi, ma dopo che vengo autenticato incredibilmente la navigazione diventa lenta, per non dire praticamente ferma… mi viene in mente un errore nella limitazione della banda, tipo 1kbps… solo che ricordo di non aver variato alcun parametro e di aver posizionato i vari dictionary in tutte le posizioni corrette. Hai provato ad abilitare le statistiche? PHPmyprepaid è veramente molto potente sotto quel punto di vista, a mio avviso sufficiente per soddisfare il garante privacy… non certo il caro pisanu…

  26. Ciao a tutti,
    ho una configurazione con sei access point (attestati sullo switch con indirizzi del tipo 192.168.182.x e con DHCP diasbilitato). E fin qui tutto ok: ogni PC wireless che si collega ad un access point riceve il suo indirizzo e, previo login, naviga correttamente.
    Ora, avendo la necessita’ di ripetere il segnale di uno degli access point, ho aggiunto un repeater configurandolo per ripetere il segnale dell’acces point interessato (da setup ho specificato che andava ripetuto il segnale della rete che veniva correttamente indivuduata).
    Tuttavia i PC che si agganciano al repeater, vedono la rete ma connettendosi non ricevono alcun indirizzo.
    Qualche suggerimento?
    Grazie.

  27. Eureka! Funziona tutto!
    Su phpmyprepaid tutti i contatori e la pagina statistiche sono perfettamente funzionanti, ed anche l’interfacciamento con la rete mesh è perfetto.
    Ho voluto esagerare customizzando il portale “portal2” integrato in Daloradius e sostituendolo al fin troppo essenziale hotspotlogin.cgi ottenendo un risultato estetico veramente notevole!
    Mi rimane solo un piccolo dubbio che credo abbia crato qualche magagna anche ad altri utenti, ovvero che quanto crei un utente di tipo Subscribers Timers con una billing policy da esempio un ora, occorre inserire anche il time limit perchè la billing policy funziona solo con i Voucher, e nello specifico applica solo i limiti di up/download…
    Fin qui non è un gran problema, ma quando l’utente attiva il proprio account, in automatico il valore dell’expiry date si modifica in ora attuale+1h, quindi facendo scadere prematuramente l’account che magari ha navigato solo 1 minuto.
    Avete qualche suggerimento?
    Presto tenterò di crare una integrazione al già ottimo how-to sopra scritto 🙂

  28. x Mimz

    Controlla i log degli access point e dei repeater, probabilmente la funzione di repeater sta mandando in Broadcast l’SSID corretto ma che di fatto non è collegato alla tua rete principale.

  29. Ottimo howto!
    E una buona base per la creazione dei hotspot. Personalmente sono riuscito creare un mio software di gestione hostspot (senza usare phpmyprepaid) con freeradius2 ma ce solo un problema: Visto che di solito AP sono dei route, una volta autenticato almeno un utente sullo stesso AP, altri utenti possono navigare liberamente perche freeradius vede MAC address del AP e non del singolo client (clienti stanno dietro una rete NAT). Installando un stupidissimo e molto economico AP (non router) funziona a meraviglia. Esiste una possibilita di dire a Radius o chilli di interprettare richieste provenienti da router in modo corretto ?
    Ancora una volta complimenti per HowTo.

  30. A me non funziona, arrivo fino allla instalazione Coova-chilli, cuando lo attivo mi blocca, il dnsmasq, non mi da dhcp.

    PS: Scusate il mio italiano non vivo in italia e non lo scrivo molto.

  31. Aiuto aiuto…
    la procedura di installazione è andata bene…
    quando però inizio la navigazione inizia la redirezione verso il server coova ma non viene aperata la schermata dove eseguire il login…in poche parole mi ridireziona all’indirizzo https://uam_ip/uam/…/…

  32. Ringrazio per l’how-to veramente ben fatto…. volevo chiedere se si potrebbe integrare zeroshell con phpmyprepaid e se si potrebbe creare un discorso con server remoto… e se si potrebbe installare il tutto su un sever remoto…

  33. Ciao, sul discorso di integrare zeroshell ed phpmyprepaid ci avevo già fatto un pensierino… ma purtroppo il radius integrato in zeroshell non consente l’interfacciamento con il captive portal integrato in zeroshell.
    Oltretutto PHP my prepaid non lavora non freeradius 2.0 malgrado nel log di installazione chieda se usare tale versione, e se non ricordo male quando ho fatto l’esperimento notai proprio questo ulteriore problema.
    Zeroshell sta aspettando un modulo di accounting tutto suo, che il buon Fulvio sta ancora sviluppando.
    SAluti

  34. Buon 2010 a tutti, e a tutti mi rivolgo ma in particolare ad Antonde quale vanno i miei complimenti per fattura tecnica dell’articolo.
    Quello che vorrei chiedere a tutti è come posso imparare un pochino di cose come quelle trattate in queste righe,da dove inizio, quali libri o riviste, non posso frequentare corsi, il mio lavoro non me lo permette, sono un tecnico elettronico specializzato in alta frequenza determinato a capire e apprendere un pò di questo Vs mondo, ringrazio veramente tutti.

  35. Ciao a tutti… inutile dire quanto questo how-to mi sia stato utile e di ispirazione diretta per sviluppare la soluzione qui proposta.
    http://www.digitosrl.it/wififacile.html
    Essa è totalmente basata su tecnologie open-source, sia per ciò che concerne i sw installati sul server che per i firmware delle antenne…
    Non voglio fare spam o pubblicità, ma mi metto nei panni di come noi ha tante volte accrocchiato soluzioni di diversi produttori ottenendo un pseudo frankestein che faceva un passo dritto ed uno rovescio… Dopo diversi mesi di sperimentazione e modifiche ai codici abbiamo ottenuto questa soluzione, la quale è in continua evoluzione ed allo stato attuale è quanto di meglio io abbia trovato sul mercato per la gestione ed installazione di reti complesse.
    Saluti a tutti
    Antonio

  36. Inutile dire, Antonio, che il fatto che questo mio post ti sia servito da ispirazione mi riempie di orgoglio.

    Ti saluto e ringrazio.

    Anton

  37. ottima guida, ben fatta e lineare vorrei solo chiedervi se secondo voi è posibile fare un installazione di prova su Virtualbox o altro sistema di virtualizzazione?

  38. Non sono un esperto di Virtualbox, ma in linea teorica non ci dovrebbe
    essere nessun problema. L’unico ammattimento potrebbe derivare dalle
    interfacce di rete (virtuali) da usare per il setup.

    Ciao!

  39. se a qualcuno servisse, posso confermare che sono riuscito ad effettuare una corretta installazione e configurazione di freeradius2 con coovachilli 1.2.2, freeradius 2.1.8 e phpmyprepaid0.4RC3 (su ubuntu lucid).
    L’unico problema che ho avuto è stato un “errore” durante la configurazione di phpmyprepaid, in quanto mancava il pacchetto php5-mysql (e non era configurato il file php.ini per caricare l’estensione) e quindi si bloccava allo step7 senza dare segni di vita. Segnalo inoltre che la configurazione di coovachilli è leggermente cambiata rispetto a quella proposta in questo articolo.
    Ogni tanto phpmyprepaid non sembra funzionare correttamente (pertanto ho provveduto a creare un programma ad-hoc per la gestione degli account)

  40. Grande Permalink, sto cercando anche io di mettere in piedi il server con Lucid, volevo chiederti se in uno sprazzo di magnanimità potevo contattarti per e-mail durante il mio tentativo, dato che sicuramente mi bloccherò in qualche errore che mi porterà il cervello a spasso nei giorni a venire……

  41. Grandissimo how-to!! Anche io devo sviluppare la rete wireless con apache, freeradius, coova,… e sono sicuro che questa guida sarà utilissima.

    Archimedix, alla fine hai fatto l’instalazione con ldap? Perche devo farlo similame, ma usando openldap.

    Grazie mille antonde per condivire la tua esperienza! 🙂

  42. Ottimo articolo.
    Anche io sono alle prese con l’installazione di phpmyprepaid su lucid e Freeradius 2.x

    X Stefano: come mai dici che ogni tanto phpmyprepaid si blocca? per fare l’installazione hai dovuto utilizzare procedure particolari? ho visto nel forum di Prepaid che ci sono dei consigli per usarlo con freeradius 2.x te hai usato quelli?

    come hai realizzato il programma ad-hoc per la gestione degli account? posso chiederti qualche consiglio?

  43. Grazie per questo interessante howto, mi è servito come punto di partenza per configurare un paio di hotspot.
    Ho peraltro risolto il problema dei counter con phpmyprepaid e freeradius2. Ho innanzitutto provveduto modificare le tabelle di phpmyprepaid come indicato sul forum di phpmyprepaid, cosa che però porta ad avere alcuni errori in phpmyprepaid, tipo quando si cancella un utente.
    Una modifica che non è riportata sul forum di phpmyprepaid ma che è risultata necessaria (con freeradius su debian stable) è stata accettare il campo NULL su radacct per quanto riguarda il campo stopacctime.
    Ho poi attivato l’accounting su sql in freeradius, facendo attenzione ad includere in radiusd.conf il file counter.conf (non incluso di default) ed ho seguito le istruzioni trovate qui: http://wiki.freeradius.org/Rlm_sqlcounter
    Et voilà il conteggio funziona perfettamente.
    Spero serva a qualcuno.

  44. Grazie per la bellissima guida.
    Una domanda.Come devono essere configurati gli access point? Se li imposto con un ip statico, come gateway devo impostare l’ip del server ubuntu o del router che connette ad internet?

  45. L’acces point deve fare l’access point, non serve settare il gateway. Basta solo settare l’ssid, tutto il resto avviene in automatico.

    Ciao!