Routage HTTP OLSR

Cet article est toujours valide pour freifunk, cependant le nouveau firmare national intégre déja cette fonction.

Installation des paquets nécessaires

  • ipkg install ip

A exécuter à intervalles réguliers sur chaque noeud WRT OLSR hébergeant Wifidog Gateway server ( voir plus bas pour la mise en œuvre ):

Détail du fichier /etc/rthtolsr

#!/bin/sh
#
# Script to bypass HTTP interception for traffic forwarded by OLSR
# bms 9-Aug-2005
# Licensed under GPL
#

rm -f /tmp/get_neighbors.awk
cat > /tmp/get_neighbors.awk <<__HERE1__
BEGIN {
  while("ip route"|getline) {
      if (\$6 == "metric") {
        if (\$7 > 0) {
          printf "%s\n", \$1;
        }
    }
  }
}
__HERE1__


# On supprime la règle Iptable existante
iptables -t nat -D WiFiDog_Unknown -j OlsrNeighbors 2>&1 >/dev/null
iptables -t nat -F OlsrNeighbors 2>&1 >/dev/null
iptables -t nat -X OlsrNeighbors 2>&1 >/dev/null
iptables -t nat -N OlsrNeighbors

# On récupère la liste des noeuds OLSR
neighbors=$(awk -f /tmp/get_neighbors.awk)

# Pour chaque noeud OLSR trouvé 
for _neighbor in ${neighbors} ; do

   # On extrait son adresse MAC
   _mac=$(grep "^${_neighbor}" /proc/net/arp | awk '{print $4}')
   echo ${_mac}

   # On autorise le flux entrant HTTP provenant de l'adresse MAC
   iptables -t nat -A OlsrNeighbors -m mac --mac-source ${_mac} \
          -p tcp --dport 80 -j ACCEPT
          
done

# On active le NAT pour cette chaine
iptables -t nat -I WiFiDog_Unknown -j OlsrNeighbors

rajouter une entrée dans la crontab pour exécuter une tâche, par exemple /etc/rthtolsr, toutes les deux minutes sur le wrt :

  • cd /etc/init.d/
  • rm S51crond
  • cp /rom/etc/init.d/S51crond .
  • vi S51crond

Détail du fichier S51crond dans /etc/init.d/

#!/bin/sh
test -n "$FAILSAFE" && exit
test -z "$(awk 'sub(":","") {print $1}' /proc/net/wireless)" && exit
if [ ! -d /var/spool/cron/crontabs ]; then
  mkdir -p /var/spool/cron/crontabs
  cat>/var/spool/cron/crontabs/root<<EOF
0-59/1 * * * *  /usr/sbin/cron.minutely
*/2 * * * *     /usr/sbin/cron.biminutely
0 * * * *       /usr/sbin/cron.hourly
0 0 * * *       /usr/sbin/cron.daily
EOF
fi
/usr/sbin/crond -L /dev/null

Finissez en tapant ces ligne en console :

  • echo /etc/rthtolsr » /usr/sbin/cron.biminutely
  • chmod +x /usr/sbin/cron.biminutely

attention si vous regardez bien les tests du script, S51crond ne modifie pas l'entrée crontabs/root, il la créé si elle n'existe pas. ca tombe bien, à chaque redémarrage du wrt c'est le cas…