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.