Discussion Utilisateur:Drien

Un article de Toulouse Sans Fil, un r�seau wifi libre sur Toulouse.

Sommaire

Modifications à apporter sur des nœuds tournant sous UBNT AirOS

Sur le SDK UBNT

Dans le SDK, éditer le fichier openwrt/package/ubnt-base-files/files/usr/etc/inittab, y ajouter la ligne

::sysinit:/etc/persistent/tsf/boot

pour permettre l'appel d'un script maison à chaque boot de AirOS.

Générer le firmware par la commande make.

Sur le nœud

Flasher le nœud puis procéder à deux étapes :

  • Configuration générale via l'interface HTTP,
  • Fignolage via un script copié/collé sur la console SSH.

Les deux étapes sont nécessaires.

Configuration via l'interface HTTP

<TODO>

Fin de la config via SSH

Se connecter sur la console en ssh et se préparer à injecter le script qui suit par copier-coller. Modifier seulement les quatre premières lignes en indiquant :

  • Le nom du nœud
  • Les deux derniers octets de l'adresse IP du nœud (par exemple, pour 10.31.1.1, ne mettre que "1.1").
  • L'adresse réseau configuré côté LAN
  • Le masque de sous réseau, également côté LAN.

Ces quatre paramètres sont nécessaires pour le bon fonctionnement du noeud ; ne pas oublier de les modifier. Le script copié/collé permet de finir la configuration du noeud AirOS pour le rendre compatible TSF. Il a pour effet :

  • de créer le sous-dossier /etc/persistent/tsf dans lequel seront stockés tous les scripts relatifs à TSF,
  • de créer le contenu d'un script exécuté à chaque boot qui :
    • configure une interface virtuelle pour la connexion entre éléments TSF présents sur la LAN (y compris les non MiMo),
    • configure et lance OLSRd
    • configure le filtrage des paquets (pare-feu), notamment pour éviter de pénétrer la LAN.
  • de rendre exécutable le script de démarrage
  • de sauver le contenu en mémoire non-volatile

Une fois le script collé, procéder à un reboot d'AirOS.

nodeName="OuinNS5M"
publicIp="3.4"
netIfaceLAN="192.168.10.0"
maskIfaceLAN="255.255.255.0"

# Création du dossier persistent si nécessaire
mkdir -p /etc/persistent/tsf

# Création du fichier de conf OLSRd
cat > /etc/persistent/tsf/olsrd.conf << EOF
DebugLevel      0
IpVersion       4
Hna4
{
}
Hna6
{
}
AllowNoInt      yes
IpcConnect
{
     MaxConnections  0
     Host            127.0.0.1
}
UseHysteresis   no
LinkQualityLevel 2
Pollrate        0.05
TcRedundancy    2
NatThreshold  0.9
MprCoverage     6

LoadPlugin "olsrd_nameservice.so.0.3"
{
     PlParam "name" "$nodeName"
     PlParam "suffix" ".tsf"
     PlParam "hosts-file" "/etc/hosts"
     PlParam "interval"      "20"
     PlParam "timeout"       "3600"
}
Interface "ath0" "eth0.3195"
{
}
EOF

# Création du script de config VLAN
cat > /etc/persistent/tsf/vlan << EOF
vconfig add eth0 3195
ifconfig eth0.3195 172.30.$publicIp
EOF

# Le script de config VLAN est exécutable
chmod 755 /etc/persistent/tsf/vlan

# Création du script firewall
cat > /etc/persistent/tsf/firewall << EOF
#!/bin/sh

# TODO : protéger les façades des TSFbox

ifaceTSF="ath0 eth0.3195"
ifaceLAN="eth0"
netIfaceLAN=$netIfaceLAN
maskIfaceLAN=$maskIfaceLAN

iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X

# Pour l'instant, les "façades" ne sont pas protégées
iptables -P INPUT ACCEPT -v
iptables -P OUTPUT ACCEPT -v

# Par défaut, tout routage est interdit
iptables -P FORWARD DROP -v

# Pour chaque interface dans la liste des interfaces "tsf"
for uneIfaceTSF in \$ifaceTSF ; do

  # Autorisation du routage entre cette interface TSF et chacune autre interface TSF (y compris de cette interface et elle-même - mesh)
  for uneAutreIfaceTSF in \$ifaceTSF ; do

    # On route tous les trafics entre les interfaces TSF, sauf ceux à destination du réseau local (protection)
    iptables -t filter -A FORWARD -i \$uneIfaceTSF -o \$uneAutreIfaceTSF -d ! \$netIfaceLAN/\$maskIfaceLAN -j ACCEPT -v

  done

  # Autorisation du routage LAN vers cette interface TSF mais pas le contraire, avec masquerading
  iptables -t filter -A FORWARD -i \$ifaceLAN -o \$uneIfaceTSF -s \$netIfaceLAN/\$maskIfaceLAN -d ! \$netIfaceLAN/\$maskIfaceLAN -m state --state ! INVALID -j ACCEPT -v
  iptables -t filter -A FORWARD -i \$uneIfaceTSF -o \$ifaceLAN -d \$netIfaceLAN/\$maskIfaceLAN -s ! \$netIfaceLAN/\$maskIfaceLAN -m state --state ESTABLISHED,RELATED -j ACCEPT -v
  iptables -t nat -A POSTROUTING -o \$uneIfaceTSF -s \$netIfaceLAN/\$maskIfaceLAN -j MASQUERADE -v

done

# Autorisation du routage noyau
echo "1" > /proc/sys/net/ipv4/ip_forward

EOF

# Le script firewall est exécutable
chmod 755 /etc/persistent/tsf/firewall

# Création du fichier de boot
cat > /etc/persistent/rc.poststart << EOF
# Ajout des clés SSH
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgwCRssPpJikU92hFMTNzRDnSZ+mj3FzBx6cBDTLYmtZQCQkrfZSlKp1fADCTclciJdDkgzDaUGnWJfOb06k+jgXtLH8Li6og/eUfk6wOgleg00HeDLHXrpDBB53efvWT3pUP3twNs+qRd3uJROtPNritldGpbggMuNxBrz1B6u2bgO17 root@wgt634u" > /etc/dropbear/authorized_keys 
echo "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEA1Di/CCH1Stff2xDx/lb9OdNJ303YgmIOe7rwRByCJ4ua8rMhtZL6TDst7BwMFzFnIsYvnXMMfwzoMU4uS9YpDWYsQbON+GEr1OXZwuwOKAFNATcrPoZm11xSEBnMxPthdziCe6SqNt+XvmHsvrFiH32KHIF2bA+w+d+zgntVeWc= rsa-key-20091115" >> /etc/dropbear/authorized_keys 
/etc/persistent/tsf/vlan 
killall olsrd
olsrd -f /etc/persistent/tsf/olsrd.conf
/etc/persistent/tsf/firewall
echo -n "Last change: " > /tmp/tsfLastChange
date >> /tmp/tsfLastChange
EOF

# Le fichier de boot est exécutable
chmod 755 /etc/persistent/rc.poststart

# Sauvegarde du contexte persistant
cfgmtd -p /etc/ -w

# Execution du script de boot
/etc/persistent/rc.poststart


Répartition des services entre les deux serveurs Devel2 et VPN


Devel2VPN
Apache/PHP/MySQL, OLSR

Développement du firmware

Héberge les pages du portail captif + stats

Scripts RSSI, OLSR

OpenVPN, OLSR et DNSMASQ

Squid + HNA du réseau

Internet Accès Internet restreint


Formulaire pour la config des noeuds

Liste des paramètres sur le formulaire, avec type d'entrée et valeurs possibles :

ParamètreTypeValeurs possibles en 2,4 GHzValeurs possibles en 5 GHz
wlChannel Liste 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 100
tsfWlTxRate Liste 1M, 2M, 5.5M, 11M, 12M, 18M, 24M, 36M, 48M, 54M Non valide
wlDiversity Radio Activé/Désactivé Activé/Désactivé
wlTxAntenna Liste 0, 1, 2 0, 1, 2
wlRxAntenna Liste 0, 1, 2 0, 1, 2
deviceRole Liste AP, Backbone Backbone uniquement

Notes sur les autres paramètres :

  • Il serait pas mal de tester la validité (sur la forme) des paramètres de type adresse IP : lanIpAddress, lanIpNetmask, lanNetAddress, lanBrdcstAddress, lanGwIpAddress, dnsIpAddress, tsfWlIpAddress, prtIpAddress, prtIpNetmask, prtNetAddress, prtBrdcstAddress, prtDhcpIpRange
  • Idem pour l'adresse Ethernet : ethMacAddress. De plus, est-ce réellement utile de pouvoir modifier ce paramètre dans le formulaire ? Utile si erreur de saisie lors de la création - autres cas possibles ?
  • wlDiversity, wlTxAntenna et wlRxAntenna : configuration des antennes
    • Dans le cas d'une Nanostation2/5, on peut indiquer les polarisations (1 = horizontal, 2 = vertical)
    • Pour les autres plateformes, on peut bloquer la valeur à 1 ou 2, en fonction de la plateforme.
  • Interfaces OLSR : olsrdInterfaces : liste d'interfaces séparées par des espaces.
    • L'interface principale (au sens OLSR, la première de la liste) de tout nœud TSF doit être celle en 10.31.x.y (ath1 si deviceRole=AP, ath0 si deviceRole=Backbone).
    • Cette liste d'interface est complétée par tap0 si le nœud est susceptible d'être rattaché au VPN
    • Également complétée par eth0:0 si ce nœud est raccordé à un autre nœud TSF sur la LAN
  • wlDistance : entier en mètres.
  • wlTxPower : entier en dBm. Sa valeur max, ainsi que sa correspondance avec la valeur réelle dépend de la plateforme. Exemple si Nanostation2, une valeur de 16 implique 26dBm en réalité. Note : pour chaque plateforme, on est en mesure de convertir la valeur réelle en valeur à passer à la config (le top !)
  • prtDhcpIpRange : deux adresses IP séparées par un tiret '-'
  • nodeName : chaine de caractères. Rappeler la convention de nommage (PropriétaireType-n°)
  • tcpRedirectPort, udpRedirectPort : redirection des ports TCP/UDP pour l'hébergement de services sur la LAN du nœud. Liste de ports à rediriger, séparés par des espaces. Un port à rediriger est noté ainsi : n° de port sur l'IP publique TSF:adresse IP de la machine sur la LAN:port sur cette machine
    • Exemple : 8080:192.168.1.1:80 redirige le port 8080 de ce noeud TSF vers le port 80 de la machine 192.168.1.1 située sur la LAN
    • Remarque : le second port est obligatoire, même identique (peut néanmoins être complété automatiquement par le formulaire)