Appearance
Versuch WiFi AP Mode, tshark, arp
WiFi Access Point mit WPA 2
Im vorhergehenden Versuch, haben Sie sich mit dem Verbinden zu einem WiFi AP vom Target her befasst. Es ist allerdings beim Raspberry Pi auch möglich das WiFi selber als Access Point zu betreiben. Während es üblich ist einen AP mit WPA2 zu schützen errichten wir zuerst eine unverschlüsselte (offene) Netzwerkinfrastruktur.
Zusätzliche Pakete installieren
Verbinden Sie sich mit dem Internet, entweder zuhause via WiFi, via AP auf dem Mobiltelefon oder im Klassenraum mit dem Netz dnet
wie im Versuch: Wifi Managed oder alternativ via raspi-config
. Falls Sie alternativ Zuhause sind: Verwenden Sie Ihr Smartphone um einen Hotspotaufzusetzen und verbinden Sie sich mit diesem.
Probleme mit raspi-config
Falls Raspi-Config nicht mit wpa_supplicant
kommunizieren kann, stellen Sie sicher, dass eine config vorhanden ist
bash
cd /etc/wpa_supplicant
sudo cp wpa_supplicant.conf wpa_supplicant-wlan0.conf
sudo systemctl restart wpa_supplicant@wlan0.service
# status anschauen
sudo systemctl status wpa_supplicant@wlan0.service
# wlan Einstellungen bearbeiten via
sudo raspi-config
Installieren Sie folgende Pakete zusätzlich:
bash
sudo apt install iperf3 hostapd
iperf3
Mit iperf3
können Sie die Datenrate via TCP und UDP feststellen und so "Bottlenecks" im Netzwerk finden. Installieren Sie iperf3
auch für Ihr Hostsystem https://iperf.fr/iperf-download.php
Auf Windows, öffnen Sie den Ordner in der Command Line (cmd
) in dem Sie iperf3.exe
entpackt haben und führen dieses via
bash
./iperf3.exe
in einer BASH Shell oder via
bash
iperf3.exe
in einer Windows Shell aus.
Ethernet throughput testen
Auf dem target starten Sie iperf3 als server:
bash
iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Auf dem Host als client (Wichtig: In der git bash müssen Sie iperf ein ./
voranstellen, damit es ausgeführt werden kann).
Wechseln Sie mit cd ins Verzeichnis des entpackten iperf3.exe
. Folgende Commands sind in einer git bash (in einem Command Prompt .exe
dem iperf3
Command anhängen).
bash
# Dieser PFAD ist abhängig davon, wo iperf entpackt wurde
cd Downloads/<PFAD_ZU_IPERF_DOWNLOAD_DIR>
./iperf3 -c 192.168.50.1
Connecting to host 192.168.50.1, port 5201
[ 4] local 192.168.50.2 port 57778 connected to 192.168.50.1 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 25.2 MBytes 211 Mbits/sec 0 150 KBytes
[ 4] 1.00-2.00 sec 24.4 MBytes 204 Mbits/sec 0 150 KBytes
[ 4] 2.00-3.00 sec 24.4 MBytes 204 Mbits/sec 0 150 KBytes
[ 4] 3.00-4.00 sec 24.3 MBytes 204 Mbits/sec 0 150 KBytes
[ 4] 4.00-5.00 sec 24.4 MBytes 204 Mbits/sec 0 150 KBytes
[ 4] 5.00-6.00 sec 24.2 MBytes 203 Mbits/sec 0 150 KBytes
Aufgabe
Messen Sie Ihren maximalen Throughput. Vergleichen Sie Ihre Resultate mit dieser Quelle https://www.raspberrypi.org/magpi/raspberry-pi-4-specs-benchmarks/.
Open Access Point (keine Authentifizierung)
Für das erstellen eines AP verwenden wir hostapd
auf dem Target. Hierfür legen wir eine config im Homeverzeichnis an.
Im Samba Share, öffnen Sie ein File in Visual Studio Code (... oder Ihrem favorisierten Editor) accesspoint-open.conf
.
SSID
Die SSID bezeichnet Ihren Access Point, falls Sie den Versuch im Lab durchführen verwenden Sie von Vorteil einen einzigartigen Namen.
interface=wlan0
driver=nl80211
ssid=dnet-open
hw_mode=g
channel=7
wmm_enabled=0
auth_algs=1
Probleme mit Config file (Driver not found)
Falls Sie das File unter Windows editieren, stellen Sie sicher, dass Zeilenumbrüche als \n
oder LF
(Linefeed) erstellt werden (Option bei Notepad++ / VS Code).
-VS Code Ändern Sie in der unteren Statusbar "Line Ending" von CRLF
nach LF
.
Im Zweifelsfall verwenden Sie am besten nano
.
Starten Sie auf dem Target den hostapd
.
bash
sudo hostapd accesspoint-open.conf
Configuration file: accesspoint-open.conf
Failed to create interface mon.wlan0: -95 (Operation not supported)
wlan0: Could not connect to kernel driver
Using interface wlan0 with hwaddr b8:27:eb:d3:02:2c and ssid "dnet-open"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
An dieser Stelle ist Ihr Terminal wieder besetzt. Sie können den Access-Point hierzu wieder beenden mit CTRL-C
oder alternativ in den Hintergrund befördern mittels CTRL-Z
und anschliessendem bg
.
Alternativ können Sie den hostapd
service im Hintergrund starten (mit einem Anfügen von &
am Ende der Zeile).
bash
# überprüfen Sie den status von wlan0
iwconfig wlan0
wlan0 IEEE 802.11 ESSID:"dnet"
Mode:Managed Frequency:2.412 GHz Access Point: 7C:FF:4D:6F:EC:E3
Bit Rate=65 Mb/s Tx-Power=31 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:on
Link Quality=65/70 Signal level=-45 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
# wpa_supplicant ausschalten
# da wir jetzt in den AP - Modus wechseln möchten
sudo systemctl stop wpa_supplicant@wlan0.service
# überprüfen wie der status ist
iwconfig wlan0
wlan0 IEEE 802.11 ESSID:off/any
Mode:Managed Access Point: Not-Associated
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:on
# sicherstellen, dass kein weiterer hostapd gestartet ist
sudo killall hostapd
sudo hostapd -B accesspoint-open.conf
sudo systemctl restart dnsmasq
Aufgabe
- Wie beenden Sie den im Hintergrund gestarteten
hostapd
? - Konfigurieren Sie für das Interface
wlan0
die IP192.168.60.1/24
. - Konfigurieren Sie die statische IPv4 Adresse
192.168.60.2/24
auf demwlan
Interface Ihres Hosts. - Messen Sie nun mit
iperf3
den Datendurchsatz über WiFi. Falls es Probleme mit der Verbindung gibt, tauschen Sie die server / client voniperf3
aus. - Vergleichen Sie Ihre Resultate mit dieser Quelle https://www.raspberrypi.org/magpi/raspberry-pi-4-specs-benchmarks/.
WiFi 802.11n
Erstellen Sie eine zweite Konfiguration accesspoint-open-n.conf
mit folgendem Inhalt und starten Sie hostapd
:
bash
interface=wlan0
driver=nl80211
ssid=dnet-open
hw_mode=a
channel=36
wmm_enabled=1
auth_algs=1
ieee80211n=1
ieee80211ac=1
ht_capab=[HT40+]
WiFi 802.11ac
Noch schnellere Geschwindigkeiten können mit dem ac Standard erzielt werden:
bash
interface=wlan0
driver=nl80211
ssid=dnet-open
hw_mode=a
channel=36
wmm_enabled=1
auth_algs=1
ieee80211n=1
ieee80211ac=1
ht_capab=[MAX-AMSDU-3839][HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]
require_vht=1
ieee80211d=0
ieee80211h=0
vht_capab=[MAX-AMSDU-3839][SHORT-GI-80]
#vht_oper_chwidth=1
#vht_oper_centr_freq_seg0_idx=42
WPA 2 Verschlüsselung
Offene WLAN Netze sind ungesichert, erstellen Sie eine WPA2 Konfiguration:
bash
interface=wlan0
driver=nl80211
ssid=dnet-secure
hw_mode=a
channel=36
wmm_enabled=1
auth_algs=1
ieee80211n=1
ieee80211ac=1
ht_capab=[MAX-AMSDU-3839][HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]
require_vht=1
ieee80211d=0
ieee80211h=0
vht_capab=[MAX-AMSDU-3839][SHORT-GI-80]
#vht_oper_chwidth=1
#vht_oper_centr_freq_seg0_idx=42
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=<Passwort hier>
Schreiben Sie obige config wie gehabt in ein File ap-secure.conf
und starten Sie hostapd
.
DHCP, IP Adressen dynamisch vergeben
Bis anhin haben Sie IP Adressen statisch einem Netzwerkinterface hinzugefügt. Das wird vor allem dann kompliziert, wenn Sie mehrere Hosts im Netz haben, welche sich regelmässig an- und abmelden. Richtigerweise müssten Sie jedem Host eine einmalige Adresse hinzufügen, dies hat zwei entscheidende Nachteile:
- Hosts welche nicht verbunden sind besetzten eine IP-Adresse (das Netz hat so weniger Adressierungskapazität)
- Bevor ein Host sich verbinden kann, muss eine Adresse von Hand zugewiesen werden.
DHCP ist ein Service (auf Layer 7, Applikation), welcher IP-Adressen dynamisch verteilt.
DHCP hat stellt für Clients folgende Dienstleistungen zur Verfügung:
- IP Adresse und Subnetz werden konfiguriert
- Default Gateway wird konfiguriert
- DNS werden konfiguriert
Auf Linux finden Sie hierzu zwei verschiedene Komponenten.
- DHCP Client (
dhcpcd
) - DHCP Server (
dnsmasq
)
DHCP Server Config
Installieren Sie dnsmasq
:
bash
sudo apt install dnsmasq
Erstellen Sie das File /etc/dnsmasq.conf
:
bash
interface=wlan0 # Use the require wireless interface - usually wlan0
dhcp-range=192.168.40.17,192.168.40.157,255.255.255.0,24h
dnsmasq
ist der service, welcher beides DNS und DHCP zur Verfügung stellt.
Starten Sie Ihren Access Point mit hostapd
(am besten mit der -B
option) und führen Sie folgenden Command aus um den DHCP Server einzuschalten:
bash
# dnsmasq service starten
sudo systemctl start dnsmasq
# passende IP für wlan0
sudo ifconfig wlan0 192.168.40.1/24
Verbinden Sie nun Ihr Host System oder Smartphone mit dem Access Point und stellen Sie sicher, dass die IP-Adress nicht mehr statisch gesetzt, sondern dynamisch bezogen wird.
Verbinden via WiFi über 802.1X
Um Pakete nachzuinstallieren, verbinden Sie sich via 802.1X
mit dem WLAN eduroam
.
Beispielconfig für den WPA-Supplicant:
bash
network={
ssid="eduroam"
key_mgmt=WPA-EAP
eap=PEAP
identity="fhnw-emailadresse"
password="fhnw-passwort"
phase1="peaplabel=0"
phase2="auth=MSCHAPV2"
}
dhcp ausschalten
Bevor Sie sich mit wpa_supplicant
verbinden, stellen Sie sicher, dass dnsmasq
ausgeschaltet ist, um keine DHCP leases auszugeben.
bash
sudo systemctl stop dnsmasq
Verbinden Sie sich wie in den vorhergehenden Veruschen mittels wpa_supplicant
.
tshark
Im Standardsetup der Versuche verwenden Sie eth0
vom Target als direkte Brücke zum Host, üblicherweise mit der Adresse 192.168.50.1
und beim Host 192.168.50.2
.
Mit Wireshark auf dem Host, ist es so also unmöglich Packets und Frames auf eth1
und wlan0
des Targets zu sniffen. Jedoch wären genau diese Interfaces sehr interessant zu beobachten.
Zu Hilfe kommt ein Terminal basiertes Tool tshark
(Wireshark auf dem Terminal). Allerdings verlieren wir so einige Features, welches der "volle" Wireshark via GUI zur verfügung stellt.
In diesem Versuch verwenden wir beide tools Wireshark
und tshark
um Auf dem Host interfaces des Targets beobachten zu können.
Wireshark auch im Terminal. Das Programm tshark
erlaubt es Ihnen auf dem Target Packete und Frames abzufangen und anzuzeigen.
Verbinden Sie sich via SSH zum target (unter Windwos mit Putty).
Installieren Sie tshark
auf dem target:
bash
sudo apt install tshark
Führen Sie tshark aus:
bash
sudo tshark
Es wäre natürlich wünschenswert, die Ausgabe von tshark an unseren Host weiterzugeben und im vollumfänglichen GUI anzuzeigen. Hierzu können wir die Ausgabe von tshark
binär anzeigen und weiterleiten.
bash
sudo tshark -w -
Brechen Sie den Command mit CTRL + C
ab.
Die Ausgabe kann so wireshark "gefüttert" werden.
Git / SSH installieren (Windows)
Auf Ihrerm Windows Host, installieren Sie (falls nicht bereits vorhanden) GIT https://git-scm.com/downloads und stellen sicher, dass Sie auch die bash
Shell mitinstallieren (diese erlaubt es Ihnen den binären stream von tshark
Wireshark zu übergeben).
Wireshark über SSH
In den vorherigen Versuchen haben Sie bereits Wireshark kennengelernt. Gerade das filtern und folgen von Streams auf Ebene Transport und Application wird durch das GUI erleichtert.
Starten Sie eine "Git Bash" und verbinden Sie sich mit dem SSH command mit dem target über Ethernet.
bash
ssh pi@192.168.50.1
Falls das klappt, loggen Sie sich wieder aus der interaktiven Shell aus mit CTRL + D
.
Starten Sie direkt tshark:
bash
ssh pi@192.168.50.1 -t "sudo tshark"
tshark
gibt nun direkt die ausgabe auf dem terminal aus. Allerdings werden Sie jetzt sehr viel Traffic auf Port 22 sehen.
Aufgabe
Warum sehen Sie traffic auf Port 22?
Beenden Sie den task mit CTRL + C
.
Filtern Sie nun Port 22 mit tashrk raus.
thsark filter
Wie könne Sie Port 22 rausfiltern? Schauen Sie sich die man
page von tshark
an.
Wireshark mit tshark füttern (Shark feeds Shark).
Fürhen Sie folgenden Command aus um tshark caputres im Binärformat auf der BASH auszugeben:
bash
ssh pi@192.168.50.1 "sudo tshark -w -"
Brechen Sie den command ab. Jetzt starten und füttern Sie wireshark mit dem Pipe command |
:
bash
ssh pi@192.168.50.1 "sudo tshark -w -" | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -
Aufgabe
Filtern Sie in tshark zuerst SSH raus und hören Sie auf alle interfaces.
Traffic verfolgen
Im folgenden Teil verfolgen Sie traffic bestimmter Protokolle:
DHCP
Suchen Sie nach DHCP traffic. Tipp, welches Protokoll braucht DHCP? Welche anderen Parameter? Können Sie DHCP Packets selber auf eth1
erzeugen? (Auf eth0
wäre das problematisch ... warum?)
ARP
Wie könne Sie einen ARP request forcieren? Filtern Sie nach "ARP" in Wireshark.
ICMP
Forcieren Sie ein ICMP Packet. Wie können Sie ein solches erzeugen?