Table des matières
openwrt sur les TP-link 3020 3220
(gepeto,françois)
Installation de la base de travail openwrt TP-Link TL-MR3020
L'idée est
- installer un openwrt qui fonctionne directement a partir du firmware donné sur le site openwrt pour ce matériel
- 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
- 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
- le processeur un ar9331 donc ar71/9 sur openwrt la page qui va http://wiki.openwrt.org/toh/tp-link/tl-mr3020
Installation TP-link MR3220
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
Installation du TP-Link MR-3220
- connexion sur http://192.168.1.1 l'interface d'origine pour flasher le firmware openwrt-xxxx-squashfs-factory.bin
(les mises à jour du firmware openwrt se font avec les version openwrt-xxxx-squashfs-sysupgrade.bin)
- telnet 192.168.1.1 pour changer le password root avec passwd
- vi /etc/config/network
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
- vi /etc/config/wireless
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
- vi /etc/hosts
ajouter l'adresse interne de bricolab.snalis.org
/etc/init.d/dnsmasq restart pour prendre en compte le changement de /etc/hosts
- vi /etc/opkg.conf
changer l'URL des packages pour notre dépot bricolab.snalis.org
- vi /etc/config/fstab
à éditer pour monter automatiquement l'usb et /etc/init.d/fstab enable /etc/init.d/fstab start
- Activer batman :
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