Ubiquiti AirOS, notes
Les Powerstation et Nanostation d’Ubiquiti Networks présentent l’intérêt d’une mise en place simplifiée chez les abonnés et de bonnes performances radio; les dernières versions (3.2 à ce jour) d’AirOS corrigent les principaux défauts d’un firmware un peu léger.
Les adaptations aux cas d’exploitation peuvent se faire par les scripts :
/etc/persistent/rc.prestop
/etc/persistent/rc.prestart
/etc/persistent/rc.poststart
/etc/persistent/rc.poststop
/etc/persistent/rc.presysinit
/etc/persistent/rc.postsysinit
Mise en place clé ssh
Le serveur ssh (dropbear sous AirOS) recherche la clé publique dans $HOME/.ssh/authorized_keys.
Le compte administrateur (ubnt par défaut) a son $HOME à /, répertoire non accessible en écriture, il faut donc le fixer à une autre valeur, /tmp dans notre cas, en rajoutant cette entrée dans /tmp/system.cfg :
users.1.homedir=/tmp/
Copier la clé publique sous /etc/persistent/authorized_keys
scp user@some_location://some_directory/cle_publique /etc/persistent/authorized_keys
Créer ou rajouter dans /etc/persistent/rc.poststart
#!/bin/sh
if [ -f /etc/persistent/authorized_keys ]; then
# HOME fixe par entree users.1.homedir a /tmp
HDIR=$(grep « :0:0: » /etc/passwd | cut -d ‘:’ -f 6)
mkdir -p $HDIR/.ssh
if [ -d $HDIR/.ssh ]; then
ln -s /etc/persistent/authorized_keys $HDIR/.ssh/authorized_keys
fi
fi
Sauvegarder et redémarrer :
cfgmtd -w -p /etc/
/sbin/reboot
Référence : http://forum.ubnt.com/forum/viewtopic.php?t=4114
Version 3.4 d’AirOS, le $HOME à /tmp/ ne fonctionne plus
Il faut fixer le $HOME à /etc/persistent/, placer le fichier authorized_keys dans /etc/persistent/.ssh/, la mise en place de ce fichier dans le script rc.poststart n’est donc plus utile, d’où la mise à jour suivante sur chaque station :
cd /etc/persistent/
mkdir .ssh/
mv authorized_keys .ssh/
chmod 0600 .ssh/authorized_keys
sed -ie ‘s$homedir=/tmp/$homedir=/etc/persistent/$’ /tmp/system.cfg
cfgmtd -w -p /etc/
/sbin/reboot
Ne pas oublier de vérifier les droits sur le répertoire /etc/persistent/ (chmod 0755).
Syntaxe de la comande route
ip route add 10.10.0.0/24 via 10.0.0.15 dev eth0
Ajout de routes, autre que la route par défaut
L’interface graphique d’AirOS ne permet pas de rajouter des routes supplémentaires; on peut toutefois les rajouter dans le fichier de configuration /tmp/system.cfg :
route.2.devname=device route.2.gateway=adresse_ip route.2.ip=reseau route.2.netmask=netmask route.2.status=enabled route.3.devname=device etc ...
Ne pas oublier de sauvegarder par :
cfgmtd -w -p /etc/
/sbin/reboot
Fixer les leases dhcp
Le serveur dhcp d’AirOS (dnsmasq) supporte la lecture du fichier /etc/ethers, ce qui permet de fixer les adresses IP des clients dhcp.
Le format du fichier ethers :
adresse_mac1 adresse_ip1
adresse_mac2 adresse_ip2
Copier le fichier ethers dans /etc/persistent/
Rajouter le code ci-dessous dans /etc/persistent/rc.poststart
if [ -f /etc/persistent/ethers ]; then
if [ -f /etc/dnsmasq.eth0.conf ]; then
ln -s /etc/persistent/ethers /etc/ethers
echo « read-ethers » >> /etc/dnsmasq.eth0.conf
/usr/etc/init.d/plugin stop dhcpd
# Doesn’t need to start, it restart
fi
fi
Sauvegarder et redémarrer :
cfgmtd -w -p /etc/
/sbin/reboot
Corruption de la partition cfg
Ce défaut se manifeste après un reflashage et se traduit par une impossibilité de sauvegarder les modifications de la configuration.
Dans l’interface graphique aucune erreur n’apparaît, toutefois après un redémarrage on revient à la configuration initiale.
Sous une session ssh l’erreur est plus explicite, une tentative de sauvegarde de la configuration par :
cfgmtd -w -p /etc
rend l’erreur :
Could not open MTD device cfg
et on trouve « unallocated space » pour la partition 3 dans le dmesg :
…
spiflash: JEDEC compatible device detected (Manufacturer: 0x20; device: 0x2016)
mtd: adjusted dev mtd2 size from 61440 to 65536 bytes
Creating 8 MTD partitions on « spiflash »:
0x00000000-0x00030000 : « RedBoot »
0x00030000-0x00100000 : « kernel »
0x00100000-0x003c0000 : « cramfs »
0x003c0000-0x003e0000 : « unallocated space »
0x003e0000-0x003f0000 : « FIS directory »
0x003ef000-0x003f0000 : « RedBoot config »
mtd: partition « RedBoot config » doesn’t start on an erase block boundary — force read-only
0x003f0000-0x00400000 : « EEPROM »
0x00030000-0x003e0000 : « Working flash »
…
Pour corriger ce problème, on peut flasher un firmware avec une partition cfg vierge :
Désassembler un firmware existant :
fwsplit NS2.ar2316.v3.2.3734.080909.1631.bin
Créer un fichier image d’une partition cfg vide :
dd if=/dev/zero of=NS2.ar2316.v3.2.3734.080909.1631.cfg bs=64k count=2
Rajouter cette image à la liste d’assemblage, en ajoutant cette ligne au fichier NS2.ar2316.v3.2.3734.080909.1631.txt :
cfg 0x03 0xBFFC0000 0x00020000 0x00000000 0x00000000 NS2.ar2316.v3.2.3734.080909.1631.cfg
Attention, les séparateurs sont des tabulations.
Réassembler un nouveau firmware :
mkfwimage -v NS2.ar2316.v3.2.cfgfix.080909.1631 -o NS2.ar2316.v3.2.cfgfix.080909.1631.bin -i NS2.ar2316.v3.2.3734.080909.1631.txt
Et le flasher.
Référence : http://forum.ubnt.com/showthread.php?t=1893
Serveur HTTP en lecture/écriture (version 5.x)
Le répertoire root du serveur http de configuration est en lecture seule (usr/ww/) et ne permet donc pas les modifications. Script ci-dessous pour créer un répertoire root en lecture/écriture permettant de tester des modifications :
#!/bin/sh
rm -Rf /etc/persistent/www/*
for REP in . help images js lib lib/lang; do
cd /usr/www/$REP
mkdir -p /etc/persistent/www/${REP}
find . -type f -maxdepth 1 -exec ln -s /usr/www/${REP}/{} /etc/persistent/www/${REP}/{} \;
if [ « x${REP} » = « x. » ]; then
find . -type l -name [0-9]* -exec ln -s /usr/www/${REP}/{} /etc/persistent/www/${REP}/{} \;
fi
done
sed -ie ‘s/\/usr\/www/\/etc\/persistent\/www/’ /etc/lighttpd.conf
killall lighttpd
Infos sur la NanoStation
Caractéristiques, démontage, installation Openwrt, etc … voir cette page de Toulouse Sans Fil.