Scripte: Unterschied zwischen den Versionen

Aus Freifunk Kiel
Wechseln zu: Navigation, Suche
(Spiegeln des Paketservers)
K (Futro Offloader mit VLAN benutzen)
 
(11 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 6: Zeile 6:
 
== Script ==
 
== Script ==
 
<pre>
 
<pre>
#!/usr/bin/env python
+
#!/usr/bin/env python3
 
# -*- coding: utf-8 -*-
 
# -*- coding: utf-8 -*-
 
# by ZaB|SHC| @ freenode/#archlinux.de 2013
 
# by ZaB|SHC| @ freenode/#archlinux.de 2013
 
   
 
   
 
NODEMAC = '26:a4:3c:ad:f4:88'
 
NODEMAC = '26:a4:3c:ad:f4:88'
 +
NODES = 'http://graph.freifunk.in-kiel.de/nodes.json'
  
 
import urllib.request, json
 
import urllib.request, json
 
from time import sleep
 
from time import sleep
  
n = json.loads(urllib.request.urlopen('http://freifunk.in-kiel.de/ffmap/nodes.json').read().decode('utf-8'))
+
n = json.loads(urllib.request.urlopen(NODES).read().decode('utf-8'))
 
for l in n['links']:
 
for l in n['links']:
 
if l['id'].startswith(NODEMAC + '-'):
 
if l['id'].startswith(NODEMAC + '-'):
Zeile 68: Zeile 69:
  
 
== Per Cron den Paketserver regelmäßig spiegeln ==
 
== Per Cron den Paketserver regelmäßig spiegeln ==
Für ein regelmäßiges Update muss folgende Zeile in die Crontab eingefügt werden.
+
Für ein automatisches wächentliches Update muss folgende Zeilen in die crontab eingefügt werden:
<pre>0 5 * * 3 cd /var/www/; wget --mirror --no-parent --no-host-directories http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/ > /dev/null 2>&1</pre>
+
<pre>
 +
# m h dom mon dow
 +
0 5 * * 3 cd /var/www/opkg-mirror/; wget --mirror --no-parent --no-host-directories http://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/ > /dev/null 2>&1
 +
</pre>
 +
(Achtung: Der Pfad `chaos_calmer/15.05.1` ist für Gluon 2016.1.5.1, und muss natürlich bald wieder angempasst werden)
 +
 
 +
= Detaillierter Status auf der Konsole =
 +
Wenn man auf der Konsole eines Knotens eingeloggt ist, kann man sich mit diesem kleinen Script anzeigen lassen, wer gerade so mit dem Knoten kommuniziert.
 +
 
 +
== Script ==
 +
<pre>
 +
while true; do
 +
 
 +
        clear; date; echo;
 +
 
 +
        echo "Stations on mesh0 (backbone):";
 +
        iwinfo mesh0 assoclist;
 +
 
 +
        echo "Stations on ibss0 (backbone):";
 +
        iwinfo ibss0 assoclist;
 +
 
 +
        echo "Stations on client0 (users):";
 +
        iwinfo client0 assoclist;
 +
 
 +
        sleep 5;
 +
 
 +
done
 +
</pre>
 +
 
 +
 
 +
= Jabber Benachrichtigung bei Verbindungsabriss =
 +
Der folgende Einzeiler pingt alle fünf Sekunden einen beliebigen Host/Server/Client/Node an. Falls es zum Verbindungsabriss kommen sollte, wird bei jedem fehlerhaften Ping eine Jabber Nachricht generiert. In Kombination mit einem Smartphone kann äußerst schnell und nervig (5sek Takt) die Aufmerksamkeit auf einen Node gezogen werden.
 +
 
 +
Voraussetzung ist ein fertig konfiguriertes sendxmpp.
 +
 
 +
 
 +
 
 +
<pre>
 +
ping6 -i 5 -D -O fe80::62e3:27ff:fe24:5cfs%eth0 | grep --line-buffered  "no answer yet"  | sendxmpp  -t -i JID@SERVER
 +
</pre>
 +
 
 +
fe80::62e3:27ff:fe24:5cfs - Interne IPv6 des Nodes
 +
 
 +
eth0 - Interface zum ff Netz
 +
 
 +
JID@Server - Zu benachrichtigende Jabber ID
 +
 
 +
 
 +
= Node ausrichten =
 +
Zum schnellen ausrichten eines Richtfunknodes sollte folgender Einzeiler helfen.
 +
 
 +
<pre>
 +
while [ 1 ]; do sleep 1; clear; iwinfo mesh0 assoclist; done
 +
</pre>
 +
 
 +
= Futro Offloader mit VLAN benutzen =
 +
Es kommt vor das man einen Futro als Offloader nutzen möchte. Da dort eigentlich eine zweite Netzwerkkarte und ein Adapter benötigt wird ist der Aufwand immer gleich etwas größer. Zum Glück kann man das allerdings auch via VLANs erledigen was das ganze ein wenig einfacher machen. Dabei verliert man ca. die hälfte der VPN Leistung wobei ca. 55 Mbits immer noch recht respektabel sein sollten und die Gateways auch deftig zum Schwitzen bringen wird.
 +
 
 +
Beim Einrichten des Offloaders unbedingt SSH-Keys und/oder Passwort hinterlegen um im normal Betrieb Zugriff zu haben! Es gibt keinen "Reset" Knopf wie bei Routern!!!!
 +
 
 +
Nach oder während der Konfiguration mit dem Offloader über SSH verbinden und einloggen. Dann folgende Befehle ausführen:
 +
<pre>
 +
 
 +
uci set network.wan.ifname=eth0.10
 +
# eth0.10 = eth0 ist das Interface und 10 die VLAN ID
 +
uci set network.mesh_lan=interface
 +
uci set network.mesh_lan.auto=1
 +
uci set network.mesh_lan.ifname=eth0.11
 +
# eth0.10 = eth0 ist das Interface und 11 die VLAN ID
 +
uci set network.mesh_lan.mesh=bat0
 +
uci set netwotk.mesh_lan.proto=batadv
 +
uci add_list network.client.ifname=eth0.12
 +
# eth0.10 = eth0 ist das Interface und 12 die VLAN ID
 +
uci commit network
 +
 
 +
# VLAN10 = WAN
 +
# VLAN11 = MESH
 +
# VLAN12 = Clients
 +
</pre>

Aktuelle Version vom 2. November 2018, 15:47 Uhr

Auf dieser Seite sollen nützliche, interessante und evtl. auch witzige Scripte für das Freifunknetz gesammelt werden.

Mac to Vendor

Mit diesem Script lässt sich ausgeben, von welchem Hersteller die Clients sind, die sich mit deinem Node verbunden haben.

Script

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# by ZaB|SHC| @ freenode/#archlinux.de 2013
 
NODEMAC = '26:a4:3c:ad:f4:88'
NODES = 'http://graph.freifunk.in-kiel.de/nodes.json'

import urllib.request, json
from time import sleep

n = json.loads(urllib.request.urlopen(NODES).read().decode('utf-8'))
for l in n['links']:
	if l['id'].startswith(NODEMAC + '-'):
		m = l['id'].split('-')[1]
		if m in (NODEMAC, NODEMAC): continue
		r = urllib.request.urlopen('http://www.macvendorlookup.com/api/EIHHxPB/{0:s}'.format(m)).read().decode('utf-8')
		if r != 'none': c = json.loads(r)[0]['company']
		else: c = ''
		print('{0:s}\t{1:s}'.format(m, c))

Beispiel

#./ffkiVendors.py
   
f4:f1:5a:XX:XX:XX	Apple
d0:ae:ec:XX:XX:XX	Alpha Networks Inc.
de:66:c8:XX:XX:XX	
f8:e0:79:XX:XX:XX	
f0:25:b7:XX:XX:XX	
30:39:26:XX:XX:XX	Sony Ericsson Mobile Communications AB
a8:26:d9:XX:XX:XX	HTC Corporation
b8:5e:7b:XX:XX:XX	Samsung Electronics Co.,Ltd
40:f3:08:XX:XX:XX	Murata Manufactuaring Co.,Ltd.
90:b9:31:XX:XX:XX	
90:18:7c:XX:XX:XX	Samsung Electro Mechanics co., LTD.
38:aa:3c:XX:XX:XX	SAMSUNG ELECTRO-MECHANICS
3c:e0:72:XX:XX:XX	Apple
bc:f5:ac:XX:XX:XX	
f6:58:32:XX:XX:XX	
90:c1:15:XX:XX:XX	Sony Ericsson Mobile Communications AB
78:d6:f0:XX:XX:XX	Samsung Electro Mechanics

(Die MAC Adressen wurden in diesem Beispiel anonymisiert)

Anmerkungen

Wie mithilfe von MAC Adressen auf die Hersteller geschlossen werden kann, erklärt folgender Heise Link:

http://www.heise.de/netze/tools/mac/

Bei Laptop Clients ist das Script nicht all zu aussagekräftig, da der Hersteller des Wlan Chipsatzes nichts über den Hersteller des Laptops aussagt. Bei Smartphones Clients funktioniert diese Script aber hervorragend. Die großen Smartphone Hersteller verbauen fast alle ihre eigenen Wlan Chipsätze, so dass die Smartphone Hersteller gut über ihre MAC Adresse erkennbar sind.

Abgesehen davon ist es bei Smartphones oftmals alles andere als trivial seinen WLan Chip zu tauschen. Ganz anders als das bei Laptops der Fall ist.

Erstellen eines OpenWRT opkg Mirrors

Um auch innerhalb des Freifunk Netzes per opkg Software installieren zu können, bietet sich ein lokaler Mirror an.

Spiegeln des Paketservers

wget --mirror --no-parent --no-host-directories http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/
wget --mirror --no-parent --no-host-directories http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/packages/

Per Cron den Paketserver regelmäßig spiegeln

Für ein automatisches wächentliches Update muss folgende Zeilen in die crontab eingefügt werden:

# m h dom mon dow
0 5 * * 3 cd /var/www/opkg-mirror/; wget --mirror --no-parent --no-host-directories http://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/ > /dev/null 2>&1

(Achtung: Der Pfad `chaos_calmer/15.05.1` ist für Gluon 2016.1.5.1, und muss natürlich bald wieder angempasst werden)

Detaillierter Status auf der Konsole

Wenn man auf der Konsole eines Knotens eingeloggt ist, kann man sich mit diesem kleinen Script anzeigen lassen, wer gerade so mit dem Knoten kommuniziert.

Script

while true; do

        clear; date; echo;

        echo "Stations on mesh0 (backbone):";
        iwinfo mesh0 assoclist;

        echo "Stations on ibss0 (backbone):";
        iwinfo ibss0 assoclist;

        echo "Stations on client0 (users):";
        iwinfo client0 assoclist;

        sleep 5;

done


Jabber Benachrichtigung bei Verbindungsabriss

Der folgende Einzeiler pingt alle fünf Sekunden einen beliebigen Host/Server/Client/Node an. Falls es zum Verbindungsabriss kommen sollte, wird bei jedem fehlerhaften Ping eine Jabber Nachricht generiert. In Kombination mit einem Smartphone kann äußerst schnell und nervig (5sek Takt) die Aufmerksamkeit auf einen Node gezogen werden.

Voraussetzung ist ein fertig konfiguriertes sendxmpp.


ping6 -i 5 -D -O fe80::62e3:27ff:fe24:5cfs%eth0 | grep --line-buffered  "no answer yet"  | sendxmpp  -t -i JID@SERVER

fe80::62e3:27ff:fe24:5cfs - Interne IPv6 des Nodes

eth0 - Interface zum ff Netz

JID@Server - Zu benachrichtigende Jabber ID


Node ausrichten

Zum schnellen ausrichten eines Richtfunknodes sollte folgender Einzeiler helfen.

while [ 1 ]; do sleep 1; clear; iwinfo mesh0 assoclist; done

Futro Offloader mit VLAN benutzen

Es kommt vor das man einen Futro als Offloader nutzen möchte. Da dort eigentlich eine zweite Netzwerkkarte und ein Adapter benötigt wird ist der Aufwand immer gleich etwas größer. Zum Glück kann man das allerdings auch via VLANs erledigen was das ganze ein wenig einfacher machen. Dabei verliert man ca. die hälfte der VPN Leistung wobei ca. 55 Mbits immer noch recht respektabel sein sollten und die Gateways auch deftig zum Schwitzen bringen wird.

Beim Einrichten des Offloaders unbedingt SSH-Keys und/oder Passwort hinterlegen um im normal Betrieb Zugriff zu haben! Es gibt keinen "Reset" Knopf wie bei Routern!!!!

Nach oder während der Konfiguration mit dem Offloader über SSH verbinden und einloggen. Dann folgende Befehle ausführen:


uci set network.wan.ifname=eth0.10
# eth0.10 = eth0 ist das Interface und 10 die VLAN ID
uci set network.mesh_lan=interface
uci set network.mesh_lan.auto=1
uci set network.mesh_lan.ifname=eth0.11
# eth0.10 = eth0 ist das Interface und 11 die VLAN ID
uci set network.mesh_lan.mesh=bat0
uci set netwotk.mesh_lan.proto=batadv
uci add_list network.client.ifname=eth0.12
# eth0.10 = eth0 ist das Interface und 12 die VLAN ID
uci commit network

# VLAN10 = WAN
# VLAN11 = MESH
# VLAN12 = Clients