Benutzer:Emploi

Aus Freifunk Dresden - Anwender-Wiki
Zur Navigation springen Zur Suche springen

Verwaltung

Gateways:

Node VPN Hoster Exit Protokoll
2 3 Hetzner Wireguard OVPN DE
51001 it4r Max Wireguard Mullvad DE

Inventar

Node Typ Ort
1727 TP-Link 941v6
1880 TP-Link 941v6
1852 TP-Link 841v9
1527 TL-WA801N/ND v2
1922 TP-Link 841v9
2167 TP-Link 841v8
1166 TP-Link 841v8
1712 TL-WR941N/ND v5
1057 TP-Link 1043v2
2168 AVM FRITZ!Box 7312
1144 Xiaomi Mi Router 4A Gigabit
1271 Xiaomi Mi Router 4A Gigabit Kö 59

Gateways

Adresse Betreiber IP
vpn3.freifunk-dresden.de Mirko 10.200.0.3

Andere Projekte

BOINC im Team Planet 3DNow!. Statistiken

OSM, Mapperstats Heatmap

Spickzettel

Datei mit bestimmten Inhalt finden

find -type f -exec grep -q -i '100.200.xxxxx'  '{}' \; -print

Speedtest zwischen Knoten:

Router:

alt: /usr/lib/ddmesh/ddmesh-nuttcp.sh 10.200.x.y

Server:

iperf3 -c 10.200.x.y
alt: [watch] /usr/bin/ddmesh-nuttcp.sh 10.200.x.y

Speedtest

Testfile zum Knoten laden (auf Server und Router mit Internetkabelverbindung erfolgt das ohne VPN) und verwerfen:

wget -O /dev/null http://speedtest.wdc01.softlayer.com/downloads/test10.zip (10MByte)

20x

for i in $(seq 20); do wget -O /dev/null "http://speedtest.dal01.softlayer.com/downloads/test100.zip" >>/dev/null; done

unter Nutzung eines bestimmten Interface

curl --interface xxx "http://speedtest.dal01.softlayer.com/downloads/test100.zip" > /dev/null

bmxd

bmxd -c --gateways
verfügbare Gateways
bmxd -c -p 10.200.x.y
bevorzugtes Gateway auswählen
bmxd -cid8
Übersicht
bmxd -c -r [****]
Routingclass, sofern es kein bevorzugtes Gateway gibt oder jenes ausgefallen ist:
*0 kein Tunnel, default route
*1 Permanent das „schnellste“ Gateway, basierend auf Ankündigung des Gateways
*2 Permanent das stabilste Gateway, basierend auf den Messergebnissen des Protokolls
*3 Dynamisch Umschaltung auf das stabilste Gateway (siehe auch "gateway_hysteresis", in der Hilfe)

Doku

B.A.T.M.A.N. daemon - https://www.open-mesh.org/projects/batmand/wiki/Doc-overview

Server

Server mit anderem Server per festd verbinden:

/etc/init.d/S53backbone-fastd2 add_connect vpnx.freifunk-dresden.de 5002 pubkey

Keys liegen unter

/etc/fastd/peers (alt) oder /etc/fastd/peers2 (aktuell)

Banana PI M2 Berry

Temperatur:

while :; do clear; cat /sys/devices/virtual/thermal/thermal_zone0/temp; sleep 1; done

Frequenzen:

cat /sys/devices/system/cpu/cpufreq/all_time_in_state

Status:

sdir=/sys/devices/system/cpu/cpu ; sfil='/cpufreq/stats/ti*' ; stemp=/sys/devices/virtual/thermal/thermal_zone0/temp; while :; do clear;  grep 'model\|Bogo\|proc' /proc/cpuinfo | tail -n 3; echo TemperaturIn°C; cat $stemp; for ((i=0;i<4;++i)); do echo cpu$i; cat $sdir$i$sfil; done; sleep 2; done

Router neu einrichten

Expert->System->

Bevorzugtes Gateway (IP): 10.200.0.3

Fallback DNS (IP): 1.1.1.1 oder 85.214.20.141

Expert->Backbone -> vpn3.freifunk-dresden.de 5002 c3b6153b27893b8674b3869aa3c5ccae3bfb874b6e866bca2bb6c01db0a847ba

Expert->WIFI -> Check

Expert->Splash -> Absschalten

DHCP Lease 30min

Betatestrouter

Geräte-Name Hersteller Preis RAM Flash ROM Mhz/SoC
(CPU-Leistung)
MIMO 1x1:1 Version Beschreibung Adresse OriginalFW Netzteil / Wirkleistung
Ori750.png
NDA ?>=35 € 128 16 650/9533 2x2:2@2,4Ghz
1x1:1@5Ghz
v1 x Antennen 10.123.123.1 DHCP (LAN&WAN) Netzteil 12V 600mA
WLAN:2,6W

Bootloader startet automatisch, wenn Router ohne Firmware.

Bootloader zwangsweise starten:
Router Stromlos machen, Resettaster gedrückt halten, LED blinkt+10 Sekunden Reset gedrückt halten, Reset loslassen.

Das Webinterface ist jetzt unter 192.168.1.1 und 10.123.123.1 zu erreichen.

  • Ggf. muss euer Rechner mit einem /24 Netzwerk eingestellt werden, wenn DHCP nicht funktionieren sollte, unter Linux ist das z.B. der Fall, Windows 7\|10 erhält eine IP vom DHCP.

TFTP Boot

todo

WLAN LED LAN LED Status
Rot Orange Pulsierend Pulsierend Bootloader geladen, http per 10.123.123.1 Zugriff möglich
Rot Blinkend Aus Keine funktionierende Firmware oder Router gebrickt
Aus Aus Router ohne Funktion, möglicherweise aber trotzdem am Strom

Codeschnipsel

Auf eigene Gefahr

Skynet

"Intelligente" Gatewayauswahl.

1. Autonomes setzen des bevorzugten Gateways, um Stabilität des Knotens und der VPN Verbindung zu verbessern, wenn kein bevorzugtes Gateway konfiguriert oder

2. Schritt das bevorzugte Gateway nicht mehr ordnungsgemäß funktioniert.

3. Schritt Liste bevorzugter Gateways

Gateways nach Besten Hops sortieren

und am Ende ein Array erhalten:

#gateways aus ffrouter sysinfo-json extrahieren und in ein array packen
gateways=$(grep -o '{"ip":"[^"]*"' /tmp/sysinfo.json | cut -d':' -f2 | tr -d '"' | tr '\n' ' ')
#die routen zu allen gateways überprüfen (maximal 8 hops) und in ein neues array schreiben
hopspgateway=$(for ip in $gateways; do hops=$(traceroute -q1 -w1 -m8 $ip | wc -l); echo $hops-$ip; done)
#echo $hopspgateway
#array nach hops sortieren
sortgate=$(echo "$hopspgateway" | tr ' ' '\n' | sort -t'-' -k1,1n -k2,2 | tr '\n' ' ')
#Array von "Hops-" befreien
sortgateways=$(echo "$sortgate" | sed 's/[0-9]*-//g')
#echo $sortgateways

Anschließend nach besten Pings sortieren:

#Sende 3 Pings mit 54321 Bytes und gebe den Durchschnitt zurück / Timeout 3 Sekunden, formatier in Format 000.000-IP zu Array
pinggate=$(for ip in $sortgateways; do ping_result=$(ping $ip -w3 -c3 -s54321 | tail -n1); avg=$(echo $ping_result | awk -F'/' '{printf "%.3f", $5}'); if [ "$avg" == "0.000" ]; then avg="999.999";fi; if [ ${#avg} -lt 7 ]; then avg="0$avg"; fi; printf "%s %s\n" "$avg-$ip"; done)
#Sortieren nach Antwortzeit in neuem Array
sortpinggate=$(echo "$pinggate" | tr ' ' '\n' | sort -t'-' -k1,1n -k2,2 | tr '\n' ' ')
#Array von "Pings-" befreien
sortpinggateways=$(echo "$sortpinggate" | sed 's/[0-9.0-9]*-//g')

Auswertung: HOPs

echo -e "to-xx.xxx.xxx.xxx\t Node"
for i in $sortgate; do echo -e $i "\t\" $($ipcalc $(echo "$i" | sed 's/[0-9]*-//g')); done

Auswertung: PINGs

echo -e "AvgPing-xx.xxx.xxx.xxx\t Node"
for i in $sortpinggate; do echo -e $i "\t" $($ipcalc $(echo "$i" | sed 's/[0-9.0-9]*-//g')); done

Bevorzugte Gateways

Mehrere Bevorzuge Gateways angeben 2DO

Testen ob das Gateway auch ein funktionierendes Gateway ist:

- Pingtest
- DNS
- Webseiten abrufen und auswerten

anschließend -p Gateway einstellen, wenn alle Tests erfolgreich.

NochEinFreiFunkHorst

Das Skript generiert eine Ausgabedatei mit Details zu jeder Station, einschließlich MAC-Adresse, Netzwerktyp, Signalstärke und anderen Metriken. Die Ausgabedatei wird in einem bestimmten Format mit Spaltenüberschriften gespeichert: MAC, Netz (Netzwerk), SNR (Signal-Rausch-Verhältnis), AVG (durchschnittliche Signalstärke), TXB (Übertragungsrate), RXB (Empfangsrate), Node (IP-Adress-Subnetz), IP (Geräte-IP-Adresse) und Name (Gerätename).

Wird später noch um iw scan Infos wie ssid und bmxd Routinginformationen erweitert. ;)

  1 #!/bin/sh
  2 . /etc/profile >/dev/null
  3 wd='/tmp/qoff/' # WorkDir
  4 ipcalc='/usr/lib/ddmesh/ddmesh-ipcalc.sh'
  5 
  6 iw dev > $wd'iwdev'
  7 
  8 ##it's me###
  9 ext=0; echo 'addr 00:00'>>$wd'iwdev'
 10 echo x>$wd'itsme'
 11 while read line; do
 12         if echo $line | grep -q "addr" && [ $ext -eq 1 ]; then
 13                 ext=0
 14                 echo $addr $type $chan $ssid >> $wd'itsme'
 15         fi
 16 
 17         if echo $line | grep -q "type"; then
 18                 type=$(echo $line | sed 's/type//g' | tr -d " ")
 19         fi
 20 
 21         if echo $line | grep -q "ssid"; then
 22                 ssid=$(echo $line | sed 's/ssid//g' | tr -d " ")
 23         fi
 24 
 25         if echo $line | grep -q "channel"; then
 26                 chan=$(echo $line | awk '{print $2}')
 27         fi
 28 
 29         if echo $line | grep -q "addr"; then
 30                 addr='MAC';type=noTYPE; ssid=noSSID; chan=0;
 31                 addr=$(echo $line | awk '{print $2}')
 32                 ext=1
 33         fi
 34 done < $wd'iwdev'
 35 #########
 36 
 37 
 38 
 39 #Kopf
 40 if test -d $wd; then echo x>/dev/null; else mkdir $wd; fi
 41 echo MAC                             Netz  SNR  AVG  TXB  RXB  Node   IP            Name > $wd'out'
 42 
 43 interfaces=$(iw dev | grep 'Interface' | awk '{print $2}') #interfaces einlesen
 44 ifconfig > $wd'ifinter'
 45 
 46 rm $wd'dumps'
 47 for interface in $interfaces; do
 48         echo  "Station" $(cat $wd'ifinter' | sed 'y/ABCDEF/abcdef/' | grep $interface | awk '{print $5}') " me" $interface >> $wd'dumps'
 49 
 50         iw dev $interface station dump | grep 'Station\|signal:\|signal avg:\|tx bitrate:\|rx bitrate:' >> $wd'dumps'
 51 done
 52 
 53 arp -a | grep '100.\|10.200\|10.201'> $wd'arp' #Achtung . /etc/profile >/dev/null beachten
 54 
 55 cat $wd'dumps' | tr "()" " " > $wd'dump'
 56 
 57 ext=0
 58 while read line; do
 59         if echo $line | grep -q "Station" && [ $ext -eq 1 ]; then
 60 
 61                 IP=$(cat $wd'arp'  | grep  $STA | awk '{print $1}')
 62 
 63                 if [ "$(echo $IP | cut -b0-6)" = "10.200" ]; then
 64                         NODE=$($ipcalc $IP)
 65                 fi
 66                 if [ "$(echo $IP | cut -b0-6)" = "10.201" ]; then
 67                         NODE=$($ipcalc $IP)
 68                 fi
 69                 if [ "$(echo $IP | cut -b0-4)" = "100." ]; then
 70                         IP=$(cat /tmp/dhcp.leases | grep $STA | awk '{print $3}')
 71                         NAME=$(cat /tmp/dhcp.leases | grep $STA | awk '{print $4}')
 72                 fi
 73 
 74                 echo $STA $BAND $SNR $AVG $TXB $RXB $NODE $IP $NAME >> $wd'out'
 75                 ext=0
 76         fi
 77 
 78         if echo $line | grep -q "Station"; then
 79                 STA=$(echo $line | awk '{print $2}')
 80                 BAND=$(echo $line | awk '{print $4}')
 81                 BAND=${BAND:0:5}
 82                 ext=1 #Begin parsing
 83                 SNR=FFDD;AVG=FFDD;TXB=FFDD;RXB=FFDD;IP=FFDD;NAME=unused;NODE=' no ' #Fehlercode falls Wert nicht geparst
 84 
 85                 me=$(echo $line | awk '{print $3}')
 86                 if [ $me = "me" ]; then
 87                         SNR=dBm;AVG=dBm;TXB='Mbit/s';RXB='Mbit/s';IP=XXX;NAME=XYZ;NODE='^' #Fehlercode falls Wert nicht geparst
 88                         IP=$(uci get network.wifi_mesh2g.ipaddr)
 89                         NODE=$($ipcalc $IP)
 90                         Nssid=$(cat $wd'itsme' | grep $STA | awk '{print $4}')
 91                         Ntype=$(cat $wd'itsme' | grep $STA | awk '{print $2}')
 92                         Nchan=$(cat $wd'itsme' | grep $STA | awk '{print $3}')
 93                         NAME="$Nssid($Ntype:$Nchan)"
 94                         #IP=$(echo $line | awk '{print $3}')
 95                       echo >> $wd'out'
 96                         echo $STA $BAND $SNR $AVG $TXB $RXB $NODE $IP $NAME >> $wd'out'
 97                         #echo MEEEEEEEEEE
 98 
 99                         ext=0
100                 fi
101 
102         fi
103 
104 
105         if echo $line | grep -q "signal:"; then
106                 SNR=$(echo $line | awk '{print $2}')
107         fi
108         if echo $line | grep -q "signal avg:"; then
109                 AVG=$(echo $line | awk '{print $3}')
110         fi
111         if echo $line | grep -q "tx bitrate:"; then
112                 TXB=$(echo $line | awk '{print $3}')
113         fi
114         if echo $line | grep -q "rx bitrate:"; then
115                 RXB=$(echo $line | awk '{print $3}')
116         fi
117 
118 done < $wd'dump'
119 
120 #Formatierte Ausgabe
121 clear
122 cat $wd'out' | awk 'BEGIN { FS=" " } { printf "%-20s %+5s %-3s %-3s %+6s %+6s %+6s %-15s %-32s\n", $1,$2,$3,$4,$5,$6,$7,$8,$9 }'

Bypass für Offloader

Powerloadmodel

Das Script wird auf dem Bypassrouter (TL 1043) installiert und prüft ob der Offloader per MeshOnLan verfügbar ist und ob auf dem Offloader fastd Tunnel laufen: Ist das der Fall, wird das Interface eth0 und tbb_fastd auf dem Bypassrouter abgeschaltet, damit ausschließlich nur noch der Offloader benutzt wird. Die restlichen Router können, aber müssen nicht, außer per WLAN Meshnetz auch noch per MeshOnLAN vernetzt werden und nutzen automatisch den Offloader. Nach einer Wartezeit prüft der Bypassrouter, ob eine Website wirklich geladen werden kann: Ist dies nicht der Fall, werden die Interface des Bypassrouters wieder eingeschalten.

* als Cronjob möglich 

 ip='10.200.x.y' #bypassrouter
 ol='10.200.j.z' #offloader ip
 probe='wikipedia.org'
 wget https://$ol/sysinfo-json.cgi -O /tmp/bypass/olsysinfo --no-check-certificate
 if [ $(grep $ip /tmp/bypass/olsysinfo | wc -l) -ge 1 ]; #check ip
 then if [ $(grep backbone /tmp/bypass/olsysinfo | wc -l) -ge 1 ]; #check backbone
 then ifconfig tbb_fastd down; ifconfig eth0 down; #interface des bypassrouters ausschalten, wenn offloader verfügbar
 fi;
 fi
 sleep 15 #gib dem batman noch zeit
 wget https://$probe -O /tmp/bypass/probe --no-check-certificate
 if [ $(grep $probe /tmp/bypass/probe | wc -l) -ge 1 ]; then echo wikiokay; else ifconfig eth0 up; ifconfig tbb_fastd up; fi #
 rm /tmp/bypass/*

Prozess bestimmten Kernen zuweisen

Unter Brücksichtigung von SMT/HT, bei 4 Kernen. Restliches Tasks auf Kerne 1 und 3, Kern 0 "bmxd", Kern 2 "fastd":

rm /tmp/mc; ps -xa>/tmp/mc;while read i ; do task=$(echo $i | cut -b1-5 | grep -o '[0-9]'*); taskset -pc 1,3 $task; done</tmp/mc
taskset -pc 0 $(grep local/bin/bmxd /tmp/mc | cut -b 1-5)
taskset -pc 2 $(grep fastd2.conf /tmp/mc | cut -b 1-5)

OpenSSL Benchmark

Vorbereitung OpenWrt

  • OpenWrt ohne Zusätze installieren.
  • Über 192.168.1.1 einloggen
opkg update
opkg install openssl-utils

Benchen

OpenSSL Mulitcore Bench für Linux/Openwrt/EdgeOS. Am Besten per vi Dateiname in /tmp/ erstellen, chmod +x Dateiname & Go ./Dateiname
Es werden Benchs für 1,2,4 und MaximaleKerne/2 und Maximale Kerne erstellt, sofern soviele Kerne vorhanden sind

#Cores ermitteln und ins temp schreiben
cores=$(grep -c 'processor' /proc/cpuinfo)
if [ $cores -gt 1 ]; then sort /proc/cpuinfo | uniq -u>/tmp/ci; sort -r /proc/cpuinfo | uniq -d>>/tmp/ci; else cat /proc/cpuinfo>/tmp/ci; fi
benchmarks='md5 sha1 sha256 sha512 des des-ede3 aes-128-cbc aes-192-cbc aes-256-cbc rsa2048 dsa2048'
#Benchmarks Single- und Multicore
rm /tmp/sslspeed*
openssl speed -multi 1 $benchmarks | tee /tmp/sslspeed1 
if [ $cores -gt 1 ]; then openssl speed -multi 2 $benchmarks | tee /tmp/sslspeed2; fi
if [ $cores -gt 3 ]; then openssl speed -multi 4 $benchmarks | tee /tmp/sslspeed4; fi
if [ $cores -gt 4 ] && [ $cores -ne 8 ]; then openssl speed -multi $(($cores/2)) $benchmarks | tee /tmp/sslspeed$(($cores/2)); fi
if [ $cores -gt 4 ]; then openssl speed -multi $cores $benchmarks | tee /tmp/sslspeed$cores; fi
#Auswertung
echo Systeminfos BogoMIPS OpenSSL-Version $benchmarks>/tmp/speed
echo -n '1'>>/tmp/speed
echo -n `awk -v FS=": " -v ORS="" '/(model name|cpu model|system type|bogomips|BogoMIPS)/ { print "| " $2 " " } END { print "" }' /tmp/ci`>>/tmp/speed
echo `awk -v ORS="" '$1 ~ /OpenSSL/ {print "| " $2 " |"} $1 ~ /(md5|sha)/ {print "  " $5 " |"} $1 ~ /(des|aes)/ {b = b "  " $6 " |"} $1 ~ /(rsa|dsa)/ {print b "  " $6 " | " $7 " ";b=""} END { print "|" }' /tmp/sslspeed1 | sed 's/\.\(..\)k/\10/g'`>>/tmp/speed
if [ $cores -gt 1 ]; then echo -n '2'>>/tmp/speed; echo -n `awk -v FS=": " -v ORS="" '/(model name|cpu model|system type|bogomips|BogoMIPS)/ { print "| " $2 " " } END { print "" }' /tmp/ci`>>/tmp/speed; echo `awk -v ORS="" '$1 ~ /OpenSSL/ {print "| " $2 " |"} $1 ~ /(md5|sha)/ {print "  " $5 " |"} $1 ~ /(des|aes)/ {b = b "  " $6 " |"} $1 ~ /(rsa|dsa)/ {print b "  " $6 " | " $7 " ";b=""} END { print "|" }' /tmp/sslspeed2 | sed 's/\.\(..\)k/\10/g'`>>/tmp/speed; fi
if [ $cores -gt 3 ]; then echo -n '4'>>/tmp/speed; echo -n `awk -v FS=": " -v ORS="" '/(model name|cpu model|system type|bogomips|BogoMIPS)/ { print "| " $2 " " } END { print "" }' /tmp/ci`>>/tmp/speed; echo `awk -v ORS="" '$1 ~ /OpenSSL/ {print "| " $2 " |"} $1 ~ /(md5|sha)/ {print "  " $5 " |"} $1 ~ /(des|aes)/ {b = b "  " $6 " |"} $1 ~ /(rsa|dsa)/ {print b "  " $6 " | " $7 " ";b=""} END { print "|" }' /tmp/sslspeed4 | sed 's/\.\(..\)k/\10/g'`>>/tmp/speed; fi
if [ $cores -gt 4 ] && [ $cores -ne 8 ]; then echo -n $(($cores/2))>>/tmp/speed; echo -n `awk -v FS=": " -v ORS="" '/(model name|cpu model|system type|bogomips|BogoMIPS)/ { print "| " $2 " " } END { print "" }' /tmp/ci`>>/tmp/speed; echo `awk -v ORS="" '$1 ~ /OpenSSL/ {print "| " $2 " |"} $1 ~ /(md5|sha)/ {print "  " $5 " |"} $1 ~ /(des|aes)/ {b = b "  " $6 " |"} $1 ~ /(rsa|dsa)/ {print b "  " $6 " | " $7 " ";b=""} END { print "|" }' /tmp/sslspeed$(($cores/2)) | sed 's/\.\(..\)k/\10/g'`>>/tmp/speed; fi
if [ $cores -gt 4 ]; then echo -n $cores>>/tmp/speed; echo -n `awk -v FS=": " -v ORS="" '/(model name|cpu model|system type|bogomips|BogoMIPS)/ { print "| " $2 " " } END { print "" }' /tmp/ci`>>/tmp/speed; echo `awk -v ORS="" '$1 ~ /OpenSSL/ {print "| " $2 " |"} $1 ~ /(md5|sha)/ {print "  " $5 " |"} $1 ~ /(des|aes)/ {b = b "  " $6 " |"} $1 ~ /(rsa|dsa)/ {print b "  " $6 " | " $7 " ";b=""} END { print "|" }' /tmp/sslspeed$cores | sed 's/\.\(..\)k/\10/g'`>>/tmp/speed; fi
cat /tmp/speed


5Ghz Mesh Hack

/etc/config/wireless darauf achten, dass gleicher Kanal (nicht auto!) und gleiches "Land" unter:

config wifi-device 'radio5g'
        option country 'DE'
        option channel '44'

/etc/config/wireless ergänzen, gleiche bssid und ssid:

#5g Mesh
config wifi-iface
        option device 'radio5g'
        option network 'wifi'
        option mode 'adhoc'
        option bssid '64:64:6d:65:55:55'
        option encryption 'none'
        option mcast_rate '6000'
        option ssid 'Freifunk-Mesh-Net5'

Ausführen:

meship=$(ifconfig br-mesh_lan | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)
ifconfig wlan0 $meship
ifconfig wlan1 $meship
bmxd -c dev=wlan0 /linklayer 2
bmxd -c dev=wlan1 /linklayer 2