Aller au contenu
  1. Posts/

Créer un Wi-Fi Linux avec hostapd, dnsmasq et NAT

Sommaire

Introduction
#

Dans ce laboratoire, nous allons transformer une machine Linux en point d’accès Wi-Fi.

L’architecture sera simple :

                    INTERNET
                     eth0
              ┌────────┴────────┐
              │   Linux Router  │
              │                 │
              │    hostapd      │
              │    dnsmasq      │
              │    iptables     │
              └────────┬────────┘
                     wlan0
                 Alfa AWUS1900
                 Wi-Fi LAB
              ┌────────┴────────┐
              │                 │
           Client 1          Client 2
        192.168.50.10     192.168.50.11

Dans cette configuration :

  • eth0 est connectée à Internet ;
  • wlan0 est l’interface Wi-Fi de l’Alfa AWUS1900 ;
  • hostapd crée le point d’accès ;
  • dnsmasq fournit le DHCP et le DNS ;
  • iptables réalise le NAT ;
  • 192.168.50.1 sera la passerelle du réseau Wi-Fi.

1. Installer les outils
#

Sur Debian, Ubuntu ou une distribution dérivée :

sudo apt update

Installer les paquets :

sudo apt install hostapd dnsmasq iptables iw

Vérifier les interfaces :

ip addr

Nous devons identifier :

eth0
wlan0

2. Vérifier l’Alfa AWUS1900
#

Avant de configurer hostapd, vérifions que la carte Wi-Fi supporte le mode Access Point.

iw list

Pour rechercher directement les modes supportés :

iw list | grep -A 10 "Supported interface modes"

Nous devons retrouver une ligne similaire à :

* AP

Vérifier également le pilote utilisé :

ethtool -i wlan0

Si ethtool n’est pas installé :

sudo apt install ethtool

Le fonctionnement de l’Alfa AWUS1900 dépend du pilote utilisé et de sa compatibilité avec le noyau Linux.


3. Configurer l’interface wlan0
#

Nous allons utiliser :

Réseau : 192.168.50.0/24
AP     : 192.168.50.1
DHCP   : 192.168.50.10 - 192.168.50.100

Configurer wlan0 :

sudo ip addr flush dev wlan0
sudo ip addr add 192.168.50.1/24 dev wlan0
sudo ip link set wlan0 up

Vérifier :

ip addr show wlan0

Résultat attendu :

inet 192.168.50.1/24

4. Configurer hostapd
#

hostapd va transformer wlan0 en point d’accès Wi-Fi.

Sauvegarder la configuration existante :

sudo cp /etc/hostapd/hostapd.conf /etc/hostapd/hostapd.conf.bak

Éditer le fichier :

sudo nano /etc/hostapd/hostapd.conf

Configuration :

interface=wlan0
driver=nl80211

ssid=LAB-LINUX
hw_mode=g
channel=6

ieee80211n=1
wmm_enabled=1

auth_algs=1

wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=ChangeMe-Lab-2026!

Principaux paramètres
#

interface=wlan0

Utilise l’interface Wi-Fi wlan0.

driver=nl80211

Utilise l’interface Linux moderne pour communiquer avec le pilote Wi-Fi.

ssid=LAB-LINUX

Nom du réseau Wi-Fi.

hw_mode=g

Utilisation de la bande 2,4 GHz.

channel=6

Canal utilisé par le point d’accès.

wpa=2

Active WPA2.

wpa_key_mgmt=WPA-PSK

Authentification avec une clé pré-partagée.

rsn_pairwise=CCMP

Chiffrement AES-CCMP.


5. Tester hostapd
#

Avant de lancer le service avec systemd, testons directement hostapd.

sudo hostapd /etc/hostapd/hostapd.conf

Si tout fonctionne, l’interface wlan0 devrait passer en mode Access Point.

Pour arrêter :

CTRL+C

En cas d’erreur :

iw list

puis :

ethtool -i wlan0

Vérifiez également qu’aucun autre service ne contrôle l’interface Wi-Fi.


6. Configurer dnsmasq
#

dnsmasq va fournir les adresses IP aux clients Wi-Fi.

Sauvegarder la configuration :

sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak

Éditer :

sudo nano /etc/dnsmasq.conf

Configuration :

interface=wlan0
bind-interfaces

dhcp-range=192.168.50.10,192.168.50.100,255.255.255.0,12h

dhcp-option=3,192.168.50.1
dhcp-option=6,192.168.50.1

server=1.1.1.1
server=8.8.8.8

La plage DHCP sera donc :

192.168.50.10
192.168.50.100

La passerelle sera :

192.168.50.1

7. Vérifier la configuration dnsmasq
#

Avant de démarrer le service :

sudo dnsmasq --test

Résultat attendu :

dnsmasq: syntax check OK.

8. Activer le routage IPv4
#

Vérifier l’état du forwarding :

sysctl net.ipv4.ip_forward

Si le résultat est :

net.ipv4.ip_forward = 0

activer :

sudo sysctl -w net.ipv4.ip_forward=1

Pour rendre le changement permanent :

sudo nano /etc/sysctl.d/99-wifi-router.conf

Ajouter :

net.ipv4.ip_forward=1

Appliquer :

sudo sysctl --system

Vérifier :

sysctl net.ipv4.ip_forward

9. Configurer le NAT avec iptables
#

Les clients Wi-Fi utilisent :

192.168.50.0/24

Internet est accessible par :

eth0

Nous devons donc effectuer du NAT.

Ajouter le masquerading :

sudo iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o eth0 -j MASQUERADE

Autoriser le trafic du Wi-Fi vers Internet :

sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

Autoriser les réponses :

sudo iptables -A FORWARD -i eth0 -o wlan0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Vérifier :

sudo iptables -L -n -v

Vérifier la table NAT :

sudo iptables -t nat -L -n -v

10. Démarrer les services
#

Démarrer dnsmasq :

sudo systemctl start dnsmasq

Vérifier :

sudo systemctl status dnsmasq

Démarrer hostapd :

sudo systemctl start hostapd

Vérifier :

sudo systemctl status hostapd

Activer les services au démarrage :

sudo systemctl enable hostapd
sudo systemctl enable dnsmasq

11. Tester depuis un client Wi-Fi
#

Depuis un ordinateur ou un smartphone :

SSID      : LAB-LINUX
Mot de passe : ChangeMe-Lab-2026!

Le client devrait recevoir une adresse comprise entre :

192.168.50.10

et :

192.168.50.100

Sur le client Linux :

ip addr

Puis :

ip route

La passerelle devrait être :

192.168.50.1

12. Tester la connectivité
#

Depuis le client Wi-Fi :

Tester le point d’accès
#

ping 192.168.50.1

Tester Internet par adresse IP
#

ping 8.8.8.8

Tester le DNS
#

ping google.com

Si 8.8.8.8 fonctionne mais que google.com ne fonctionne pas, le problème se situe probablement au niveau de la résolution DNS.


13. Observer les clients DHCP
#

Sur le serveur Linux :

ip neigh

On peut également observer les logs de dnsmasq :

sudo journalctl -u dnsmasq -f

Pour hostapd :

sudo journalctl -u hostapd -f

14. Observer le trafic réseau
#

Identifier les interfaces :

ip link

Observer le trafic sur wlan0 :

sudo tcpdump -i wlan0

Observer le trafic sur eth0 :

sudo tcpdump -i eth0

Observer uniquement le DHCP :

sudo tcpdump -i wlan0 port 67 or port 68

Observer le DNS :

sudo tcpdump -i wlan0 port 53

Ces commandes sont particulièrement utiles pour comprendre ce qui circule réellement entre les clients, le point d’accès et Internet.


15. Arrêter le laboratoire
#

Arrêter les services :

sudo systemctl stop hostapd
sudo systemctl stop dnsmasq

Supprimer les règles NAT :

sudo iptables -t nat -D POSTROUTING -s 192.168.50.0/24 -o eth0 -j MASQUERADE

Supprimer les règles de forwarding :

sudo iptables -D FORWARD -i wlan0 -o eth0 -j ACCEPT
sudo iptables -D FORWARD -i eth0 -o wlan0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Comprendre le fonctionnement
#

Le chemin d’un paquet est essentiellement :

Client Wi-Fi
  wlan0
  dnsmasq
 DHCP + DNS
  Linux Kernel
 IP Forwarding
  iptables
    NAT
   eth0
 INTERNET

Chaque composant possède donc une responsabilité différente :

Composant Fonction
hostapd Point d’accès Wi-Fi
dnsmasq DHCP + DNS
iptables NAT + filtrage
Kernel Linux Routage IPv4
wlan0 Réseau Wi-Fi
eth0 Accès Internet

Conclusion
#

Avec seulement quelques composants Linux, il est possible de construire un véritable laboratoire Wi-Fi :

Alfa AWUS1900
     wlan0
   hostapd
   dnsmasq
   iptables
      eth0
   INTERNET

Cette architecture constitue une excellente base pour comprendre le fonctionnement d’un réseau Wi-Fi, du DHCP, du DNS, du routage, du NAT et de l’analyse réseau sous Linux.

Elle peut ensuite servir de base à des laboratoires plus avancés autour de Wireshark, tcpdump, FreeRADIUS, WPA2-Enterprise, WPA3, IPv6 et de l’analyse de sécurité Wi-Fi.

⚠️ Utilisez ce laboratoire uniquement sur votre propre matériel ou sur un réseau pour lequel vous disposez d’une autorisation explicite.

Articles connexes