enable wireless

Z DCEwiki
Verze z 23. 2. 2024, 10:36, kterou vytvořil Keny (diskuse | příspěvky) (založena nová stránka s textem „<noinclude>Kategorie:Diskless (RAM disk)</noinclude> Jde o klíčový skript, protože na úspěšném nahození Wi-Fi závisí skript nfsroot, který si bez síťové konektivity nemůže stáhnout konfigurační soubor. == Princip == Po zavedení ovladačů síťových zařízení, ve fázi init-premount, provede skript detekci existujících zařízení, schgopných poskytnout síťovou konektivitu. Jako první testuje ethernet. Pokud zji…“)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání

Jde o klíčový skript, protože na úspěšném nahození Wi-Fi závisí skript nfsroot, který si bez síťové konektivity nemůže stáhnout konfigurační soubor.

Princip

Po zavedení ovladačů síťových zařízení, ve fázi init-premount, provede skript detekci existujících zařízení, schgopných poskytnout síťovou konektivitu.

Jako první testuje ethernet. Pokud zjistí, že má uplink (tj. je-li do něj zasunutý ethernetový kabel, který vede do switche) pokusí se získat přes DHCP síťovou konfiguraci.

A když uplink nemá, nebo na ethernetovém připojení neběží žádný DHCP server, jde to zkusit přes Wi-Fi

  1. Nejprve nahodí aplikaci wpa_supplicant
  2. Pak se pokusí získat adresu přes aplikaci dhclient
  3. A teprve když se mu to povede, zavolá funci network_configure, která zajistí vygenerování souboru se kterým bude pracovat skript nfsroot a jiné.

Přejmenování

# hostnamectl set-hostname bullseye

Vytvoření ramdisku s podporou Wi-Fi

Při vytvoření ramdisku s podporou Wi-Fi jsem postupoval podle webové stránky Marka Fargase. Bohužel se ukázalo, že uvedený postup pro připojení přes WPA2 nestačí.

Upozornění Aby fungovalo ověřování přes WPA2, musí mít wpa_supplicant k dispozici další dva jaderné moduly: ccm a ctr[1]. Bez nich funguje pouze anonymní připojení.

busybox

Soubor /etc/initramfs-tools/hooks/enable-wireless, je spustitelný skript, který spustí příkaz update-initramfs -u při sestavení ramdisku. Skript se postará o nakopírování potřebných modulů, utilit, knihoven a konfiguračních souborů pro nahození wi-fi, tak aby byly splněny všechny potřebné závislosti.

#!/bin/sh
set -e
PREREQ=""
prereqs(){
   echo "${PREREQ}"
}
case "${1}" in
   prereqs)
      prereqs
      exit 0
      ;;
esac
. /usr/share/initramfs-tools/hook-functions
manual_add_modules cfg80211 mac80211 iwlwifi iwlmvm ccm ctr
copy_exec /bin/ip
copy_exec /sbin/wpa_supplicant
copy_exec /sbin/wpa_cli
copy_exec /sbin/dhclient
copy_exec /sbin/dhclient-script
copy_file config /etc/initramfs-tools/wpa_supplicant.conf /etc/wpa_supplicant.conf

V tomto ukázkovém skriptu je uvedena pouze je minimální sada nástrojů potřebná k rozběhání připojení přes wifi na turtlebotu. Na většinu ostatních věcí stačí příkazy, které jsou součástí busyboxu. V souvislosti s připojením se ale mohou vyskytnout různé problémy, proto není od věci si do ramdisku přidat i užitečné nástroje, které umožní testování kvality síťového připojení či testování blokového zařízení:

Utilita Inst. balík Použití Kolik přidá na objemu ramdisku
ip iproute2 Příkaz ip, se kterým pracuje busybox má omezené konfigurační možnosti, proto se k nastavení sítě v našem případě používá plnotučný nástroj ip
iwconfig wireless-tools Příkaz iwconfig je užitečný v pokud si nejste jisti zda wpa_supplicant navázal spojení. S jeho pomocí totiž můžete zjistit aktuální nastavení vašeho zařízení, nebo zda-li došlo k připojení. Pokud si přidáte i nástroj iwlist, který je ve stejném instalačním balíku, tak si můžete vypsat i parametry sítí, které vaše wifi "vidí".
dhclient isc-dhcp-client Standardně se pro nastavení sítě v ramdisku používá tzv. mikro klient udhcp. Ovšem v našem případě získanou adresu nebyl schopen nastavit, proto je lepší použít "plnotučného" DHCP klienta.
ping iputils-ping Nástroj ping vám umožní rychle zjistit zda-li stroj na druhé straně sítě žije. V nouzi místo něj můžete použít telnet, když po otevření portu na druhé straně odklepnete GET
arping iputils-arping -
tracepath iputils-tracepath -
termshark termshark Je GUI rozhraní pro tshark, což terminálová verze utility wireshark, která vám umožní zachytávat síťové pakety na vaší wi-fi. Je to jediné místo, kde můžete zjistit co běhá vzduchem mezi AP a vaším klientem, protože komunikace mezi nimi je jinak šifrovaná.
nc iputils-ping -
tcpdump tcpdump
netstat net-tools Umožňuje zjistit jaké jsou aktuálně otevřené porty.
Poznámka Busybox, který běží v ramdisku by default podporuje řadu příkazů, pro které v "plnotučném" systému může existovat samostatná utilita. Pokud ji do ramdisku přes tento skript nakopírujete, tak se použije přednostně.

Obsah souboru /etc/initramfs-tools/wpa_supplicant.conf

network={
        ssid="jmenowifi"
        #psk="heslowifi"
        psk=989c6426c04864f7f386d12ca3bb776131d5eece0860c6c84f1ce2e1d3bac5ec
}
Poznámka K vygenerování obsahu tohoto souboru můžete použít utilitu wpa_passphrase, která je součástí instalačního balíku wpasupplicant. Řetězec 'psk' se vygeneruje kombinací 'ssid' a plain hesla 'psk'.

Sledování provozu na Wi-Fi síti

Jak se jmenuje wifi zařízení a případně jakou má adresu lze zjistit přes ip

~# ip addr show

Síla signálu

Jaký je stav signálu na Wi-Fi zjistíme ze souboru /proc/net/wireless. Následující příkaz vypisuje jeho obsah ve vteřinovém intervalu

~$ watch -n 1 cat /proc/net/wireless

Pokud nás z toho zajímá pouze síla signálu, můžeme použít tohle:

~$ watch -n 1 "awk 'NR==3 {print \"WiFi Signal Strength= \" \$3 \"00 %\"}' /proc/net/wireless"

Probíhá vůbec síťová komunikace?

Pro rychlé zjištění jestli na zařízení wlp1s0 nějaká komunikace vůbec probíhá, stačí tcpdump. Pokud nás zajímá jen konkrétní adresa, kupř. to co vrací DHCP server, můžeme si vyfiltrovat pouze pakety s jeho adresou:

~# tcpdump -i wlp1s0 -s 0 host 192.168.210.5
adresa - IPv4 resp. IPv6 adresa
maska - maska
rozsah -
dst net adresa
src net adresa
net adresa
net adresa mask maska
net adresa/rozsah

termshark

Pro sofistikovanější monitoring, kdy potřebujeme nahlédnout do paketů lze použít termshark. Klientská stanice je totiž jediným místem, na kterém se dá sledovat síťová komunikace, která probíhá přes Wi-Fi. Mezi NUCem přes AP až po kontroler, který ho spravuje ji nelze sledovat, protože je šifrovaná.

Pokud jsme na klientskou stanici připojeni přes SSH, tak je vhodné odfiltrovat vlastní komunikaci. To můžeme udělat kupř. tak, že odfiltrujeme svoji MAC sdresu:

~# termshark -i wlp1s0 -f "not ether host 9a:5d:9c:ee:11:a0"

Ale pokud nás SSH provoz nezajímá můžeme odfiltrovat rovnou veškerou komunikaci která probíhá přes port 22:

~# termshark -i wlp1s0 -f "not port 22"

Filtry se dají také řetězit:

… -f "not ip.addr == xxx.x.xx.xxx and not ip.src == xxx.x.xx.xx and not mac == xx-xx-xx-xx-xx-xx and not mac == xx-xx-xx-xx-xx-xx and not ip == xxx.x.x.x and not ip.dst == xxx.x.xx.xxx and not ip.src == xxx.x.xx.xxx"


Verze

Po potřebu TurtleBotů od září 2019.

  1. Trvalo téměř týden, než jsme na to díky Marku Beliškovi přišli.