Créer un point d'accès wifi avec hostapd et iptables

14 Dec 2014 » {[{categoryPostCurrent}]}

Dans ce tutoriel, nous allons voir comment mettre en place un point d'accès wifi sous linux en utilisant simplement des règles iptables.

Pré-requis

Le matériel qui doit être à votre disposition pour mettre en oeuvre ce tutoriel est le suivant:

  • Une distribution linux de type debian
  • Une carte wifi USB supportant le mode master (dans ce cas nous utilisons la carte wifi USB TP-LINK TL-WN722N)

Mise en oeuvre

1ere étape: Installation et configuration de hostapd

Cette étape est sensiblement équivalente à celle du tutoriel présentant la création d'un AP en mode bridge à la différence près que le fichier de configuration de hostapd ne doit plus contenir la primitive bridge.

Ainsi le fichier /etc/hostapd/hostapd.conf devrait plutôt ressembler à celui-ci:

interface=wlan0
driver=nl80211

# YOUR COUNTRY HERE
country_code=FR
ieee80211d=1

# MODIFY YOUR SSID HERE
ssid=AP-linux-antoine

# CHANGE MODE HERE IF NEEDED
hw_mode=g

# CHANGE CHANNEL EVENTUALLY
channel=6

wme_enabled=0
macaddr_acl=0
auth_algs=1

# WE USE WPA2
wpa=2

# MODIFY YOUR PASSPHRASE HERE
wpa_passphrase=mdpanaee123

wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

2e étape: Installation et configuration de dnsmasq

Contrairement à l'installation par bridge nous allons mettre en place un serveur DHCP très léger qui est dnsmasq. Dnsmasq est maintenant embarqué par défaut dans les distributions de type debian et ubuntu et travaille main dans la main avec Networkmanager (d'ailleurs on peut le désactiver dans le fichier /etc/NetworkManager/NetworkManager.conf).

  • Installons dnsmasq si ce n'est pas déjà fait:

    apt-get install dnsmasq
    
  • Passons maintenant à sa configuration; pour cela il nous faut modifier le fichier /etc/dnsmasq.conf avec le contenu suivant:

    # disables dnsmasq reading any other files like /etc/resolv.conf for nameservers
    no-resolv
    # Interface to bind to
    interface=wlan0
    # Specify starting_range,end_range,lease_time
    dhcp-range=10.0.0.3,10.0.0.20,12h
    # dns addresses to send to the clients
    server=8.8.8.8
    server=8.8.4.4
    

Dans cet exemple nous configurons le serveur dhcp de manière :

  • qu'il nous serve des IP de 10.0.0.3 à 10.0.0.20;
  • qu'il n'utilise la résolution de nom de l'hôte (no-resolv) mais plutôt qu'il utilise les DNS de google 8.8.8.8 et 8.8.4.4 .
  • qu'il utilise l'interface wlan0 comme interface wifi

3e étape: Création du script qui permettra de lancer hostapd

Il ne nous reste plus qu'à mettre tout ça en musique de manière automatique.

Pour cela voici le script magique:

#!/bin/sh
iInf="eth0"  #Interface with Internet Connectivity (ex: eth0)
wInf="wlan1"  #Wireless interface (ex: wlan2)

echo "Stopping network manager ..."
service network-manager stop
echo "Stopping dnsmasq ..."
service dnsmasq stop
echo "Bringing down wireless interface ..."
ifconfig $wInf down
echo "Starting hostapd ..."
hostapd -dd -B /etc/hostapd/hostapd.conf
echo "Configuring wireless interface ..."
ifconfig $wInf 10.0.0.1 netmask 255.255.255.0
echo "Starting dnsmasq as DHCP server ..."
dnsmasq 
echo "Stopping firewall and allowing everyone ..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

echo "Enabling NAT ..."
iptables -t nat -A POSTROUTING -o $iInf -j MASQUERADE
echo "Enabling IP forwarding ..."
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "Wireless gateway setup is complete"

Voir aussi...

comments powered by Disqus