+++

title = "Multiples BSSID avec hostapd"
date = 2011-09-24
aliases = [ "post/2011/09/24/Multiples-BSSID-avec-hostapd"]
[taxonomies]
tags = [ "rézo" ]
+++
« La doc, c'est mal »

Les développeurs d'OpenBSD

<!-- more -->

Parfois, il arrive que tu regardes le man pour te sortir d'un mauvais pas. Et parfois, le man te répond poliment d'aller te faire enculer par un babouin galeux. Manque d'infos, commandes incomplètes, peu claires ou obsolètes, voire même pas de man du tout, c'est le lot de certains logiciels qui pourtant sont bien pratiques une fois qu'on les maîtrise.

`hostapd` est le couteau suisse indispensable dès qu'on commence à vouloir faire caca avec des points d'accès Wi-Fi. C'est bien simple : on peut faire tout et n'importe quoi avec, le meilleur comme le pire. Tous les standards modernes et moins modernes sont supportés.

Partant de ce principe, je me suis dit que ce serait marrant de faire chier les voisins en m'arrangeant pour émettre un SSID qui soit le même que le leur mais sans rien au bout (pas de DHCP ou pas de NAT au choix) ou pire : un réseau ouvert, NATé et tout le toutim mais avec un gros tcpdump de macaque pour récupérer des cookies Facebook.

Donc, comment faire pour créer de multiples BSSID (plusieurs SSID sur plusieurs adresses MAC différentes) avec `hostapd` ?

Le premier qui me répond que c'est écrit au fond du fichier de configuration, je lui enfonce une banane dans le fondement !

Certes, un exemple est donné, mais il y manque malheureusement un détail subtil. Dans le principe, une configuration super basique de `hostapd` ressemble à cela :

```
# Paramètres généraux
driver=nl80211
hw_mode=g
channel=6

# Un SSID sécurisé en WPA2/AES et bridgé avec d'autres interfaces
interface=wlan0
bridge=br0
ssid=CasseToiPauvCon
wpa=2
wpa_pairwise=CCMP
wpa_passphrase=vienstouchermongrosbaton
```

Jusqu'à rien de spectaculaire, je passe sur les options de configuration dont tout le monde se fout. À noter simplement que le bridge en lui-même doit être créé avant de lancer `hostapd` avec la commande `brctl` par exemple.

Pour le second BSSID, suffirait donc théoriquement de rajouter ces quelques lignes :

```
bss=wlan0_0
bssid=00:80:48:6a:31:62
ssid=tamerelol
```

Sachant que l'adresse MAC de la carte d'origine est `00:80:48:6a:31:61`, `hostapd` va simplement créer une interface virtuelle avec une adresse MAC différente et enregistrer un SSID dessus. Le problème si l'on fait cela, c'est que ça va merder bien comme il faut pour une raison assez obscure…

`hostapd` indique en effet que le masque ne correspond pas à l'adresse du premier BSSID. La réaction normale de n'importe quel gorille devant cela étant : WTF ?!?

Renseignement pris, il faut impérativement que l'adresse MAC du premier BSSID (donc du premier réseau) se termine par un 0 au niveau binaire pour pas que le driver merde. Oui, je sais… Pourquoi 0 ? Quel rapport avec le masque ? Quel rapport avec le driver ? Quel rapport avec la choucroute ?

Alors comment fait-on quand on n'a pas la chance d'avoir une carte Wi-Fi dont l'adresse MAC se termine par un 0 ? Et bien, on la change tout simplement ! Avant de démarrer `hostapd`, il suffit de prendre au hasard une adresse MAC qui nous arrange :

```
ifconfig wlan0 hw ether 02:21:91:aa:aa:00
```

Et de modifier le second BSSID dans `hostapd.conf` :
```
bssid=02:21:91:aa:aa:01
```

Et le tour est joué ! À toi maintenant les joies d'affichier fièrement un FreeWifi/SFRWifi/Livebox-xxxx/NUMERICABLE-XXXX/etc… pour casser les burnes de tes voisins de palier !
