Outils pour utilisateurs

Outils du site


informatique_openwrt

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
informatique_openwrt [2007/07/29 14:14] thierryinformatique_openwrt [2007/08/07 19:32] (Version actuelle) thierry
Ligne 1: Ligne 1:
 ====== Brouillon ====== ====== Brouillon ======
 +FIXME : a terminer !
  
 ====== OpenWRT ====== ====== OpenWRT ======
Ligne 64: Ligne 65:
  
 D'abord, le routeur s'est attribué lui-même l'IP 192.168.1.1 sur le LAN ! pas bien ! D'abord, le routeur s'est attribué lui-même l'IP 192.168.1.1 sur le LAN ! pas bien !
 +
  
 ==== WAN ==== ==== WAN ====
Ligne 77: Ligne 79:
   # nvram set wan_netmask=255.255.255.0   # nvram set wan_netmask=255.255.255.0
   # nvram set wan_gateway=192.168.0.254   # nvram set wan_gateway=192.168.0.254
-  # nvram set lan_dns=192.168.0.50+  # nvram set wan_dns=192.168.0.50 
 +<del># nvram set lan_dns=192.168.0.50</del> 
 L'IP du WAN est **''...52''** et la Freebox est en **''...254''** et on a un DNS en **''...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!) On sauvegarde dans la NVRAM (sinon, c'est simplement en RAM!)
Ligne 119: Ligne 123:
 Et en enfin: Et en enfin:
   # /etc/init.d/S35firewall   # /etc/init.d/S35firewall
 +
  
  
Ligne 139: Ligne 144:
      
   TABLE=200   TABLE=200
 +  MARK=0xfff0001
   XIP=/usr/sbin/ip   XIP=/usr/sbin/ip
   WAN="$(nvram get wan_ifname)"   WAN="$(nvram get wan_ifname)"
-  FW_IP="192.168.166.1"+  GW_IP="192.168.166.1"
      
   test -x $XIP || exit 0   test -x $XIP || exit 0
-   +     
-  ## effacer ce qui existe +  case $1 in 
-  $XIP route del default via $FW_IP dev $WAN table $TABLE >/dev/null 2>&1 +   start) 
-  $XIP rule del from 192.168.1.0/24 table $TABLE >/dev/null 2>&1 +     $XIP rule add fwmark $MARK table $TABLE 
-   +     $XIP route add default via $GW_IP dev $WAN table $TABLE 
-  ## ajouter +     $XIP route flush cache 
-  $XIP rule add from 192.168.1.0/24 table $TABLE +     ;; 
-  $XIP route add default via $FW_IP dev $WAN table $TABLE +   stop) 
-  $XIP route flush cache+     $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   exit 0
-La premiere efface le routage en place, s'il y etait. On ignore les erreurs.\\ +Explication: 
-La deuxieme partie met en place le routage.+  - 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:\\ 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   /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.\\ 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. Le Firewall peut maintenant controler les echanges avec le reste du réseau.
  
-=== effet de bord === +=== Firewall === 
-Aprés avoir forcer le LAN vers une routele problème est l'IP du routeur lui-même, dans la classe 192.168.1.0/24.\\ +La regle créé ci-dessusn'est activé qu'a partir du Firewall, on va proceder ainsi: 
-Son IP est 192.168.1.1, or, on dit maintenant d'envoyer toutes les requetes au firewall.\\ +  - Editer le fichier **''/etc/init.d/S35firewall''** 
-Mon mobile Wifi interroge le DNS en 192.168.1.1, et ce DNS n'existe pas, l'IP ne ping pas non plus.\\ +  - 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
-Modifier pour NATé vers le DNS: +  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 
-  vi /etc/firewall.user +(adapter au cas par cas)
-Et faire en sorte d'avoir: +
-  # TJ +
-  iptables -t nat -A prerouting_rule -p udp -s 192.168.1.0/24 -d 192.168.1.1 --dport 53 -j DNAT --to <IP_DU_DNS_DANS_192.168.166.0/24> +
-  iptables -t nat -A prerouting_rule -p all -s 192.168.1.0/24 -d 192.168.1.1 -j DNAT --to <IP_DU_WAN_DANS_192.168.166.0/24> +
- +
-On peut aussi opter pour une autre solution: laissé passer sur le routeur, et NATé a partir du firewall vers le DNS. C'est finalement la solution choisit. (oups:ca ne marche pas bien) +
- +
-En fait, voici les règles: +
-  # regles a cause d'iproute: +
-  # TJ +
-  iptables -t nat -A prerouting_rule -p udp -s 192.168.1.0/24 -d 192.168.1.1 --dport 53 -j DNAT --to <IP_DU_DNS> +
-  iptables -t nat -A prerouting_rule -p tcp -s 192.168.1.0/24 -d 192.168.1.1 --dport 22 -j DNAT --to <IP_DE_MON_WAN> +
-  iptables -t nat -prerouting_rule -p icmp -s 192.168.1.0/24 -d 192.168.1.1 -j DNAT --to <IP_DE_MON_WAN>+
  
 ==== LAN libre 2 ==== ==== LAN libre 2 ====
Ligne 194: Ligne 198:
  
 Rappel: c'est parce que la gateway va faire un rôle de Firewall. Rappel: c'est parce que la gateway va faire un rôle de Firewall.
 +
 +
  
  
Ligne 207: Ligne 213:
   # nvram set wl0_ssid=tj   # nvram set wl0_ssid=tj
 Le crypto: Le crypto:
-  # nvram set wl0_crypto=tkip+  # nvram set wl0_crypto="aes+tkip"
   # nvram set wl0_akm="psk psk2"   # nvram set wl0_akm="psk psk2"
 Et le mot de passe super secret: Et le mot de passe super secret:
Ligne 221: Ligne 227:
   # nvram commit   # nvram commit
 Pour appliquer la nouvelle configuration du Wifi: Pour appliquer la nouvelle configuration du Wifi:
-  # wifi +  # ifup wifi 
-ou +ou si ca ne fonctionne pas:
-  # wl +
-ou faute de mieux:+
   # reboot   # reboot
  
Ligne 232: Ligne 236:
 ==== Hostname ==== ==== Hostname ====
   # nvram set wan_hostname=MyHostName   # nvram set wan_hostname=MyHostName
 +
 ==== A l'heure ! ==== ==== A l'heure ! ====
   # ipkg install ntpclient   # ipkg install ntpclient
Ligne 255: Ligne 260:
   /etc/init.d/tz   /etc/init.d/tz
 Et voila le fichier **''/etc/TZ''** , permettant enfin a **''date''** de retourner la bonne heure. 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:
 +  *  http://www.pervasive-network.org/SPIP/Installation-de-Freeradius-sur-une
 +
 +==== 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 paquet ''freeradius-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
  
informatique_openwrt.1185718477.txt.gz · Dernière modification : 2007/07/29 14:14 de thierry