Differences

This shows you the differences between two versions of the page.

Link to this comparison view

isrm:laboratoare:11 [2019/05/16 19:30]
dragos.niculescu
isrm:laboratoare:11 [2019/05/17 16:25] (current)
mbarbulescu
Line 1: Line 1:
 ==== Laboratorul 11 ==== ==== Laboratorul 11 ====
  
-Experimente:​+Acest laborator este o introducere în crearea unui setup practic AP (access point) - STA (stație) folosind calculatoarele din PR706. Acestea au montate pe PCI placa Wifi Intel AC7260 care suportă dual band 2.4GHz/5GHz și 802.11a/​b/​g/​n/​ac (Legacy/​HT/​VHT). Calculatoarele fiind dotate cu Linux ne vom folosi de utilitarele userspace pentru a ne crea infrastructura. ​
  
-Calculatoarele ​AP:+În acest laborator vom lucra în echipe de minim 2 studenți, maxim 3.  
 + 
 + 
 +=== Pregătirea access pointului (AP) === 
 + 
 +Pentru a putea porni cu succes daemon-ul de AP trebuie rulate următoarele comenzi (ca ''​root''​). Puteți rula un ''​sudo su''​ înainte. ​
  
 <code bash> <code bash>
-nmcli radio wifi off +root@pr706-pc:​~# ​nmcli radio wifi off 
-rfkill unblock wifirfkill unblock all +root@pr706-pc:​~# ​rfkill unblock wifi 
-killall wpa_supplicant+root@pr706-pc:​~# ​rfkill unblock all 
 +root@pr706-pc:​~# ​killall wpa_supplicant 
 +</​code>​
  
-root@pr706-pc:/​home/student# hostapd /​etc/​hostapd/​hostapd.conf+S-ar putea ca ''​NetworkManager''​ din Ubuntu încă se ne încurce așa că recomandăm oprirea lui. Dacă pierdeți accesul la internet rulați dhclient pe ''​eno1'':​ 
 + 
 +<code bash> 
 +root@pr706-pc:​~# systemctl stop NetworkManager 
 +root@pr706-pc:​~#​ dhclient eno1    #doar daca nu mai avem conectivitate la Internet 
 +</code> 
 + 
 +Acum trebuie să pornim daemonul ''​hostapd''​ pentru a activa AP-ul nostru. E nevoie de doi pași simpli: 
 +  - Copiați fișierul [[https://​github.com/​isrm-lab/​isrm-lab-sol/​blob/​master/​lab-11/​hostapd.conf|hostapd.conf de aici]], salvați-l în ''/​etc/​hostapd/​hostapd.conf''​ 
 +  - Rulați comanda de mai jos, output-ul trebuie să vă spună ''​AP-ENABLED'':​ 
 + 
 +<code bash> 
 +root@pr706-pc:​~# hostapd /​etc/​hostapd/​hostapd.conf
 Configuration file: /​etc/​hostapd/​hostapd.conf Configuration file: /​etc/​hostapd/​hostapd.conf
 Using interface wlp2s0 with hwaddr ac:​fd:​ce:​22:​77:​9d and ssid "​ISRMLABORATOR"​ Using interface wlp2s0 with hwaddr ac:​fd:​ce:​22:​77:​9d and ssid "​ISRMLABORATOR"​
 wlp2s0: interface state UNINITIALIZED->​ENABLED wlp2s0: interface state UNINITIALIZED->​ENABLED
 wlp2s0: AP-ENABLED ​ wlp2s0: AP-ENABLED ​
- 
 </​code>​ </​code>​
  
-Calculatoarele STA:+<note warning>​ 
 +Recomandăm tuturor echipelor de studenți să schimbe ''​ssid=ISRMLABORATOR''​ din ''​hostapd.conf''​ pentru a evita conectarea accidentală la AP-ul altora. Puneți orice SSID doriți.  
 +</​note>​
  
-<code bash> +== Modul monitor ==  
-killall wpa_supplicant+ 
 +<note warning>​Pe Intel AC7260 care sunt in laborator merge modul monitor doar pe AP. Recomandarea însă pentru a prinde toate pachetele din aer e să fie făcut pe un calculator separat</​note>​ 
 + 
 +<code bash>  
 +root@pr706-pc:​~#​ iw phy phy0 interface add mon0 type monitor flags control otherbss 
 +root@pr706-pc:​~#​ ifconfig mon0 up 
 +root@pr706-pc:​~#​ tcpdump -s0 -ni mon0 
 </​code>​ </​code>​
 +  - ''​-s0''​ capturează toată lungimea pachetelor ​
 +  - ''​-n''​ nu rezolvă DNS 
 +  - ''​-i''​ indică interfața ​
  
-Daca nu se da aia de mai sus apare deauthentication aiurea+<code bash>  
 +root@pr706-pc:​~#​ tcpdump -s0 -ni mon0 -w ./m.pcap  
 +root@pr706-pc:​~#​ wireshark ./m.pcap  
 +</​code>​
  
-Primul exemplu de hostapd conf file: https://gist.github.com/​b12mihai/​c61374219ffc2b2647c6afd7a99f21f1+Examinați pachetele capturate și recunoașteți pachetele/protocoalele/câmpurile discutate la curs și în articole.
  
-Apoi hai sa punem in modul 802.11n in hostapd:+<note tip> 
 +Comenzile de Linux pentru ​modul monitor le aveți și la [[https://​sandilands.info/​sgordon/​capturing-wifi-in-monitor-mode-with-iw 
 +|acest link]] 
 +</​note>​ 
 + 
 + 
 +=== Pregătirea stației (STA) === 
 + 
 +Și aici trebuie oprite ''​NetworkManager''​ și ''​wpa_supplicant''​. Vom folosi întâi utilitarul ''​iw''​ apoi ''​wpa_supplicant''​ cu propriul fișier de configurare pentru a ne conecta la AP:
  
 <code bash> <code bash>
-802.11n +root@pr706-pc:​~systemctl stop NetworkManager 
-wmm_enabled=1 +root@pr706-pc:~# killall wpa_supplicant
-ieee80211n=1 +
-ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40][DSSS_CCK-40][DSSS_CCK-40]+
 </​code>​ </​code>​
  
-Apoi hai sa punem autentificare cu wpa2+Pentru a face o scanare activă (asigurați-vă că folosiți modul monitor și capturați pachetul - ce tip de pachet va trimite stația?) rulați comanda:
  
 <code bash> <code bash>
-WPA +root@pr706-pc:​~iw dev wlp2s0 scan | grep -i <​yourSSID>​ -A 50 -B 20
-auth_algs=1 +
-wpa=2 +
-wpa_passphrase=XXXXXXXXXXXXXXX +
-wpa_key_mgmt=WPA-PSK +
-wpa_pairwise=TKIP +
-rsn_pairwise=CCMP+
 </​code>​ </​code>​
  
-== Modul monitor ==  +Pentru a vă asocia la AP-ul pornit anterior folosiți:
-<code shell> # iw phy phy0 interface add mon0 type monitor flags control otherbss </​code>​  +
-<code shell> # ifconfig mon0 up </​code>​ +
-<code shell> # tcpdump -s0 -ni mon0 </​code>​ +
-  -s0 capturează toată lungimea pachetelor  +
-  -n nu rezolvă DNS  +
-  ​-i indică interfața ​+
  
-<​code ​shell> # tcpdump -s0 -ni mon0 -w ./​m.pcap ​</code+<​code ​bash> 
-<code shell> ​wireshark ./m.pcap ​</​code>​+root@pr706-pc:​~iw dev wlp2s0 connect ​<yourSSID>  
 +root@pr706-pc:​~#​ iwconfig ​        #to check/validate association 
 +</​code>​
  
-examinați pachetele capturate ​și recunoașteți câmpurile ​+=== Exerciții extra === 
 +  - Rulați o sesiune ''​iperf''​ TCP între cele două stații pentru a determina bandwidth-ul maxim la care TCP se simte bine. Serverul este receptor de date, Clientul e transmițător. Rulați server pe AP și client pe STA. Ce valoare are aceasta? Suntem în ''​802.11b'',​ care e throughput maxim la acesta ​și la ce MCS (data rate)? 
 +<code bash> 
 +root@pr706-pc:​~#​ iperf -s -i1 
 +root@pr706-pc:​~#​ iperf -c <​ip_AP>​ 
 +</​code>​ 
 +  - Rulați o sesiune ''​iperf''​ UDP între cele două stații cu cel mai mare packet length (1472 Bytes). Serverul este receptor de date, Clientul e transmițător. Rulați server pe AP și client pe STA. e valoare are aceasta? Suntem în ''​802.11b'',​ care e throughput maxim la acesta și la ce MCS (data rate)? 
 +<code bash> 
 +root@pr706-pc:​~#​ iperf -s -i1 -u 
 +root@pr706-pc:​~#​ iperf -c <​ip_AP>​ -b54M -u -i1 -l1472 
 +</​code>​ 
 +  - Pentru exercițiile anterioare urmăriți în PCAP câmpul ''​Data rate''​ din 802.11 radio tap header. Ce observați? Ce se întâmplă cu acesta dacă vom mișca antena? 
 +<note tip> 
 +Dacă nu mișcăm antenele observăm creșterea monotonă data rate (a MCS-ului) grație algoritmului de rate adaption. Intel folosește [[https://​github.com/​torvalds/​linux/​blob/​master/​drivers/​net/​wireless/​intel/​iwlwifi/​dvm/​rs.c|iwl-agn-rs]]. În Linux upstream se folosește algoritmul [[https://​wireless.wiki.kernel.org/​en/​developers/​documentation/​mac80211/​ratecontrol/​minstrel|Minstrel]] pentru vendorii care nu au dezvoltat propriul algoritm în driver/​firmware.
  
 +Dacă mișcăm antenele pe lângă evoluție ne-monotonă a data rate throughputul iperf e afectat. ​
 +</​note>​
 +  - Pe AP configurați ''​802.11n''​ (ca extra feature). Re-rulați iperf și urmăriți PCAP-urile. Ce apare în plus la MCS? Dar la frame format: apare formatul HT. Mai jos aveți ce trebuie pus în ''​hostapd.conf'':​
 +<code bash>
 +# 802.11n
 +wmm_enabled=1
 +ieee80211n=1
 +ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40][DSSS_CCK-40][DSSS_CCK-40]
 +</​code>​
  
-Linkuri: 
- 
-https://​vincent.bernat.ch/​en/​blog/​2014-intel-7260-access-point 
-https://​sandilands.info/​sgordon/​capturing-wifi-in-monitor-mode-with-iw 
-https://​wireless.wiki.kernel.org/​en/​users/​documentation/​hostapd 
  
 <​hidden>​ <​hidden>​
isrm/laboratoare/11.txt · Last modified: 2019/05/17 16:25 by mbarbulescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0