





Dans la série des points d’accès WiFi, nous allons voir le point d’accès WiFi multiple. Basé sur le point d’accès WiFi routé, il permet de créer plusieurs sous-réseaux dédiés au WiFi. Nous pourrons ensuite router chaque réseau différemment pour créer un réseau invité en entreprise, un réseau filtré pour les enfants à la maison, ou toute autre combinaison imaginable.
Cet article part du principe que vous avez déjà effectué toutes les manipulations de l’article Le point d’accès WiFi routé avant de commencer.
Configuration des interfaces
Pour pouvoir créer plusieurs réseaux WiFi, hostapd a besoin que l’adresse MAC de votre carte réseau WiFi soit corrigée comme suit :
- Le premier nombre va prendre la valeur
02
, qui est attribuée aux interfaces dont l’adresse MAC est gérée manuellement. - Le dernier chiffre doit valoir zéro. Hostapd créera ensuite des interfaces virtuelles qui auront une adresse MAC incrémentée.
Si je prends pour exemple mon interface réseau; son adresse MAC vaut 24:05:0f:6d:c0:f1
. Je l’ai donc modifié en 02:05:0f:6d:c0:f0
.
On ne peut modifier l’adresse MAC que d’une interface éteinte :
1 2 3 |
$ sudo ifconfig wlan0 down $ sudo ifconfig wlan0 hw ether 02:05:0f:6d:c0:f0 $ sudo ifconfig wlan0 up |
Ensuite, sachant qu’hostapd ajoutera un underscore et un incrément aux noms de ses interfaces virtuelles, nous allons créer leurs configurations sur le modèle de l’actuelle, puis nous y persisterons le changement d’adresse MAC :
1 |
$ sudo cp /etc/network/interfaces.d/wlan0 /etc/network/interfaces.d/wlan0_0 /etc/network/interfaces.d/wlan0_1 |
1 2 3 4 5 6 7 |
# interfaces(5) file used by ifup(8) and ifdown(8) allow-hotplug wlan0 iface wlan0 inet static address 192.168.3.1 netmask 255.255.255.0 pre-up ifconfig wlan0 hw ether 02:05:0f:6d:c0:f0 |
1 2 3 4 5 6 |
# interfaces(5) file used by ifup(8) and ifdown(8) allow-hotplug wlan0_0 iface wlan0_0 inet static address 192.168.4.1 netmask 255.255.255.0 |
1 2 3 4 5 6 |
# interfaces(5) file used by ifup(8) and ifdown(8) allow-hotplug wlan0_1 iface wlan0_1 inet static address 192.168.5.1 netmask 255.255.255.0 |
Note: Sur Raspbian, on utilise maintenant dhcpcd, un client DHCP qui semble plutôt envahissant. Vous devrez donc aussi mettre à jour sa configuration :
43 44 45 46 47 48 49 50 |
interface wlan0 static ip_address=192.168.3.1 interface wlan0_0 static ip_address=192.168.4.1 interface wlan0_1 static ip_address=192.168.5.1 |
Hostapd
Petite sauvegarde avant de modifier la configuration d’hostapd :
1 |
$ sudo cp /etc/hostapd/hostapd.conf /etc/hostapd/hostapd.bak |
Nous allons renommer notre ancien réseau NomDuReseau
en Reseau-1
:
80 81 82 83 84 85 86 87 88 |
##### IEEE 802.11 related configuration ####################################### # SSID to be used in IEEE 802.11 management frames ssid=Reseau-1 # Alternative formats for configuring SSID # (double quoted string, hexdump, printf-escaped string) #ssid2="test" #ssid2=74657374 #ssid2=P"hello\nthere" |
Puis nous allons lui associer l’adresse MAC de base, celle que nous avons précédemment modifié, vers la fin du fichier :
1710 1711 1712 1713 1714 |
#corrupt_gtk_rekey_mic_probability=0.0 bssid=02:05:0f:6d:c0:f0 ##### Multiple BSSID support ################################################## |
Et enfin, nous ajoutons nos nouveaux réseaux à la fin du fichier :
1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 |
# bss=wlan0_1 #bssid=00:13:10:95:fe:0b # ... # Réseau 2 bss=wlan0_0 ssid=Reseau-2 # Réseau 3 bss=wlan0_1 ssid=Reseau-3 |
Comme indiqué dans les commentaires du fichier de configuration, les réseaux secondaires héritent de la configuration du réseau principal. Exception faite naturellement du SSID et des paramètres qui lui sont liés, comme l’authentification.
Dans chaque réseau secondaire, on peut surcharger à peu près tous les paramètres possible, tant qu’ils ne sont pas liés au matériel. Par exemple, il n’est pas possible de changer de canal, tous les réseaux d’un point d’accès donné utilisent la même radio sur le plan physique.
Bien sur nous devons redémarrer le service pour prendre en compte les modifications :
1 |
$ sudo service hostapd restart |
Dnsmasq
Petite sauvegarde avant de modifier la configuration de dnsmasq :
1 |
$ sudo cp /etc/dnsmasq.conf /etc/dnsmasq.bak |
Nous allons placer chacun de nos sous-réseaux WiFi sur des branches IP différentes :
- Réseau-1 sur 192.168.3.0/24
- Réseau-2 sur 192.168.4.0/24
- Réseau-3 sur 192.168.5.0/24
Pour cela, nous allons compléter la liste des interfaces que dnsmasq doit gérer :
102 103 104 105 106 107 108 |
# If you want dnsmasq to listen for DHCP and DNS requests only on # specified interfaces (and the loopback) give the name of the # interface (eg eth0) here. # Repeat the line for more than one interface. interface=wlan0 interface=wlan0_0 interface=wlan0_1 |
Puis nous allons faire de même avec nos tranches DHCP :
155 156 157 158 159 160 161 162 |
# Uncomment this to enable the integrated DHCP server, you need # to supply the range of addresses available for lease and optionally # a lease time. If you have more than one network, you will need to # repeat this for each network on which you want to supply DHCP # service. dhcp-range=wlan0,192.168.3.2,192.168.3.254,12h dhcp-range=wlan0_0,192.168.4.2,192.168.4.254,12h dhcp-range=wlan0_1,192.168.5.2,192.168.5.254,12h |
Bien sur nous devons redémarrer le service pour prendre en compte les modifications :
1 |
$ sudo service dnsmasq restart |
Retourner aux points d’accès WiFi.






Hello David,
Tout d’abord, merci pour ce blog, tes articles sont très intérressants !
Basé sur ton article je tente de mettre en place un petit AP custom qui diffuse deux SSID et qui me permettra de sortir par deux points de sortie différents sur Internet
Tout mon setup semble ok. je pense qu’il s’agit d’un soucis au niveau de mes routes, mais je ne parviens pas à identifier le problème.
Je rencontre quelques soucis avec mon setup ; accepterais tu d’y jeter un oeil ?
Merci ! Il y a un peu de relâchement ces derniers temps, j’espère pouvoir trouver rapidement du temps pour continuer.
Je peux toujours regarder, sans garanties. S’il n’y a rien de crucial, tu peux en parler dans les commentaires, ça permettra à quelqu’un qui a le même genre de problème de se faire une idée de la solution.
Hello David,
Je souhaite utiliser une petit access point qui tourne sous openwrt. Il diffuse 2 SSID ; chaque SSID forward le traffic vers un tunnel openvpn différent. J’utilise le port ethernet de mon device pour récup la connectivité internet via eth0 (dhcp)
L’objectif est pouvoir surfé sur le net via mes vpn au travers de mes deux SSID.
Mon problème est le suivant : je parviens bien à forward le traffique d’un premier wifi vers mon vpn mais dès que j’ouvre mon second vpn ; plus rien ne fonctionne.
Je pense qu’il s’agit d’un problème de route. Mais je ne parviens pas à l’identifier. Est ce que tu pourrais m’aider ?
Pour que ca soit plus claire, voici le détail de mes interfaces :
Je nat tun0 vers mon interface br-custapbe :
J’ai lu dans la doc que par défaut openvpn forward tout le traffique réseau vers le tun ; donc j’ai bien commenté la ligne suivante dans mon fichier de config openvpn :
push « redirect gateway def1 bypass-dhcp »
Et j’ai ajouté les routes suivantes :
route add -net IP_pub_du_server1 netmask 255.255.255.255 gw 192.168.0.1 eth0
route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.8.0.5 tun0
Ce qui me donne les routes suivantes :
A ce stade tout se passe correctement, je peux me connecter sur le wifi lié de l’interface br-custapbe et browse internet.
C’est lorsque que j’essaie ensuite de monter le 2eme tunnel que j’ai un soucis. Via un tcpdump je vois que dans l’état actuel de mes routes, openvpn essaie d’ouvrir tun1 au travers de tun0
Je suppose qu’il y a un soucis de priorité de route ?
Du coup j’ai tenté ceci qui semble fonctionner aussi :
Ensuite je monte mon 2ème tunnel et je configure la table de route + nat :
Les deux tunnels sont bien up :
Coté Wifi, je peux toujours surfé sur le net au travers de tun0 donc via br-custapbe. Cependant si je me connect via tun1 donc via br-custapfr cela ne fonctionne pas.
Est ce que tu as une idée ou une piste qui pourrait me faire avancer ?
Merci pour ton temps,
Franck
Ah oui, c’est un gros morceau, compliqué à étudier pendant que je suis au bureau 🙂
Est-ce que tu as essayé d’établir tes règles de routage iptable sur les interfaces au lieu des IPs (-i br-custapbe au lieu de -s 172.17.42.0/24) ?
Dans l’exemple que tu donne, j’ai l’impression que tu définis les routes par défaut de ton second réseau, mais sans l’avoir NATé / FORWARDé au préalable.
Au cas où tu ne connaissais pas, tu peux aussi essayer un front qui s’appelle FirewallBuilder. C’est une interface graphique qui va te permettre de déclarer chaque élément de ton firewall, et de créer les règles à la souris. Lui du coup va générer tes règles en intégrant toutes les bonnes pratiques et les règles « accessoires », comme tes -m state. Il va éventuellement mettre le doigt sur une éventuelle règle qui manquerait. À la fin tu récupère ton script d’initialisation d’iptables.
Penses tu que bridgé eth0 sur deux interfaces pourrait aider à résoudre mon problème ?