Table des matières
Brouillon
: a terminer !
OpenWRT
Liens:
Il s'agit de changer le firmware d'un routeur Linksys WRT54G v2.0
Installer firmware
Reset du routeur
On remet le routeur dans un etat par défaut (parce que je n'ai plus le mot de passe!)
- Debrancher le routeur du courant
- Presser le bouton reset 30 secondes
- Brancher sur le courant en maintenant le bouton reset pendant encore une dizaine de secondes.
Version du WRT54G
Il existe une demi-dizaine de versions de routeur WRT54G.
D'aprés ce site, il suffit de regarder les 4 premières lettres du n° de série:
CDF1 = WRT54G v1.0 / ADM6996L Chipset / CPU 125Mhz
C'est mon mien ! Un peu vieux, mais je l'aime bien.
Loading
On choisis l'image:
pptp/ * Standard image (web interface, pptp)
On telecharge:
$ wget http://downloads.openwrt.org/whiterussian/newest/pptp/openwrt-wrt54g-squashfs.bin
( Dans un autre cas, j'ai choisit default/
)
upgrade
Brancher le routeur par les ports LAN.
Faire pointer son navigateur sur: http://192.168.1.1
(IP en dur!).
A la demande du user
taper admin
et la même chose pour le mot de passe.
Choisir une mise à jour du firmware
et donner le fichier précédement chargé.
Password
Une nouvelle interface web apparait, mais on va d'abord mettre un mot de passe:
$ telnet 192.168.1.1 ... root@OpenWrt:/# passwd Changing password for root Enter the new password (minimum of 5 characters) Please use a combination of upper and lower case letters and numbers. Enter new password: Re-enter new password: Password changed. root@OpenWrt:/#
On peut maintenant se reconnecter avec ssh
!
$ ssh root@192.168.1.1 ... enjoy !
Configurer le reseau
Selon un WRT54G v1 ou v2 et plus, on a ça:
Manufacturer | Model | Hardware version | LAN | WAN | WIFI |
Linksys | WRT54G | v1.x | vlan2 | vlan1 | eth2 |
Linksys | WRT54G | v2.x/v3.x/v4.0 | vlan0 | vlan1 | eth1 |
D'abord, le routeur s'est attribué lui-même l'IP 192.168.1.1 sur le LAN ! pas bien !
WAN
On va activer le WAN avec une IP en dur.
Il n'est pas nécessaire de faire:
# nvram set wan_ifname=vlan1
Puisque c'est déjà le cas !
# nvram get wan_ifname vlan1
Mais il faut bien faire ça:
# nvram set wan_proto=static # nvram set wan_ipaddr=192.168.0.52 # nvram set wan_netmask=255.255.255.0 # nvram set wan_gateway=192.168.0.254 # nvram set wan_dns=192.168.0.50
# nvram set lan_dns=192.168.0.50
L'IP du WAN est …52
et la Freebox est en …254
et on a un DNS en …50
.
On sauvegarde dans la NVRAM (sinon, c'est simplement en RAM!)
# nvram commit
Autoriser les connexions à SSH via le WAN
# vi /etc/firewall.user
Et faire en sorte d'avoir:
### Open port to WAN ## -- This allows port 22 to be answered by (dropbear on) the router iptables -t nat -A prerouting_wan -p tcp --dport 22 -j ACCEPT iptables -A input_wan -p tcp --dport 22 -j ACCEPT
Autoriser l'interface web via le WAN
iptables -t nat -A prerouting_wan -p tcp --dport 80 -j ACCEPT iptables -A input_wan -p tcp --dport 80 -j ACCEPT
Et puis:
# /etc/init.d/S35firewall
LAN
On va mettre le LAN dans un réseau étrange:
# nvram set lan_ipaddr=10.18.2.1 # nvram set lan_netmask=255.255.255.0
Et toujours:
# nvram commit
Mais:
# ifup lan
Et oui, pas besoin de reboot cette fois-ci… mais verifions quand même…
LAN libre
On est dans la configuration ou le côté WAN appartient en fait à un réseau local, et on veut faire en sorte que le LAN puisse atteindre le reseau WAN sans être NATé !
Pour cela, il suffit d'editer le fichier:
/etc/init.d/S35firewall
Et de faire en sorte de ne pas NATé en POSTROUTING du WAN:
(J'ai simplement mis en commentaire)
iptables -t nat -A POSTROUTING -j postrouting_rule # TJ ---- # iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE # ----
Et en enfin:
# /etc/init.d/S35firewall
LAN routé
forcer la route
Le LAN est “libre”, mais je veux qu'il atteigne directement une IP par defaut, sans autre possibilité.
Installons ip
de iproute2
:
# ipkg update # ipkg install ip
Ensuite, je fais un petit scripté nommé: /etc/init.d/S45iproute
#!/bin/sh ## TJ ## 25/07/2007 TABLE=200 MARK=0xfff0001 XIP=/usr/sbin/ip WAN="$(nvram get wan_ifname)" GW_IP="192.168.166.1" test -x $XIP || exit 0 case $1 in start) $XIP rule add fwmark $MARK table $TABLE $XIP route add default via $GW_IP dev $WAN table $TABLE $XIP route flush cache ;; stop) $XIP route del default via $GW_IP dev $WAN table $TABLE $XIP route flush cache $XIP rule del fwmark $MARK table $TABLE ;; *) echo "usage: $0 (start|stop)" exit 1 ;; esac exit 0
Explication:
- On utilise le marquage des paquets
- On associe au marquage une route vers le “firewall/gateway”.
Notez que la table numero 200
a ete choisit en aveugle, parce que je n'ai pas trouvé l'equivalent de Debian:
/etc/iproute2/rt_tables
Toutefois, on peut creer ce fichier, et ça marche aussi:
cat /etc/iproute2/rt_tables 200 freebox
Et voila. Je suis certain que quelques soient l'IP visé, elle sera routé vers le Firewall.
Le Firewall peut maintenant controler les echanges avec le reste du réseau.
Firewall
La regle créé ci-dessus, n'est activé qu'a partir du Firewall, on va proceder ainsi:
- Editer le fichier
/etc/init.d/S35firewall
- marquer ce qui entre par l'interface LAN, et qui n'est pas destine au LAN
Ce qui peut faire une regle IpTables de la forme:
iptables -t mangle -A PREROUTING -i $LAN -p all -s 192.168.1.0/24 -d ! 192.168.1.0/24 -j MARK --set-mark 0xfff0001
(A adapter au cas par cas)
LAN libre 2
Maintenant, je voudrais que tout le WAN puisse atteindre toutes les IP du LAN… mais ou est donc le controle du Firewall ? Il n'y en a plus. Enfin, ce controle est déporté sur un autre Firewall.
Bref, il faut editer le fichier:
/etc/firewall.user
Et ajouter:
# TJ iptables -A forwarding_wan -p all -d 10.18.2.0/24 -j ACCEPT
Rappel: c'est parce que la gateway va faire un rôle de Firewall.
WIFI simple en WPA
Lien:
Installer le package nas
:
# ipkg update # ipkg install nas
Fixer le nom du reseau wifi:
# nvram set wl0_ssid=tj
Le crypto:
# nvram set wl0_crypto="aes+tkip" # nvram set wl0_akm="psk psk2"
Et le mot de passe super secret:
# nvram set wl0_wpa_psk=le_mot_de_passe_super_secret_entre_8_et_63_caracteres
Verifier qu'on a bien:
# nvram get wl0_wep disabled # nvram get wl0_mode ap
Et si on ne veut pas que l'on broadcast le nom du reseau:
# nvram set wl0_closed=1
Et a la fin:
# nvram commit
Pour appliquer la nouvelle configuration du Wifi:
# ifup wifi
ou si ca ne fonctionne pas:
# reboot
Trucs
Hostname
# nvram set wan_hostname=MyHostName
A l'heure !
# ipkg install ntpclient
Donner l'adresse du serveur ntp
:
# nvram set ntp_server=<IP_du_serveur_NTP>
Verifier:
# nvram show | grep ntp ntp_enable=1 ntp_server=<IP_du_serveur_NTP> ntp_mode=auto
Et puis:
# nvram commit
Faire en sorte que ca fonctionne au prochain reboot:
Dans /etc/init.d/
, creer un fichier nommé: tz
contenant:
#!/bin/sh tz=$(nvram get time_zone) tz=${tz:-"CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00"} echo $tz > /etc/TZ
Et faire aussi:
# chmod a+x tz
Et enfin:
/etc/init.d/tz
Et voila le fichier /etc/TZ
, permettant enfin a date
de retourner la bonne heure.
Ouvrir OpenWrt
Le but de ce chapitre:
- Ouvrir l'accès au monde entier, enfin presque.
- Installer un controle d'accès avec FreeRadius et ChilliSpot
Ouvrir le reseau
On 2 possibilités, soit on maintient un cryptage WPA (ou WEP, au pire), soit on ne fait aucun cryptage. Dans ce 2ieme cas, voila comment faire:
# nvram set wl0_akm=open
Et pour etre certain:
# nvram set wl0_wpa_psk= # nvram set wl0_crypto=
Et enfin:
# nvram commit # ifup wifi
Côté client sous Windows, supprimer l'ancienne reference au serveur portant le SSID de OpenWrt, sinon, le cryptage est desesperement attendu… et ca marche trés mal.
Freeradius
On va installer sur un serveur, le service FreeRadius
, que le service ChilliSpot
(chapitre suivant) interrogera pour autoriser les accés Wifi.
Liens:
Installer
Pour le serveur
# apt-get install freeradius freeradius-mysql
Pour l'administration des comptes
# apt-get install freeradius-dialupadmin
Si vous avez un problème avec php5
, parce que ce paquet exige de maniere deraisonné php4
, voici un petit truc:
- telecharger le paquet
wget … freeradius-dialupadmin
- forcer l'installation du paquet:
# dpkg –force-depends -i freeradius-dialupadmin
- Editer le fichier
/var/lib/dpkg/status
et rechercher la partie concernant le paquetfreeradius-dialupadmin
et modifier pour avoir:Depends: php4 | php5
En esperant que cela ne casse pas trop les packages…
Configurer
On va se placer dans /etc/freeradius
Cryptage
FreeRadius
préfère PAP
, mais ChilliSpot
ne sait parler que CHAP
.
Alors on va mélanger un peu des 2…
Dans radiusd.conf
, la section modules
verifier qu'on a:
# PAP module to authenticate users based on their stored password pap { # TJ authtype = crypt # encryption_scheme = crypt } # CHAP module chap { authtype = CHAP }
MySQL
Dans radiusd.conf
, la section authorize
verifier qu'on a:
# # Read the 'users' file # TJ #files
# # Look in an SQL database. The schema of the database # is meant to mirror the "users" file. # # See "Authorization Queries" in sql.conf # TJ sql
Et partout on l'on a besoin de taper dans mysql
, c'est a dire les sections:
- accounting
- session
Faire:
# TJ sql
Dans le fichier, sql.conf
avoir quelque chose comme ça:
# Connect info server = "localhost" # TJ login = "freerad" password = "le_mot_de_passe" # -- # Database table configuration radius_db = "radius"
Et toujours dans le même fichier, plus loin:
# # Set to 'yes' to read radius clients from the database ('nas' table) # TJ readclients = yes
Ah oui! Il faut creer un compte et les tables dans MySQL ! En gros:
- Creer les tables en important ça:
zcat /usr/share/doc/freeradius/examples/mysql.sql.gz
- Creer un compte pour utiliser la base
On redemarre le radius
:
# /etc/init.d/freeradius restart
On peut regarder les logs dans /var/log/freeradius/
Clients
Préparer l'arriver du client local (pour commencer).
Editer le ficher clients.conf
et s'assurer qu'on a:
client 127.0.0.1 { secret = un_mot_de_passe_entre_radius_et_le_client_local shortname = localhost nastype = other # localhost isn't usually a NAS... } 28,1-8 26%
Dialup-Admin
Apache
Installer le service dans apache: (Par exemple)
# cat /etc/apache2/sites-available/freeradius-dialupadmin.conf Alias /radius "/var/www/freeradius-dialupadmin" <Directory /var/www/freeradius-dialupadmin> AuthName "Restricted Area" AuthType Basic AuthUserFile /var/www_passwd/.htpasswd_radius require valid-user AllowOverride All order allow,deny allow from 127.0.0.1 allow from 192.168.0.0/24 192.168.1.0/24 </Directory>
Il faut creer un fichier .htpasswd_radius
:
# cd /var # mkdir www_passwd # cd www_passwd # htpasswd -c -m .htpasswd_radius root
En realité, les pages www sont dans /usr/local/dialup_admin/htdocs
… a adapter.
dialup-admin
On se place dans /etc/freeradius-dialupadmin
.
Editer le fichier admin.conf
et faire en sorte d'avoir:
# TJ general_domain: mon-domaine-a-moi.fr ... # TJ general_strip_realms : yes ... # TJ general_test_account_login: test general_test_account_password: le_mot_de_passe_du_compte_test ... # TJ sql_password_attribute: Crypt-Password
Dans le doute, editer le fichier naslist.conf
pour avoir:
nas1_name: wrt54g.%{general_domain} nas1_model: Wrt54G thierry nas1_ip: <IP du client> nas1_port_num: 16 nas1_community: public
tester
Avec son navigateur, aller dans http://.../radius
, si tout va bien, on saisie un login/password et on arrive sur dialup-admin
.
Créer un client, par exemple test
avec le mot de passe entré dans la config.
Ceci fait, un test avec MySQL
doit montrer ça:
mysql> use radius; mysql> select * from radcheck; +----+----------------------------+----------------+----+------------------------------------+ | id | UserName | Attribute | op | Value | +----+----------------------------+----------------+----+------------------------------------+ | 6 | thierry | Crypt-Password | := | $xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | 7 | test | Crypt-Password | := | $xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | 12 | 00-11-22-33-44-55suffix | Crypt-Password | := | $xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | +----+----------------------------+----------------+----+------------------------------------+ 3 rows in set (0.00 sec)
Un test avec radclient
en ligne de commande doit aussi etre satisfait.
Voila un radius qui semble prêt.
ChilliSpot
On se place sur le routeur wifi…
DHCP
Chillispot
ayant son propre serveur DHCP, on vire l'existant:
# chmod a-x S60dnsmaq # killall dnsmasq
Installer
On va installer ChilliSpot
sur l' OpenWrt
:
# ipkg update # ipkg install kmod-tun # ipkg chillispot
Configurer
Editer /etc/chilli.conf
pour avoir:
# TJ # pool 192.168.254.192 ... 255 net 192.168.254.192/26
Pour le reseau
# TJ # pool dynamique: 192.168.254.224 ... 255 dynip 192.168.254.224/27
Pour la partie d'IP dynamique dans ce reseau
# TJ dns1 192.168.0.50 # TJ dns2 192.168.0.50
A priori, le dns1
est ignoré… mais bon…
# TJ domain auth.wifi.local
# TJ radiusserver1 192.168.0.50 # TJ radiusserver2 192.168.0.50
# TJ radiussecret le_secret_entre_chilli_et_freeradius
# TJ dhcpif br0
Pour l'interface a ecouter…
# TJ uamserver https://auth.wifi.local/cgi-bin/hotspotlogin.cgi
Nous y reviendrons…
# TJ uamsecret secret_entre_chilli_et_www
# TJ uamallowed proxy1.babygo.fr,proxy2.babygo.fr
Pour les serveurs autorisés sans authentification