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 01/11/2011, 10:29] – uwf DEFAULT_FORWARD_POLICY 88.174.253.195 | 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:// | ||
| + | | ||
| + | ---- | ||
| + | // | ||
