This shows you the differences between two versions of the page.
isrm:laboratoare:11 [2019/05/16 20:37] mbarbulescu |
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 wifi; rfkill 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 | + | |
- | iw dev wlp2s0 scan | grep -i <yourSSID> -A 50 -B 20 | + | <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> |
- | iw dev wlp2s0 connect <yourSSID> | + | <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> | ||
+ | - ''-s0'' capturează toată lungimea pachetelor | ||
+ | - ''-n'' nu rezolvă DNS | ||
+ | - ''-i'' indică interfața | ||
- | iwconfig #to check association | + | <code bash> |
+ | root@pr706-pc:~# tcpdump -s0 -ni mon0 -w ./m.pcap | ||
+ | root@pr706-pc:~# wireshark ./m.pcap | ||
</code> | </code> | ||
- | Daca nu se da aia de mai sus apare deauthentication aiurea | + | Examinați pachetele capturate și recunoașteți pachetele/protocoalele/câmpurile discutate la curs și în articole. |
- | Primul exemplu de hostapd conf file: https://gist.github.com/b12mihai/c61374219ffc2b2647c6afd7a99f21f1 | + | <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> | ||
- | Apoi hai sa punem in modul 802.11n in hostapd: | + | |
+ | === 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: |
- | <note warning>Pe Intel AC7260 care sunt in laborator merge modul monitor doar pe AP</note> | + | <code bash> |
+ | root@pr706-pc:~# iw dev wlp2s0 connect <yourSSID> | ||
+ | root@pr706-pc:~# iwconfig #to check/validate association | ||
+ | </code> | ||
- | <code shell> # iw phy phy0 interface add mon0 type monitor flags control otherbss </code> | + | === Exerciții extra === |
- | <code shell> # ifconfig mon0 up </code> | + | - 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 shell> # tcpdump -s0 -ni mon0 </code> | + | <code bash> |
- | - -s0 capturează toată lungimea pachetelor | + | root@pr706-pc:~# iperf -s -i1 |
- | - -n nu rezolvă DNS | + | root@pr706-pc:~# iperf -c <ip_AP> |
- | - -i indică interfața | + | </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. | ||
- | <code shell> # tcpdump -s0 -ni mon0 -w ./m.pcap </code> | + | Dacă mișcăm antenele pe lângă evoluție ne-monotonă a data rate throughputul iperf e afectat. |
- | <code shell> # wireshark ./m.pcap </code> | + | </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'': | |
- | examinați pachetele capturate și recunoașteți pachetele/protocoalele/câmpurile discutate la curs și în articole. | + | <code bash> |
- | + | # 802.11n | |
- | + | wmm_enabled=1 | |
- | Linkuri: | + | ieee80211n=1 |
+ | ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40][DSSS_CCK-40][DSSS_CCK-40] | ||
+ | </code> | ||
- | 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> |