Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
hostapd [Le 10/08/2011, 00:57] – 0ol | hostapd [Le 31/03/2018, 16:43] (Version actuelle) – [Création d'un point d'accès Wi-Fi & Partage de connexion Internet] 46.193.66.47 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ---- | ||
+ | ====== HostAP daemon ====== | ||
+ | Hostapd s' | ||
+ | |||
+ | Hostapd permet la création d'un point d' | ||
+ | Dans les réseaux informatiques, | ||
+ | |||
+ | ===== Support du mode AP ou Master ==== | ||
+ | |||
+ | Votre adaptateur Wi-Fi doit supporter le mode AP ou Master, avant tout vérifiez que votre adaptateur supporte ce mode avec la commande " | ||
+ | |||
+ | Le **mode AP** doit apparaître : | ||
+ | |||
+ | # iw list | ||
+ | < | ||
+ | [...] | ||
+ | Supported interface modes: | ||
+ | * IBSS | ||
+ | * managed | ||
+ | * AP | ||
+ | * AP/VLAN | ||
+ | * monitor | ||
+ | * mesh point | ||
+ | [...] | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Installation, | ||
+ | |||
+ | |||
+ | Installation depuis dépots officiel | ||
+ | |||
+ | < | ||
+ | |||
+ | Le fichier de configuration **/ | ||
+ | |||
+ | La configuration minimale (Wi-Fi ouvert/ | ||
+ | < | ||
+ | # interface wlan du Wi-Fi | ||
+ | interface=wlan0 | ||
+ | |||
+ | # nl80211 avec tous les drivers Linux mac80211 | ||
+ | driver=nl80211 | ||
+ | |||
+ | # Nom du spot Wi-Fi | ||
+ | ssid=Nexus | ||
+ | |||
+ | # mode Wi-Fi (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g) | ||
+ | hw_mode=g | ||
+ | |||
+ | # canal de fréquence Wi-Fi (1-14) | ||
+ | channel=6 | ||
+ | |||
+ | # Wi-Fi ouvert, pas d' | ||
+ | auth_algs=0 | ||
+ | |||
+ | # Beacon interval in kus (1.024 ms) | ||
+ | beacon_int=100 | ||
+ | |||
+ | # DTIM (delivery trafic information message) | ||
+ | dtim_period=2 | ||
+ | |||
+ | # Maximum number of stations allowed in station table | ||
+ | max_num_sta=255 | ||
+ | |||
+ | # RTS/CTS threshold; 2347 = disabled (default) | ||
+ | rts_threshold=2347 | ||
+ | |||
+ | # Fragmentation threshold; 2346 = disabled (default) | ||
+ | fragm_threshold=2346 | ||
+ | </ | ||
+ | |||
+ | Le driver nl80211 est utilisé avec tous les drivers Linux mac80211. | ||
+ | Hostapd supporte les adaptateurs Wi-Fi utilisant les drivers madwifi, prism. | ||
+ | |||
+ | === Authentification WPA/WPA2 === | ||
+ | |||
+ | Activez l' | ||
+ | |||
+ | Avec Wi-Fi WPA (WPA-PSK-TKIP) : | ||
+ | < | ||
+ | wpa=1 | ||
+ | # | ||
+ | wpa_passphrase=passphrase | ||
+ | wpa_key_mgmt=WPA-PSK | ||
+ | wpa_pairwise=TKIP | ||
+ | </ | ||
+ | |||
+ | Avec Wi-Fi WPA2 (WPA2-PSK-CCMP) : | ||
+ | < | ||
+ | wpa=2 | ||
+ | # | ||
+ | wpa_passphrase=passphrase | ||
+ | wpa_key_mgmt=WPA-PSK | ||
+ | wpa_pairwise=CCMP | ||
+ | rsn_pairwise=CCMP | ||
+ | </ | ||
+ | |||
+ | === Filtrage MAC === | ||
+ | |||
+ | Activez le Filtrage des adresses MAC des clients sans fil : | ||
+ | |||
+ | < | ||
+ | # Station MAC address -based authentication (driver=hostap or driver=nl80211) | ||
+ | # 0 = accept unless in deny list | ||
+ | # 1 = deny unless in accept list | ||
+ | # 2 = use external RADIUS server (accept/ | ||
+ | macaddr_acl=1 | ||
+ | |||
+ | # Accept/deny lists are read from separate files | ||
+ | accept_mac_file=/ | ||
+ | # | ||
+ | </ | ||
+ | |||
+ | Exemple de fichier hostapd.accept : | ||
+ | < | ||
+ | b4: | ||
+ | 00: | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | === Lancement de hostapd === | ||
+ | |||
+ | Lancement de hostapd : | ||
+ | < | ||
+ | hostapd / | ||
+ | </ | ||
+ | ==== Configuration d'un point d' | ||
+ | |||
+ | L' | ||
+ | |||
+ | Tableau montrant l' | ||
+ | ^Bande passante ^ ^HT 20MHz ^HT 40MHz^ ^ | ||
+ | |**Nombre de Flux** |800 ns Gi |400 ns Gi |800 ns Gi |400 ns Gi| | ||
+ | |1 flux |65 Mbps |75 Mbps |135 Mbps |150 Mbps| | ||
+ | |2 flux |130 Mbps |150 Mbps |270 Mbps |300 Mbps| | ||
+ | |3 flux |195 Mbps |225 Mbps |405 Mbps |450 Mbps| | ||
+ | |4 flux |260 Mbps |290 Mbps |540 Mbps |600 Mbps| | ||
+ | |||
+ | Tableau des canaux dans le mode HT40 inférieur/ | ||
+ | ^fréquences ^ HT40- ^ HT40+ ^ | ||
+ | |2.4 GHz |5-13 |1-7 (1-9 en Europe/ | ||
+ | |5 GHz |40, | ||
+ | |||
+ | Les règles sont les suivantes : vous ne devez pas paramètrer les canaux 1,2,3 ou 4 dans le mode HT40 inférieur, et vous ne devez pas paramétrer les canaux 10,11,12 ou 13 dans le mode HT 40 supérieur. Les canaux 5,6 ou 7 marcheront donc dans les deux modes HT40 -/+. | ||
+ | |||
+ | |||
+ | Petit rappel du mode standard IEEE 802.11g, entre 2,4GHz et 2,5GHz il y a 100Mhz et il y a 14 canaux de 20MHz espacés de 5MHz seulement, et se chevauchant obligatoirement dans cette espace de la bande. En mode 802.11n la bande passant additionné de 2 canaux couvre 40MHz, chevauchant par conséquent beaucoup plus de canaux entre 2,4GHz et 2, | ||
+ | |||
+ | Paramètrage Wi-Fi N en mode IEEE 802.11g (2,4GHz) et channel : | ||
+ | < | ||
+ | # mode Wi-Fi | ||
+ | hw_mode=g | ||
+ | channel=6 | ||
+ | </ | ||
+ | |||
+ | Paramètrage Wi-Fi N en mode IEEE 802.11a (5GHz) et channel : | ||
+ | < | ||
+ | # mode Wi-Fi | ||
+ | hw_mode=a | ||
+ | channel=36 | ||
+ | </ | ||
+ | |||
+ | Hostapd implémente des règles très strictes en 802.11n en particulier IEEE_802.11n Draft 7.0 section 11.14.3.2. Au démarrage hostap scannera donc les APs HT20/40 actifs dans son environnement présent, et déterminera si votre fréquence primaire est en adéquation avec la fréquences secondaire conséquente du choix canal inférieur/ | ||
+ | |||
+ | Ce patch est fonctionnel pour activer le mode 40MHz dans un environnement non contrôlé et perturbé, fichier IEEE_802.11n_D7.0_11.14.3.2.patch : | ||
+ | <code c> | ||
+ | hostapd-0.7.3/ | ||
+ | --- ../ | ||
+ | +++ ../ | ||
+ | @@ -378,8 +378,17 @@ | ||
+ | sec = pri + 20; | ||
+ | } | ||
+ | |||
+ | - if ((pri < affected_start || pri > affected_end) && | ||
+ | - (sec < affected_start || sec > affected_end)) | ||
+ | + | ||
+ | + " | ||
+ | + | ||
+ | + pri, sec, pri_chan, | ||
+ | + sec > pri ? ' | ||
+ | + | ||
+ | + | ||
+ | + if ( ((pri < affected_start || pri > affected_end) && | ||
+ | + (sec < affected_start || sec > affected_end)) || | ||
+ | + ((pri > affected_start && sec > affected_end) || // | ||
+ | + (pri < affected_start && sec < affected_end)) ) // and reverse | ||
+ | continue; /* not within affected channel range */ | ||
+ | |||
+ | wpa_printf(MSG_DEBUG, | ||
+ | @@ -451,7 +460,14 @@ | ||
+ | iface-> | ||
+ | iface-> | ||
+ | } | ||
+ | - | ||
+ | + else wpa_printf(MSG_INFO, | ||
+ | + " | ||
+ | + iface-> | ||
+ | + iface-> | ||
+ | + iface-> | ||
+ | + iface-> | ||
+ | + iface-> | ||
+ | + iface-> | ||
+ | hostapd_setup_interface_complete(iface, | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Exemple de configuration WI-FI 802.11n : | ||
+ | < | ||
+ | ieee80211n=1 | ||
+ | ht_capab=[HT40+][SHORT-GI-40][RX-STBC1][DSSS_CCK-40][MAX-AMSDU-3839] | ||
+ | </ | ||
+ | |||
+ | Ici nous utilisons les modes HT20/HT40 supérieur, avec un intervalle de garde court en 40 MHz, avec 1 seul flux spatial, avec prise en charge du DSSS/CCK Mode en 40 MHz, avec un AMSDU de longueur maximum à 3839 bytes (par défaut). Canal 6 avec cryptage WPA2-PSK-CCMP configuré plus haut dans la config de hostapd. | ||
+ | |||
+ | Utilisez la commande "iw list" pour déterminer les capacités de votre adaptateur en Wi-Fi 802.11n : | ||
+ | < | ||
+ | # iw list | ||
+ | Wiphy phy1 | ||
+ | Band 1: | ||
+ | Capabilities: | ||
+ | HT20/HT40 | ||
+ | SM Power Save disabled | ||
+ | RX HT40 SGI | ||
+ | RX STBC 1-stream | ||
+ | Max AMSDU length: 3839 bytes | ||
+ | DSSS/CCK HT40 | ||
+ | Maximum RX AMPDU length 65535 bytes (exponent: 0x003) | ||
+ | Minimum RX AMPDU time spacing: 8 usec (0x06) | ||
+ | HT TX/RX MCS rate indexes supported: 0-15 | ||
+ | [...] | ||
+ | </ | ||
+ | |||
+ | Attention aux messages d' | ||
+ | * Driver does not support configured HT capability [SHORT-GI-20] | ||
+ | * Driver does not support configured HT capability [DSSS_CCK-40] | ||
+ | * Driver does not support configured HT capability [RX-STBC*] | ||
+ | * HT (IEEE 802.11n) with WPA/WPA2 requires CCMP to be enabled | ||
+ | |||
+ | |||
+ | N' | ||
+ | |||
+ | Lancement de hostapd en Wi-Fi N avec son fichier de configuration : | ||
+ | < | ||
+ | hostapd / | ||
+ | </ | ||
+ | |||
+ | ===== Création d'un point d' | ||
+ | |||
+ | Cet exemple vous permettra de créer un point d' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | '' | ||
+ | Client Wi-Fi [PhoneWeb/ | ||
+ | |||
+ | '' | ||
+ | |||
+ | Ce type de configuration WI-Fi permet à des adaptateurs WI-Fi installés sur des périphériques, | ||
+ | |||
+ | ==== Configuration de l' | ||
+ | |||
+ | Il nous faut activer l' | ||
+ | |||
+ | < | ||
+ | sudo ifconfig wlan0 down | ||
+ | sudo ifconfig wlan0 192.168.0.1 netmask 255.255.255.0 up | ||
+ | </ | ||
+ | |||
+ | ==== Configuration du daemon hostapd | ||
+ | |||
+ | Lancement du daemon hostapd avec son fichier de configuration pointant sur l' | ||
+ | < | ||
+ | sudo hostapd / | ||
+ | </ | ||
+ | |||
+ | ==== Configuration Dhcpd Serveur ==== | ||
+ | |||
+ | La création d'un point d' | ||
+ | |||
+ | Le fichier de configuration / | ||
+ | |||
+ | < | ||
+ | option domain-name-servers 192.168.0.1; | ||
+ | |||
+ | default-lease-time 600; | ||
+ | max-lease-time 7200; | ||
+ | |||
+ | authoritative; | ||
+ | |||
+ | log-facility local7; | ||
+ | |||
+ | subnet 192.168.0.0 netmask 255.255.255.0 { | ||
+ | # | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | range dynamic-bootp 192.168.0.15 192.168.0.100; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Lancement de dhcpd-server : | ||
+ | < | ||
+ | sudo dhcpd -d -f -pf / | ||
+ | </ | ||
+ | |||
+ | ==== Configuration Dnsmasq Serveur ==== | ||
+ | |||
+ | Notre sous-réseau étant créé, il ne reste plus qu'à configurer un serveur de cache DNS sur notre interface, qui transformera toute demande d'un domaine en adresse Ip. | ||
+ | |||
+ | Attention notre DNS ne fait que lire le fichier '/ | ||
+ | |||
+ | |||
+ | Le fichier de configuration / | ||
+ | |||
+ | < | ||
+ | bogus-priv | ||
+ | filterwin2k | ||
+ | # no-resolv | ||
+ | interface=wlan0 | ||
+ | no-dhcp-interface=wlan0 | ||
+ | </ | ||
+ | |||
+ | Bien que dnsmasq puisse distribuer des adresses IP d'un sous-réseau, | ||
+ | |||
+ | Lancement de dnsmasq : | ||
+ | |||
+ | < | ||
+ | sudo dnsmasq -x / | ||
+ | </ | ||
+ | |||
+ | ==== Configuration de IP forwarding ==== | ||
+ | |||
+ | Notre interface wlan nouvellement créée a besoin de communiquer avec notre seconde interface ayant Internet, nous devons configurer l'IP forwarding. | ||
+ | |||
+ | Activez la prise en charge de l'IP forwarding, pour faire suivre les paquets d'une interface à l' | ||
+ | |||
+ | < | ||
+ | echo 1 > / | ||
+ | </ | ||
+ | |||
+ | Ou bien si vous voulez rendre cela permanent : | ||
+ | |||
+ | Éditez le fichier / | ||
+ | < | ||
+ | # Uncomment the next line to enable packet forwarding for IPv4 | ||
+ | net.ipv4.ip_forward=1 | ||
+ | </ | ||
+ | |||
+ | ==== Configuration de la Mascarade & du Firewall ==== | ||
+ | |||
+ | Notre sous-réseau 192.168.0.0/ | ||
+ | |||
+ | Pour traduire des adresses entre deux interfaces nous devons activer le masquerading (NAT/ | ||
+ | |||
+ | Chargez le module : | ||
+ | < | ||
+ | |||
+ | === Configuration du Firewall avec iptables === | ||
+ | |||
+ | Activer la mascarade sur l' | ||
+ | < | ||
+ | |||
+ | Accepter toutes les connexions établies et reliées entre elles : | ||
+ | < | ||
+ | |||
+ | Accepter les nouvelles connexions venant de l' | ||
+ | < | ||
+ | |||
+ | Enfin accepter les connexions entrantes venant de notre sous-réseau : | ||
+ | < | ||
+ | |||
+ | === Configuration du Firewall avec Ufw === | ||
+ | |||
+ | En premier lieux, il faut changer la règle par défaut du transfert de paquets d'une interface à l' | ||
+ | Editer le fichier / | ||
+ | < | ||
+ | |||
+ | Editer le fichier / | ||
+ | < | ||
+ | net.ipv4.ip_forward=1 | ||
+ | </ | ||
+ | |||
+ | Éditer le fichier / | ||
+ | | ||
+ | Juste après l' | ||
+ | < | ||
+ | # nat Table rules | ||
+ | *nat | ||
+ | : | ||
+ | |||
+ | # Forward traffic from eth1 through eth0. | ||
+ | -A POSTROUTING -s 192.168.0.0/ | ||
+ | |||
+ | # don't delete the ' | ||
+ | COMMIT | ||
+ | </ | ||
+ | |||
+ | Dans la section *filter ajoutez : | ||
+ | < | ||
+ | -A ufw-before-forward -m state --state RELATED, | ||
+ | -A ufw-before-forward -i wlan0 -s 192.168.0.0/ | ||
+ | </ | ||
+ | |||
+ | Finalement autorisez le sous-réseau : | ||
+ | < | ||
+ | sudo ufw allow from 192.168.0.0/ | ||
+ | </ | ||
+ | |||
+ | ou bien avec Gufw : | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | ==== Exemple de script ==== | ||
+ | |||
+ | |||
+ | Fichier bash wifi_ap.sh | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # | ||
+ | # | ||
+ | #Optionnel: paquet macchanger optionnel | ||
+ | #Auteur: Nexus6[at]altern.org 01.12.2010 | ||
+ | |||
+ | ### WARNING : kill hostapd dnsmasq & dhcpd à la fin... | ||
+ | |||
+ | # Configuration des interfaces | ||
+ | INT_WIFI=" | ||
+ | INT_NET=" | ||
+ | |||
+ | # IP & mask du sous-réseau créé sur l' | ||
+ | SUBNET=" | ||
+ | IP=" | ||
+ | MASK=" | ||
+ | # | ||
+ | |||
+ | # Change l' | ||
+ | MACCHANGER=" | ||
+ | |||
+ | # Definition de quelques couleurs | ||
+ | red=' | ||
+ | redhl=' | ||
+ | RED=' | ||
+ | blue=' | ||
+ | BLUE=' | ||
+ | cyan=' | ||
+ | CYAN=' | ||
+ | NC=' | ||
+ | |||
+ | #Mode Debug Dhcp ? | ||
+ | DBG=" | ||
+ | DBG="" | ||
+ | |||
+ | |||
+ | #Regarde si l' | ||
+ | if [ $USER != " | ||
+ | then | ||
+ | echo -e $RED" | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | #Verifie si tous les modules sont bien installes | ||
+ | ifconfig=$(which ifconfig) | ||
+ | if [ $? != 0 ] | ||
+ | then | ||
+ | echo -e $RED" | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | hostapd=$(which hostapd) | ||
+ | if [ $? != 0 ] | ||
+ | then | ||
+ | echo -e $RED" | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | dnsmasq=$(which dnsmasq) | ||
+ | if [ $? != 0 ] | ||
+ | then | ||
+ | echo -e $RED" | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | dhcpd3=$(which dhcpd) | ||
+ | if [ $? != 0 ] | ||
+ | then | ||
+ | echo -e $RED" | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | macchanger=$(which macchanger) | ||
+ | if [ $? != 0 ] | ||
+ | then | ||
+ | echo -e $RED" | ||
+ | MACCHANGER=" | ||
+ | fi | ||
+ | |||
+ | #Change les @ MAC si macchanger trouve | ||
+ | if [ $MACCHANGER == " | ||
+ | then | ||
+ | echo -e $blue" | ||
+ | sudo $ifconfig $INT_WIFI down | ||
+ | sudo $macchanger --random $INT_WIFI $NC | ||
+ | fi | ||
+ | |||
+ | echo -e $blue" | ||
+ | sudo ifconfig $INT_WIFI down | ||
+ | sleep 0.5 | ||
+ | sudo ifconfig $INT_WIFI $IP netmask $MASK up | ||
+ | |||
+ | echo -e $blue" | ||
+ | # start hostapd server (see / | ||
+ | sudo hostapd / | ||
+ | sleep 1 | ||
+ | |||
+ | echo -e $blue" | ||
+ | # start dnsmasq server (see / | ||
+ | sudo dnsmasq -x / | ||
+ | sleep 1 | ||
+ | |||
+ | echo -e $blue" | ||
+ | # start or resart dhcpd server (see / | ||
+ | sudo touch / | ||
+ | #sudo mkdir -p / | ||
+ | #sudo chown dhcpd:dhcpd / | ||
+ | sudo dhcpd $DBG -f -pf / | ||
+ | #/ | ||
+ | sleep 2 | ||
+ | |||
+ | # Turn on IP forwarding (faire suivre les paquets d'une interface à l' | ||
+ | echo 1 > / | ||
+ | |||
+ | echo -e $blue" | ||
+ | # load masquerade module | ||
+ | sudo modprobe ipt_MASQUERADE | ||
+ | sudo iptables -A POSTROUTING -t nat -o $INT_NET -j MASQUERADE | ||
+ | |||
+ | echo -e $blue" | ||
+ | sudo iptables -A FORWARD --match state --state RELATED, | ||
+ | sudo iptables -A FORWARD -i $INT_WIFI --destination $SUBNET --match state --state NEW --jump ACCEPT | ||
+ | sudo iptables -A INPUT -s $SUBNET --jump ACCEPT | ||
+ | |||
+ | # Wait user interaction !!! | ||
+ | echo -e $redhl" | ||
+ | echo -e $redhl" | ||
+ | echo -e $redhl" | ||
+ | echo -e $redhl" | ||
+ | read none | ||
+ | |||
+ | |||
+ | echo -e $cyan" | ||
+ | # kill hostapd, dnsmasq & dhcpd | ||
+ | sudo killall hostapd dnsmasq dhcpd | ||
+ | echo -e $cyan" | ||
+ | sudo iptables -D POSTROUTING -t nat -o $INT_NET -j MASQUERADE 2>/ | ||
+ | sudo iptables -D FORWARD -i $INT_WIFI --destination $SUBNET --match state --state NEW --jump ACCEPT 2>/ | ||
+ | sudo iptables -D FORWARD --match state --state RELATED, | ||
+ | sudo iptables -D INPUT -s $SUBNET --jump ACCEPT 2>/ | ||
+ | |||
+ | echo -e $cyan" | ||
+ | # interface weak up! | ||
+ | sudo ifconfig $INT_WIFI down | ||
+ | sudo ifconfig $INT_WIFI up | ||
+ | |||
+ | # Turn off IP forwarding | ||
+ | echo 0 > / | ||
+ | echo -e $blue" | ||
+ | </ | ||
+ | |||
+ | Lancement : | ||
+ | |||
+ | < | ||
+ | ./ | ||
+ | </ | ||
+ | |||
+ | Si pendant l’exécution du script précédent vous obtenez l' | ||
+ | ", exécuter ou rajouter la commande suivante en début de script : | ||
+ | < | ||
+ | |||
+ | == Monitoring AP == | ||
+ | |||
+ | L' | ||
+ | < | ||
+ | watch -d -n 3 "iw dev wlan0 station dump; iwconfig wlan0; iwconfig mon.wlan0; iw dev wlan6 station dump; iwconfig wlan6;cat / | ||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ===== Liens ===== | ||
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | | ||
+ | ---- | ||
+ | // |