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
| Devel2 | VPN |
| 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ètre | Type | Valeurs possibles en 2,4 GHz | Valeurs 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)