Table des matières

openwrt sur les TP-link 3020 3220

(gepeto,françois)

L'idée est

  1. installer un openwrt qui fonctionne directement a partir du firmware donné sur le site openwrt pour ce matériel
  2. générer à coté une base de compilation de paquet et module sur notre pc pour ajouter des fonctionnalités ultérieurement voir refaire le firmware complet en plus leger

on y va

  1. Telecharger et installer et lancer crunchbang sur un disque, pas de pb de ce cote

Ne pas etre root !

#truc a verifier
sudo apt-get install subversion build-essential
sudo apt-get install ncurses-dev flex libncurses5-dev zlib1g-dev gawk libssl-dev telnet pkg-config
# recup d'openwrt
mkdir ~/openwrt
cd openwrt
svn co svn://svn.openwrt.org/openwrt/trunk/
# parametrage global
cd trunk
./scripts/feeds update -a
./scripts/feeds install -a

make defconfig
make prereq
make menuconfig
# et après tout plein de modif, prevoir la journee :)
make V=99

Voila une base source openwrt

De la ressource : https://forum.openwrt.org/viewtopic.php?id=31125 avec les firmware

et chez nous :http://bricolab.snalis.org/openwrt/ar71xx/ avec tout plein de modules et d'appli !!

Du coté du TP-Link, pour s'y loger ,

ifconfig eth0:1 192.168.10.20 up

Packages nécessaires à la compilation du firmware

pour ipv6 : kmod-ipv6 radvd (radvd semble permettre le routage ipv6, il n'est pas nécessaire pour nos adresses link-local)

pour USB : kmod-usb-core kmod-usb2 kmod-usb-storage kmod-fs-ext4 kmod-scsi-generic block-mount (kmod-fs-ext4 gère ext2, ext3 et ext4; kmod-scsi-generic à tester s'il est vraiment nécessaire)

pour openmesh batman : kmod-batman-adv

de plus, le kernel doit être compilé avec les informations de debug (debugfs)

pour python-mini : libpthread zlib

(les mises à jour du firmware openwrt se font avec les version openwrt-xxxx-squashfs-sysupgrade.bin)

enlever la ligne 'bridge' qui relie wifi et ethernet

definir une adresse statique différente de 192.168.1.1 (là 192.168.1.240)

ajouter

	option gateway	192.168.1.10
	option dns	192.168.1.10

ajouter une nouvelle interface 'wifi' vide pour l'instant :

	config interface wifi

il y avait des options switch que je ne connais pas et que je n'ai pas touchées

activer le wifi en changeant ou commentant l'option disabled

changer option 'network' 'lan' en option 'network' 'wifi' le nom du domaine wifi qui doit être celui de l'interface définie dans /etc/config/network (c'était lan par défaut, pour le bridge)

changer option 'mode' 'ap' en option 'mode' 'adhoc'

Par défaut la connexion wifi a comme paramètres : ssid openwrt, encryption none et channel 11 sur chaque nouvelle installation openwrt

/etc/init.d/network restart pour redémarrer le réseau

ajouter l'adresse interne de bricolab.snalis.org

/etc/init.d/dnsmasq restart pour prendre en compte le changement de /etc/hosts

changer l'URL des packages pour notre dépot bricolab.snalis.org

à éditer pour monter automatiquement l'usb et /etc/init.d/fstab enable /etc/init.d/fstab start

batctl if add wlan0

ifconfig bat0 up

et voilà, les machines se détectent !

batman (http://www.open-mesh.org/wiki/batman-adv/) crée une interface de routage niveau 2 (liaison) virtuelle, multi-saut. Attention, la version de batman-adv doit être la même sur toutes les machines!

ping6 -I bat0 <adresse ipv6 de bat0 dans ifconfig> fonctionne

C'est cette adresse IPv6 de bat0 (link-local) que l'on peut recontruire à partir des adresses MAC détectées par batman et stockées dans /sys/kernel/debug/batman_adv/bat0/transtable_global

que l'on peut aussi avoir avec la commande batctl tg

Fonction python pour le faire (sans vérification de la validité de la chaine):

    def ipv6frommac(st):
      "Construit l'addresse IPv6 a partir d'une adresses MAC sous forme de chaine"
      return 'fe80::' + hex(int(st[0:2]+st[3:5],16)^0x200)[2:] +\
        ':' + st[6:8] + 'ff:fe' + st[9:14] +st[15:17]

Cette fonction renvoie par exemple fe80::ecb5:23ff:fe37:15ad si on lui passe ee:b5:23:37:15:ad

Les adresses MAC gérées par batman ne sont pas les vraies adresses MAC, mais une adresse générée aléatoirement pour bat0. Si on redémarre batman sur une machine distante, la nouvelle adresses aléatoire est remplacée rapidement. Si on éteint une machine, elle disparaît de la table au bout de 4-5 minutes.

Les sockets que nous créerons devront être “bindées” à l'adresse locale de bat0 que l'on trouve dans ifconfig, par batctl tl ou dans le fichier /sys/kernel/debug/batman_adv/bat0/transtable_local