Description / How-To...
Ce tutorial / How-To décrit l’installation du serveur captif Chillispot sur un routeur sans-fil Linksys WRT54G, flashé avec le firmware openwrt en version expérimentale.
N’hésitez pas à m’envoyer un petit mail pour toute remarque et améliorer ce How-To. J’ai également écrit une documentation sur l’installation de chillispot sur une Debian, disponible ici : Installation de chillispot sur une Debian sarge (testing)
Rq : les commentaires dans le code sont en italique : exemple de commentaire ou /* autre commentaire */
Chillispot
Le logiciel ChilliSpot est un portail web captif destiné à "sécuriser" le partage d’une connexion sans-fil en redirigeant les utilisateurs vers une page web sur laquelle ils doivent s’authentifier via https avec un login/mot de passe, stoqué dans un serveur Radius. Pour cela, ChilliSpot crée une nouvelle interface réseau tun0 par laquelle tout le trafic sans-fil passera et sera filtré.
Architecture

routeur WRT54G :
| interface LAN [1] | 192.168.1.1 |
| interface WLAN [2] | 192.168.182.1 |
| interface WAN [3] | 10.0.0.10 |
| passerelle par défaut/gateway | 10.0.0.1 |
PC (serveur) relié au switch du WRT54G :
| interface LAN | 192.168.1.2 |
| masque de sous réseau/netmask | 255.255.255.0 |
| passerelle par défaut/gateway | 192.168.1.1 |
Installation de openwrt sur WRT54G
Télécharger le firmware expérimental sur le site openwrt.org
Uploader le firmware sur votre routeur par tftp avec le logiciel aftp (Advanced TFTP) (de préférence, n’utilisez-pas netkit-tftp: j’ai eu beaucoup de problèmes avec).
$ tftp
tftp> connect 192.168.1.1
tftp> mode octet
mode set to octet
tftp> trace
Packet tracing on.
tftp> verbose
Verbose mode on.
tftp> put openwrt-wrt54g-squashfs.bin
Si tout se passe correctement [4], vous pouvez vous connecter en telnet sur le routeur et modifier le mot de passe. Le serveur telnet sera alors désactivé et vous pourrez ensuite vous connecter en ssh sur votre routeur :
$ telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
You need to set a login password to protect your
Router from unauthorized access.
Use 'passwd' to set your password.
telnet login will be disabled afterwards,
You can then login using SSH.
BusyBox v1.00 (2005.04.23-22:18+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
root@OpenWrt:/# passwd
Après la modification de votre mot de passe, rebootez votre routeur et connectez-vous en ssh :
$ ssh root@192.168.1.1
root@192.168.1.1's password:
BusyBox v1.00 (2005.04.23-22:18+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
root@OpenWrt:~#
Configuration des paramètres du réseau sans-fil
Pour un hotspot, en général, la sécurité est désactivée. Dans cet article, Les paramètres du réseau sans-fil sont les suivants :
| identifiant réseau (ESSID) | monhotspot |
| canal/channel | 10 |
| sécurité | désactivée |
# nvram set wl0_mode=ap
# nvram set wl0_ssid=monhotspot
# nvram set wl0_auth_mode=open
# nvram set wl0_wep=disabled
# nvram set wl0_channel=10
# nvram commit
Configuration des paramètres TCP/IP
La configuration des paramètres TCP/IP dépend de la version de votre WRT54G.
WRT54G v1.x
Les interfaces réseau du WRT54G v1.x sont les suivantes :
| LAN | vlan2 |
| WLAN | eth2 |
| WAN | vlan1 |
# nvram set lan_ifname=vlan2
# nvram set lan_proto=static
# nvram set lan_ipaddr=192.168.1.1
# nvram set lan_netmask=255.255.255.0
# nvram set wifi_ifname=eth2
# nvram set wifi_proto=static
# nvram set wifi_ipaddr=0.0.0.0
# nvram set wifi_netmask=0.0.0.0
# nvram set wan_ifname=vlan1
# nvram set wan_proto=static
# nvram set wan_ipaddr=10.0.0.10
# nvram set wan_netmask=255.255.255.0
# nvram set wan_gateway=10.0.0.1
# nvram set lan_dns=10.0.0.1
# nvram commit
# reboot
WRT54G v2.x/WRT54GS v1.x
Les interfaces réseau du WRT54G v2.x / WRT54GS v1.x sont les suivantes :
| LAN | vlan0 |
| WLAN | eth1 |
| WAN | vlan1 |
# nvram set lan_ifname=vlan0
# nvram set lan_proto=static
# nvram set lan_ipaddr=192.168.1.1
# nvram set lan_netmask=255.255.255.0
# nvram set lan_gateway=0.0.0.0
# nvram set wifi_ifname=eth1
# nvram set wifi_proto=static
# nvram set wifi_ipaddr=0.0.0.0
# nvram set wifi_netmask=0.0.0.0
# nvram set wan_ifname=vlan1
# nvram set wan_proto=static
# nvram set wan_ipaddr=10.0.0.10
# nvram set wan_netmask=255.255.255.0
# nvram set wan_gateway=10.0.0.1
# nvram set lan_dns=10.0.0.1
# nvram commit
# reboot
Installation de Chillispot-1.0RC3-1
A la date de rédaction de cet article, les versions fournies par openwrt sont les suivantes : chillispot-1.0RC3-1 et kmod-tun-2.4.30-1.
# ipkg update
# ipkg install kmod-tun
Downloading http://openwrt.org/downloads/experimental/bin/packages/kmod-tun_2.4.30-1_mipsel.ipk ...
Connecting to openwrt.org[208.185.247.160]:80
kmod-tun_2.4.30-1_mi 100% |**************************************************************************************| 4695 00:00 ETA
Done.
Unpacking kmod-tun...Done.
Configuring kmod-tun...Done.
# ipkg install chillispot
ipkg_depends: Warning: tun-module mentioned in dependency but no package found in /usr/lib/ipkg/lists
Downloading http://openwrt.org/downloads/experimental/bin/packages/chillispot_1.0RC3-1_mipsel.ipk ...
Connecting to openwrt.org[208.185.247.160]:80
chillispot_1.0RC3-1_ 100% |**************************************************************************************| 60574 00:00 ETA
Done.
ipkg_depends: Warning: tun-module mentioned in dependency but no package found in /usr/lib/ipkg/lists
Unpacking chillispot...Done.
Configuring chillispot...Done.
Configuration de chillispot
Le daemon chillispot fournit son propre serveur DHCP, il faut donc désactiver le serveur DHCP :
# rm /etc/init.d/S50dnsmasq
Modifier le fichier /etc/chilli.conf (cf. Installation de chillispot sur une Debian sarge (testing)) et vérifier que la variable dhcpif correspond à l’interface WLAN de votre WRT54G
| WRT54G v1.x | dhcpif eth2 |
| WRT54G v2.x/WRT54GS v1.x | dhcpif eth1 |
Décommenter les lignes suivantes dans le fichier /etc/chilli.conf
| radiusserver1 | 192.168.1.2 | IP du serveur d’authentification Radius |
| radiusserver2 | 192.168.1.2 | IP du serveur d’authentification Radius |
| radiussecret | secretradius | secret partagé entre le serveur Radius et le daemon chillispot |
| radiusnasid | WRT54G-Chillispot | NAS-ID : identifiant de votre chillispot |
| radiuslocationid | isocc=fr,cc=33,ac=75007,network=monhotspot | WISPr-Location-ID de la forme : isocc=PAYS, cc=CODE PAYS, ac=Ville, network=ESSID |
| radiuslocationname | PSF,Invalides | |
| dhcpif | eth2 | pout un WRT54G v1.x ou eth1 pour un WRT54G v2.x/WRT54GS v1.x |
| uamserver | https://192.168.1.2/cgi-bin/hotspotlogin.cgi | |
| uamsecret | secretchilli | secret partagé entre chilli et le serveur web d’authentification |
| uamallowed | www.chillispot.org,192.168.1.2 | sites web accessibles sans authentification |
Configuration des règles iptables du Firewall
Supprimer les règles iptables fournies par openwrt et les remplacer par le script suivant :
# rm /etc/init.d/S45firewall
# cd /etc/init.d
# wget http://www.pervasive-network.org/SPIP/IMG/txt/S45firewall.txt
# mv S45firewall.txt S45firewall
# chmod u+x /etc/init.d/S45firewall
Attention : ce script permet de se connecter en SSH sur le port WAN. Si vous voulez interdire l’accès en SSH depuis Internet sur votre WRT54G, commentez la ligne correspondante dans le script (vous pourrez toujours vous connecter depuis votre réseau filaire LAN).
Installation du serveur d’authentification sous Debian
cf. le chapitre correspondant de l’article : Installation de chillispot sur une Debian sarge (testing). Télécharger le fichier hotspotlogin.cgi et l’installer dans le répertoire cgi-bin de votre serveur web :
# cd /usr/lib/cgi-bin
# wget http://www.pervasive-network.org/SPIP/IMG/txt/hotspotlogin.txt
# mv hotspotlogin.txt hotspotlogin.cgi
# chmod a+x hotspotlogin.cgi
Dans ce fichier, modifier la variable $uamsecret et mettre la même valeur que dans le fichier /etc/chilli.conf sur le WRT54G
$uamsecret = "secretchilli";
Configuration du serveur Freeradius sous Debian
cf. le chapitre correspondant de l’article : Installation de chillispot sur une Debian sarge (testing)
Dans le fichier /etc/freeradius/clients.conf, ajoutez les lignes suivantes :
client 192.168.1.1 {
secret = {{secretradius}} /* mettre le meme secret partagé que dans le fichier /etc/chilli.conf */
shortname = openwrt-chillispot
nastype = other
}
Ajoutez un utilisateur dans Freeradius
Modifier le fichier /etc/freeradius/users
Thus0 Auth-Type:=Local, User-Password=="toto"
Test de l’install de Chillispot
cf. le chapitre correspondant de l’article : Installation de chillispot sur une Debian sarge (testing)
Lancer le serveur chillispot sur le routeur WRT54G
# insmod tun
# /etc/init.d/S45firewall
# chilli -f -d
Dernière étape
Si tout fonctionne bien, vous pouvez rendre les changements permanents pour que chillispot soit lancé automatiquement au démarrage du WRT54G
# mv /etc/init.d/chilli /etc/init.d/S60chilli
En cas de problème : firstboot
Si après l’upload du firmware, vous n’arrivez pas à vous connecter au routeur WRT54G, il faut démarrer le routeur dans un mode particulier, appelé "failsafe" (le routeur s’auto-attribue l’adresse IP : 192.168.1.1)
débrancher le cordon d’alimentation du routeur
rebrancher le cordon d’alimentation du routeur
attendre que la diode DMZ s’allume et appuyer 2 secondes sur le bouton reset situé à l’arrière du routeur
Vous devrez alors pouvoir vous connecter en telnet sur le routeur et initialiser le système de fichiers du routeur :
$ telnet 192.168.1.1
root@OpenWrt:~# firstboot
... puis rebooter le routeur
Autres tutoriaux
- [http://www.howtoforge.com/wireless_hotspot_howto] (décembre 2005)

Commentaires
1. vendredi 28 octobre 2005 à 11:50, par GAbri
2. mercredi 9 août 2006 à 13:48, par cyril
3. samedi 12 août 2006 à 20:06, par babacar GUEYE
Ajouter un commentaire