Pork Center

Linksys WRT54GL

De Hack-it.org.

Ou l'art de faire tomber les filles avec son routeur.

Sommaire

Wouahhh, il symbolise l'internet!

Image:Linksys-South-Park.jpg

Bon vieux matos, 50 euros. Faites attention à ce qu'il y ait bien le "L" comme linux, pour bidouiller le firmware à pleines mains. J'ai pris ça en suivant les conseils d'il y a 2-3 ans (une éternité en nanosecondes informatiques)... Evitez à tout prix le chipset Broadcom, les mecs. Ce routeur c'est celui qui était bien, avant. De nos jours on a l'air con avec ça, les enfants vous disent que ça sucks, vous verrez pourquoi dans la suite de cet article.

Nous, on va faire avec. D'abord, parce que nous l'avons déjà, que nous aimons nous donner du "nous", et qu'en ramassant la doc éparse sur le net, nous avons un corpus de hacks que les autres routeurs en mini-jupe n'ont pas. Et puis Broadcom pourrait faire un geste, comme Mr Scrooge à Noël, et ça changerait tout.

Hardware en bref

  • CPU: 200Mhz (BCM3302 V0.8) Overclockable
  • Architecture: MIPS
  • RAM: 16Mo extensible(*)
  • Mémoire de masse: flash 4Mo extensible(*)
  • Chipset: Broadcom sa mère les drivers libre BCM5352EKPB

Ports:

  • 4x ethernet lan
  • 1x ethernet wan
  • 2x RP-TNC
  • JTAG(*)
  • Serial(*)
  • SD-Card(*)


(*)hardware hack au fer à souder.

OpenWRT

Fonctionne sur beaucoup d'autres bécanes que le WRT54GL notamment sur le fonera. Et là j'ai été con, parce qu'au début ils le filaient gratos le fonera, pour les gens surinformés up-to-date qui lisent les news de merde. J'avais juste à confirmer le mail, puis je me suis dit nan c'est une arnaque de merde, je m'en bats les couilles de leur engin. En fait si j'avais su qu'on pouvait changer le firmware, j'aurais cliqué sur confirm. Mais bon, on se refait pas. Mais quel con.

OpenWrt est basé sur BusyBox

Pourquoi installer OpenWrt?

La vraie, la seule raison c'est ça:

JE CHANGE ÇA , ÇA ET ÇA, ET ÇA FAIT LE CAFE, JE BIDOUILLE UN SEUL TRUC MON AMI ET JE T'EN FAIS UN MIXER A POIREAUX.

(lire la bonne vieille blague http://humour.developpez.com/bestof/index.php?cat=30&aff=21 tout en bas)


Non, vraiment pourquoi installer OpenWrt et pas autre chose?

Par défaut. Parce que y'a rien de mieux, malheureusement. Enfin ça dépend des besoins évidemment. Pour remplir la fonction d'un routeur wifi, le firmware Linksys d'origine avec son interface web va très bien.

FairuzaWRT: C'est un peu le backtrack du Linksys mais c'est pour le 54GS. Puis on peut mettre les mêmes outils sur OpenWrt. On mettra quand même la moyenne à ce firmware pour avoir été baptisé en hommage à l'actrice Fairuza Balk

dd-wrt : Bouffe des ressources, mi interface web mi ligne de commande salade tomates oignons. Comme upgrade du firmware original, pourquoi pas? Mais une fois qu'on en est là, pourquoi ne pas être hardcore et tout bricoler soi-même avec OpenWrt? Ah... et ils se sont fait engueuler par les gardiens de la Source Open pour diverses hérésies. En fin de compte on dira que c'est le firmware à dédé.

Tomato : à envisager dans l'upgrade soft easy-listening. Jolie interface en ajax avec des graphiques et des pastels. Bref un truc pour les filles ou les garçons qui portent des pulls roses.

FreeWrt : Pas convaincu. Il s'agit d'un fork, semble être à OpenWrt ce que DragonFlyBSD est à OpenBSD. Open ou free? Rhaa faites pas chier. De la daube.

Sveasoft Qu'est-ce que c'est que cette merde encore? On n'a pas essayé et on compte pas le faire. C'est quoi ce nom tout pourri. Ouhh ça m'inspire pas confiance.

Freifunk Voila un nom qui claque. C'est funky c'est frei c'est telefunken et en plus c'est allemand donc solide comme une Opel. A creuser, surtout quand on bricole essentiellement le sans fil.

Conclusion: C'est avec OpenWrt que vous vous ferez le plus chier la bite pour faire un truc tout simple, donc le choix de la rédaction. En fait le vrai choix c'est entre OpenWrt White Russian, OpenWrt Kamikaze 7.09 et maintenant 8.09 RC1. Et c'est pas une bonne chose.

Qu'est-ce qui pue du cul sur OpenWrt?

Important en cas de ras le cul

Comment retrouver le bon vieux firmware d'origine qui marche et virer OpenWrt (ok c'est partie remise, mais c'est bien de savoir revenir en arrière quand ça prend le cul)

cd /tmp
wget http://clochard.org/~fnord/FW_WRT54GL_4.30.12.3_US_EN_code.bin
mv FW_WRT54GL_4.30.12.3_US_EN_code.bin original.bin
dd bs=32 skip=1 if=original.bin of=original.trx
mtd -e linux -r write original.trx linux

Si clochard.org c'est trop paysan pour toi, t'as pas confiance, démerde toi à trouver le firmware sur le site linsksys avec leur javascript de merde qu'il faudrait les tuer à la naissance. Et courage pour le wget.

Retour vers le début de l'install

Donc, après une bonne nuit de sommeil, on reprend. On peut charger le firmware directement depuis l'interface web d'origine du routeur (192.168.1.1 admin/admin par défaut)

OpenWrt qui va bien est ici: http://downloads.openwrt.org/kamikaze/7.09/brcm-2.4/openwrt-wrt54g-2.4-squashfs.bin

Cliquez sur http://192.168.1.1/Upgrade.asp choisissez le firmware que vous venez de télécharger. Cliquez sur ok, priez pour qu'EDF coupe pas le courant. Si tout s'est bien passé y'a écrit "machin successful" si c'est pas le cas, vous pourrez toujours vous servir du routeur pour caler une porte (en fait non y'a plusieurs moyen de le debricker)

Bravo, félicitations au lieu d'avoir une interface web pour régler le routeur vous voilà avec une interface en ligne de commande, vous voilà devenu un homme.

telnet 192.168.1.1

L'autre avantage par rapport à l'interface web c'est qu'il y a pas besoin de faire des copies d'écran pour vous montrer. Et ouais copier/coller et balise pre et je vous montre ce que vous devez obtenir:

Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
 === IMPORTANT ============================
  Use 'passwd' to set your login password
  this will disable telnet and enable SSH
 ------------------------------------------


BusyBox v1.4.2 (2007-09-29 09:01:24 CEST) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 KAMIKAZE (7.09) -----------------------------------
  * 10 oz Vodka       Shake well with ice and strain
  * 10 oz Triple sec  mixture into 10 shot glasses.
  * 10 oz lime juice  Salute!
 ---------------------------------------------------
root@OpenWrt:/# echo "alors les petites tapettes?" 
alors les petites tapettes?
root@OpenWrt:/# 

Bon la recette du cocktail j'ai pas essayé. J'ai pas non plus tapé passwd ce qui aurait bloqué telnet en faveur de ssh. Parce que les passwords moi je les oublie en général. Mais je le ferais. Plus tard.

Et c'est là où la doc officielle merdouille. Sur les anciennes versions d'OpenWrt tout se faisait en écrivant dans la nvram (nvram set etc). Maintenant y'a des fichiers de config. Alors la nvram on commence par tout effacer, comme déconseillé sur le site d'OpenWrt mais que ça marche très bien quand même.

mtd -r erase nvram

Maintenant c'est comme vous voulez, si vous préférez garder les 400 lignes de conf inutiles et susceptibles de tout faire planter de l'ancien firmware Linksys, on peut pas vous empêcher. Le routeur reboute (option -r)

Tout ce qu'on rajoutera dans la nvram pour l'instant c'est ça:

nvram set boot_wait=on
nvram set boot_time=10
nvram commit && reboot

Après on utilisera seulement uci (vous pouvez aussi éditer les fichiers dans /etc/conf à grands coups de vi, c'est bien aussi)

PPPoE

uci set network.wan.proto=pppoe
uci set network.wan.username=<pppoe_psername>
uci set network.wan.password=<pppoe_password>
uci commit network
ifup wan

On peut pinger un site depuis le routeur voir qu'on est bien connecté à l'internet. Ça fait pro.

PING youporn.com (74.86.111.8): 56 data bytes
64 bytes from 74.86.111.8: icmp_seq=0 ttl=41 time=172.5 ms
64 bytes from 74.86.111.8: icmp_seq=1 ttl=41 time=183.4 ms
64 bytes from 74.86.111.8: icmp_seq=2 ttl=41 time=170.2 ms

C'est bon, youpi je suis connecté.

Qu'est-ce qu'on peut faire encore, avant d'envisager des perversions comme installer directement irssi sur le routeur? Ah oui, le wifi

Le wifi

Alors deux possibilités :

  • On laisse le réseau ouvert parce qu'on est sympa qu'on aime bien ses voisins et qu'on partage tout, surtout les procès en piratage de copyright de films pédophiles d'Al Qaida qu'on dira qu'on avait un wifi mal protégé que la doc d'OpenWrt est super compliquée à lire d'ailleurs vous avez qu'à essayer monsieur le juge et ça doit sûrement être la voisine du dessus qui m'a hacké mon access point pas protégé. Dans ce cas, tape:
uci set wireless.wl0.disabled=0
uci commit wireless && wifi
  • Si au contraire tu préfères un truc rien que pour toi qu'on vienne pas te faire chier à te voler ta bande passante et que tu réponds de tes actions devant le juge, il te faut du WPA2. Tape:


uci set wireless.wl0.disabled=0
uci set wireless.cfg2.encryption=psk2
uci set wireless.cfg2.key=<password>
uci commit wireless && wifi

Moi j'ai fignolé à la main après avec vi /etc/conf/wireless, parce que je voulais un nom de SSID qui déchire.

   * WEP n'est pas une option sérieuse. Si tu veux faire marrer le gosse du voisin, démerde-toi.

Assigner une ip statique à une station

Vérifiez que dans le fichier /etc/dnsmasq.conf vous avez bien la ligne:

#use/etc/ethersforstatichosts;sameformatas--dhcp-host 
#<hwaddr><ipaddr> 
read-ethers 

Récupérez l'adresse MAC de votre interface, notez la sur un coin de papier ou collez-là dans le buffer.Créez le fichier /etc/ethers s'il n'existe pas et ajoutez les lignes <adresse MAC> <IP> selon vos besoins, par exemple:

xx:xx:xx:xx:xx:xx 192.168.1.100 
xx:xx:xx:xx:xx:xx 192.168.1.101

Pour finir: tapez

/etc/init.d/dnsmasq reload


Forward du port 80

Dans le fichier /etc/firewall ajoutez les lignes:

iptables -t nat -A prerouting_wan -p tcp --dport 80 -j DNAT --to 192.168.1.100
iptables        -A forwarding_wan -p tcp --dport 80 -d 192.168.1.100 -j ACCEPT

Entrez la commande:

/etc/init.d/firewall reload


Le script qui va bien pour updater freedns (freedns.afraid.org)

source: http://forum.openwrt.org/viewtopic.php?id=9331

#!/bin/sh
#FreeDNS updater script

UPDATEURL="http://freedns.afraid.org/dynamic/update.php?JHGHgKhvJHgKKhjbkhBkjhKuhKug"
DOMAIN="my.domain.org"

registered=$(nslookup $DOMAIN|tail -n2|grep A|sed s/[^0-9.]//g)

  current=$(wget -q -O - http://checkip.dyndns.org|sed s/[^0-9.]//g)
       [ "$current" != "$registered" ] && {                           
          wget -q -O /dev/null $UPDATEURL 
          echo "DNS updated on:"; date
  }

à foutre dans /etc/ppp/ip_up.d/

Tutoriel iptables

l'original: http://iptables-tutorial.frozentux.net/iptables-tutorial.html

la traduction française: http://www.linux-france.org/prj/inetdoc/guides/iptables-tutorial/ipcharacteristics.html

Utiliser le bouton Cisco SES pour activer/desactiver le wifi

Le bouton SES c'est le bouton avec le logo qu'on sait même pas que c'est un bouton en fait, il ressemble à ça: Cisco.png


Ça peut être pratique, une sorte d'arrêt d'urgence. On va donc programmer sa fonction (mettre le wifi on/off) ainsi que l'allumage des leds SES, WLAN et power.

Créez le répertoire button dans /etc/hotplug.d et le fichier 01-radio-toggle dans celui-ci

cd /etc/hotplug.d
mkdir button
vi 01-radio-toggle

dans ce fichier vous copiez le script suivant:

if [ "$BUTTON" = "ses" ] ; then
        if [ "$ACTION" = "pressed" ] ; then
                WIFI_RADIOSTATUS=$(wlc radio)
                case "$WIFI_RADIOSTATUS" in
                0)
                        echo 2 > /proc/diag/led/power
                        wlc radio 1
                        wifi
                        echo 1 > /proc/diag/led/ses_white
                        echo 1 > /proc/diag/led/power ;;
                1)
                        echo 2 > /proc/diag/led/power
                        wlc radio 0
                        echo 0 > /proc/diag/led/ses_white
                        echo 2 > /proc/diag/led/wlan
                        echo 1 > /proc/diag/led/power ;;
                esac
        fi
fi

source: http://wiki.openwrt.org/OpenWrtDocs/Customizing/Software/WifiToggle voir aussi: http://wiki.openwrt.org/OpenWrtDocs/Customizing/Software/WifiToggle

aircrack-ng

ipkg install wl
ipkg install aircrack-ng

et là c'est assez étrange, y'a une couille quelque part pour faire apparaitre l'interface prism0...

wl monitor 1
ifup prism0
airodump-ng wl0
airodump-ng prism0

ifconfig montre maintenant une interface prism0 et iwconfig montre que wl0 est en mode monitor. La commande airodump-ng wl0 affiche une erreur mais semble nécessaire...

(la doc officielle dit: " wl monitor 1" puis "ifup prism0" qui retourne interface not found) voir http://wiki.openwrt.org/AircrackHowTo

monter un système de fichier distant NFS

ipkg install kmod-fs-nfs

sous linux, la box qui exportera le système de fichier:

nano /etc/exports

Par exemple:

/srv/wrt 192.168.1.1(rw)

on rend /srv/wrt writable, chmod toussa

sur le routeur:

mount -t nfs hostname:/srv/wrt /mnt/point -o rw,nolock

http://wiki.openwrt.org/RemoteFileSystemHowTo

Préferer sshfs cependant.

Bonus warez (mais fermez vos gueules)

Cadeau Bonux

Installation d'OpenVPN

Image:crobard.jpg

tutoriel en français: http://www.coagul.org/spip.php?article422


serveur.conf

port 1194
proto udp
dev tun
ca ca.crt
cert fichier.crt
key fichier.key 
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-config-dir ccd # A CHIER
route 192.168.1.0 255.255.255.0 # A CHIER
push "redirect-gateway def1" # A CHIER
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log         openvpn.log
verb 3
mute 20


client.conf

client
dev tun
proto udp
remote <host> 1194
nobind
user nobody
group nogroup
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/fichier.crt
key /etc/openvpn/keys/fichier.key
dh /etc/openvpn/dh1024.pem
comp-lzo


  • Script de démarrage, à chier:
#!/bin/sh
case "$1" in
stop)
kill `cat /var/run/openvpn.pid`
killall openvpn
;;
*)
if ! brctl show | grep -q tun0; then
openvpn --mktun --dev tun0
brctl addif br-lan tun0
ifconfig tun0 0.0.0.0 promisc up
fi
openvpn --config /etc/openvpn/client.conf
;;
esac

Les deux dernières lignes, hack de porkz