Notice: Undefined index: style in /home/admins/lab3w/web_sites/wwweball.com/www2/wiki/history.php on line 117
wWwEBALL.com - WIKI - Historique : OLSR-Gateway

Accès Rapide : Navigation Sécurisée | M'identifier | M'inscrire | Rechercher | Imprimer | Webmail 

Wiki wWwEBALL - Historique : OLSR-Gateway

Cette page récapitule la configuration OLSR que j'ai employé sur une passerelle (gateway) sous Linux debian Sarge. Elle permet d'émettre des ondes Wi-Fi pour que des équipements Wifi puissent s'y connecter et pouvoir naviguer sur Internet.

La configuration est la suivante :

  • Une carte PCI eth0 qui est branché sur la Freebox ayant comme IP une IP Internet.
  • Une carte wlan0 qui émet des ondes WIFI actuellement en mode Master à comme IP 10.92.120.17 et comme masque 255.0.0.0

Installation

Editer le fichier source APT et ajouter les dépots OLSR :

001 vi /etc/apt/sources.list
001 # OLSR
002 deb http://www.skyhub.de/debian/ unstable main
003 deb-src http://www.skyhub.de/debian/ unstable main

Télécharger les paquets olsrd et olsrd-plugin.

001 apt-get update
001 apt-get install olsrd olsrd-plugin

Configuration :

Le Firewall

001 iptables -A INPUT -p tcp --dport 698 -j ACCEPT
002 iptables -A INPUT -p udp --dport 698 -j ACCEPT
003 iptables -A FORWARD -p tcp --dport 698 -j ACCEPT
004 iptables -A FORWARD -p udp --dport 698 -j ACCEPT
005 iptables -A OUTPUT -p tcp --dport 698 -j ACCEPT
006 iptables -A OUTPUT -p udp --dport 698 -j ACCEPT

Le fichier /etc/olsrd.conf

001 DebugLevel             0
002 IpVersion              4
003 ClearScreen            no
004 
005 Hna4
006 {
007  # Internet gateway:
008  0.0.0.0      0.0.0.0
009  # more entries can be added:
010  10.0.0.0  255.0.0.0
011 }
012 
013 AllowNoInt             yes
014 
015 IpcConnect
016 {
017  MaxConnections        1
018  Host                  127.0.0.1
019 }
020 
021 UseHysteresis          no
022 
023 HystScaling            0.50
024 HystThrHigh            0.80
025 HystThrLow             0.30
026 
027 LinkQualityLevel       2
028 LinkQualityWinSize     10
029 
030 Pollrate               0.05
031 TcRedundancy           2
032 MprCoverage            1
033  
034 # ce plugin active une interface Web acccessible sur le port ci-dessous
035 # les valeur de l'option "Net" sont les réseaux pouvant accéder à cette interface Web
036 LoadPlugin "olsrd_httpinfo.so.0.1"
037 {
038        PlParam     "port"   "8080"
039 #      PlParam     "Host"   "10.92.120.17"
040 #      PlParam     "Host"   "81.56.54.30"
041        PlParam     "Net"    "10.0.0.0 255.0.0.0"
042        PlParam     "Net"    "192.168.0.0 255.255.0.0"
043        PlParam     "Net"    "0.0.0.0 0.0.0.0"
044 }
045 
046 # Permet de déclarer le nom d'hôte de cette machine et..
047 LoadPlugin "olsrd_nameservice.so.0.2"
048 {
049        PlParam     "name"         "gateway"
050        PlParam     "suffix"       ".wifi.wwweball.com"
051        PlParam     "hosts-file"   "/etc/hosts.4wifi"
052        PlParam     "resolv-file"  "/etc/resolv.conf.4wifi"
053 }
054 
055 Interface "wlan0" "eth0"
056 {
057       HelloInterval         2.0
058       HelloValidityTime     6.0
059 
060       TcInterval            5.0
061       TcValidityTime        15.0
062 
063       MidInterval           5.0
064       MidValidityTime       15.0
065 
066       HnaInterval           5.0
067       HnaValidityTime       15.0
068 }

Ligne 38, j'ai configuré le port pour accéder à mon interface Web. Il faut donc configurer à notre firewall que le port 8080 est ouvert en TCP sur cette machine.

001 iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
002 iptables -A OUTPUT -p tcp --dport 8080 -j ACCEPT

Activer la carte Wi-Fi en mode ad-hoc

001 iwconfig wlan0 essid wiFi.wWwEBALL.com mode ad-hoc 

Lancement d'olsrd

Essayer :

001 /usr/sbin/olsrd -f /etc/olsrd.conf -d 9 

Une fois démarré, aller sur l'inferface Web > ex : http://10.92.120.17:8080 et vérifier la configuration.

Pour l'instant les testes sont :

Plugin Http Info

La page /routes

Les nodes OLSR :

  • Depuis un poste windows ;

    • sans olsr.exe de lancé sur ce poste
      • sur ce poste : je navigue
      • sur l'interface Web de la node "AP" : je ne vois pas ce poste sur la page /nodes.

    • avec olsr.exe de lancé sur ce poste
  • Depuis un poste linux ;
    • pas testé !
    • la configuration doit être la même mis à part le fait, que nous ayons sûrement qu'une seule carte WiFi.

Si tout marche, activer olsrd au boot de la machine

001 vi /etc/default/olsrd
001 # sourced by /etc/init.d/olsrd
002 start_olsrd=yes

et configurer la carte wifi en mode ad-hoc

001 vi /etc/network/interfaces
001 auto wlan0
002 iface wlan0 inet static
003        address 10.92.120.17
004        netmask 255.255.0.0
005        network 10.92.120.0
006        broadcast 10.92.120.255
007        wireless_essid wiFi.wWwEBALL.com
008        wireless_mode Ad-hoc

Les routes pour internet (ça vous l'savez sûrement déjà !)...

Attention :
En ligne 2 j'ai ouvert tout les ports d'internet à mes utilisateurs Wi-Fi.
Regarder de la doc sur iptables, si vous souhaitez fermer certains accès aux utilisateurs Wi-Fi.

001 # ouvrir tout le trafic vers internet
002 iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
003 # Cacher les machines derrière le routeur
004 ipatbles -A POSTROUTING -t nat -s 10.92.120.0/24 -j MASQUERADE

Donc voilà, si j'ai rien sauté ça doit marcher :/
Bien sûr OLSR est un protocole complexe, et dès lors, je n'ai pas encore testé ses subtilités.

Voir la page OLSR pour de plus amples informations.


PS : je viens de tomber la-dessus : WifiDog And Olsr

Le problème :
Si vous choisissiez d'installer seulement une gateway Wifidog, toutes les adresses MAC des clients seront masqués par le routeur OLSR le plus proche.

La solution :
Installez une gateway Wifidog sur tous les noeuds d'OLSR. Permettez l'écoulement de HTTP entre les noeuds d'OLSR avec le script suivant lancé par le cron sur tout le noeuds.

001 #!/bin/sh
002 #
003 # Script to bypass HTTP interception for traffic forwarded by OLSR
004 # bms 9-Aug-2005
005 # Licensed under GPL
006 #
007 
008 rm -f /tmp/get_neighbors.awk
009 cat > /tmp/get_neighbors.awk <<__HERE1__
010 BEGIN {
011  while("route -n"|getline) {
012    if (/^[0-9]/) {
013        if (0 < \$5) {
014           if (\$3 == "255.255.255.255 <http://255.255.255.255>") {
015             printf "%s\n", \$1;
016                 }
017               }
018             }
019           }
020        }
021 __HERE1__
022 
023 
024 iptables -t nat -D WiFiDog_Unknown -j OlsrNeighbors 2>&1 >/dev/null
025 iptables -t nat -F OlsrNeighbors 2>&1 >/dev/null
026 iptables -t nat -X OlsrNeighbors 2>&1 >/dev/null
027 iptables -t nat -N OlsrNeighbors
028 
029 neighbors=$(awk -f /tmp/get_neighbors.awk)
030 
031 for _neighbor in ${neighbors} ; do
032 
033   _mac=$(grep "^${_neighbor}" /proc/net/arp | awk '{print $4}')
034   echo ${_mac}
035   iptables -t nat -A OlsrNeighbors -m mac --mac-source ${_mac} -p tcp --dport 80 -j ACCEPT
036           
037 done
038 
039 iptables -t nat -I WiFiDog_Unknown -j OlsrNeighbors

On m'a conseillé de laisser passer toutes les requetes TCP (au lieu de laisser que le port 80)

Remplacer cette ligne :

001 iptables -t nat -A OlsrNeighbors -m mac --mac-source ${_mac} -p tcp --dport 80 -j ACCEPT

par celle-ci :

001 iptables -t nat -A OlsrNeighbors -m mac --mac-source ${_mac} -p tcp -j ACCEPT

Bon personnellement, j'ai encore quelques soucis, j'aimerais partager ces astuces et ces problèmes avec d'autres. N'hésitez pas à poser sur le forum.

  • Par exemple, j'ai des deconnexions, bcp de deconnexions :(

Historique de la page