Freifunk-Gateway aufsetzen/keyxchangev2 VERALTET: Unterschied zwischen den Versionen

Aus Freifunk Franken
Wechseln zu:Navigation, Suche
Keine Bearbeitungszusammenfassung
Zeile 50: Zeile 50:


==== Alfred Monitoring Proxy ====
==== Alfred Monitoring Proxy ====
Wir nutzen besser den C-Alfred von kratz00 https://github.com/kratz00/alfred-json somit können wir auch sehr leicht mehrere Hoods bedienen.
Zuerst den Alfred-Master pro Hood starten (irgendwo in Autostart):
<pre>
root@vm3-gw-cd1:/usr/sbin# cat /etc/fastd/fff.fuerth/up.sh
#!/bin/sh
/sbin/ifup $INTERFACE
batctl gw_mode server 32mbit
alfred -m -i bat0 -u /Var/run/a0.sock &
</pre>
den Socket pro Hood einfach um eins hochzählen, a1.sock a2.sock usw.
Danach bauen wir Alfred-json
<pre>
git clone https://github.com/kratz00/alfred-json
cd alfred-json/
mkdir build
cd build/
cmake ../
make
sudo su
make install
</pre>
danach noch das Script anlegen:
<pre>
<pre>
apt-get install alfred
root@vm3-gw-cd1:/home/christiand/alfred-json/build# cat /usr/sbin/alfred-c
apt-get install python3-pip
#!/bin/bash
 
api_url="https://monitoring.freifunk-franken.de/api/alfred"
fetch_ids="64"
 
for fetch_id in $fetch_ids
do
    data=$(alfred-json -r "$fetch_id" -s /var/run/a1.sock)
    curl -H "Content-type: application/json; charset=UTF-8" -X POST --data "{$fetch_id: $data}" $api_url
done


pip3 install requests
for fetch_id in $fetch_ids
pip3 install pyalfred
do
    data=$(alfred-json -r "$fetch_id" -s /var/run/a2.sock)
    curl -H "Content-type: application/json; charset=UTF-8" -X POST --data "{$fetch_id: $data}" $api_url
done
 
for fetch_id in $fetch_ids
do
    data=$(alfred-json -r "$fetch_id" -s /var/run/a3.sock)
    curl -H "Content-type: application/json; charset=UTF-8" -X POST --data "{$fetch_id: $data}" $api_url
done
</pre>
</pre>


Dann Anleitung hier:
ausführbar machen:
https://github.com/asdil12/fff-monitoring/tree/master/alfred-monitoring-proxy
<pre>
chmod +x /usr/sbin/alfred-c
</pre>


Script ausführbar machen und alle 5 Minuten ausführen:
Einen Cronjob drüber:
/etc/crontab
<pre>
<pre>
*/5 *   * * *   root    sleep 30; /usr/local/bin/alfred-monitoring-proxy
*/5 * * * * /usr/sbin/alfred-c
</pre>
</pre>
fertig :)


== network ==
== network ==

Version vom 3. November 2017, 16:21 Uhr

Hier landen die ersten Infos was für Gateways bei KeyxchangeV2 geändert werden muss. Es sind nur Beispieldateien und müssen pro Hood unbedingt angepasst werden! Ungetestet!

Batman

Entweder batman-adv und batctl aus Debian 9 verwenden (2016.4) oder selbst kompilieren:

Zuerst git Repositories klonen:

git clone https://git.open-mesh.org/batman-adv.git
git clone https://git.open-mesh.org/batctl.git


Jeweils die aktuellste stabile Version auschecken:

git checkout v2017.3


Jeweils kompilieren und installieren:

make
sudo make install

Dafür ist mindestens build-essential, libnl-3-dev, libnl-genl-3-dev, make, pkg-config, linux-headers nötig. Bitte ergänzen, ob noch mehr notwendig ist.


Am Ende sollte 'batctl -v' Bei Version etwas größer als 2013.4 stehen (wie in diesem Beispiel 2017.3...)

# modprobe batman-adv && batctl -v
batctl 2017.3 [batman-adv: 2017.3]

Alfred Master aufsetzen

Alfred Master

/etc/systemd/system/alfred-master.service

[Unit]
Description=Alfred Master
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/sbin/alfred -m -i bat0
WorkingDirectory=/tmp

[Install]
WantedBy=multi-user.target


Alfred Monitoring Proxy

Wir nutzen besser den C-Alfred von kratz00 https://github.com/kratz00/alfred-json somit können wir auch sehr leicht mehrere Hoods bedienen.

Zuerst den Alfred-Master pro Hood starten (irgendwo in Autostart):

root@vm3-gw-cd1:/usr/sbin# cat /etc/fastd/fff.fuerth/up.sh 
#!/bin/sh
/sbin/ifup $INTERFACE
batctl gw_mode server 32mbit
alfred -m -i bat0 -u /Var/run/a0.sock &

den Socket pro Hood einfach um eins hochzählen, a1.sock a2.sock usw.

Danach bauen wir Alfred-json

git clone https://github.com/kratz00/alfred-json
cd alfred-json/
mkdir build
cd build/
cmake ../
make
sudo su
make install

danach noch das Script anlegen:

root@vm3-gw-cd1:/home/christiand/alfred-json/build# cat /usr/sbin/alfred-c 
#!/bin/bash

api_url="https://monitoring.freifunk-franken.de/api/alfred"
fetch_ids="64"

for fetch_id in $fetch_ids
do
    data=$(alfred-json -r "$fetch_id" -s /var/run/a1.sock)
    curl -H "Content-type: application/json; charset=UTF-8" -X POST --data "{$fetch_id: $data}" $api_url
done

for fetch_id in $fetch_ids
do
    data=$(alfred-json -r "$fetch_id" -s /var/run/a2.sock)
    curl -H "Content-type: application/json; charset=UTF-8" -X POST --data "{$fetch_id: $data}" $api_url
done

for fetch_id in $fetch_ids
do
    data=$(alfred-json -r "$fetch_id" -s /var/run/a3.sock)
    curl -H "Content-type: application/json; charset=UTF-8" -X POST --data "{$fetch_id: $data}" $api_url
done

ausführbar machen:

chmod +x /usr/sbin/alfred-c

Einen Cronjob drüber:

*/5 * * * * /usr/sbin/alfred-c

fertig :)

network

/etc/network/interfaces

device: bat0
iface bat0 inet manual
post-up ifconfig $IFACE up
    ##Einschalten post-up:
    # IP des Gateways am B.A.T.M.A.N interface:
    post-up ip addr add 10.83.8.1/22 dev $IFACE
    post-up ip -6 addr add fe80::1/64 dev $IFACE nodad
    post-up ip -6 addr add fd43:5602:29bd:4::1/64  dev $IFACE
    # Regeln, wann die fff Routing-Tabelle benutzt werden soll: 
    post-up ip rule add iif $IFACE table fff
    post-up ip rule add from 10.0.0.0/8 table fff
    post-up ip rule add to 10.0.0.0/8  table fff
    # Route in die Fuerther Hood:       
    post-up ip route replace 10.83.8.0/22 dev $IFACE proto static table fff
    post-up ip -6 route replace fd43:5602:29bd:4::/64 dev $IFACE proto static table fff
    # Start des DHCP Servers:
    post-up invoke-rc.d isc-dhcp-server restart

    ##Ausschalten post-down:
    # Loeschen von oben definieren Routen, Regeln und Interface: 
    post-down ip route del 10.83.0.0/22 dev $IFACE table fff
    post-down ip rule del from 10.0.0.0/8 table fff
    post-down ip rule del to 10.0.0.0/8 table fff
    post-down ip rule del iif $IFACE table fff
    post-down ifconfig $IFACE down

# VPN Verbindung in die Fuerther Hood
iface ffffuerthVPN inet manual
    post-up batctl -m bat0 if add $IFACE
    post-up ifconfig $IFACE up
    post-up ifup bat0
    post-down ifdown bat0
    post-down ifconfig $IFACE down

fastd

root@vm3-gw-cd1:/etc/fastd/fff.fuerth# cat down.sh 
#!/bin/sh
/sbin/ifdown $INTERFACE
root@vm3-gw-cd1:/etc/fastd/fff.fuerth# cat fff.fuerth.conf 
# Log warnings and errors to stderr
log level error;
# Log everything to a log file
log to syslog as "ffffuerth" level info;
# Set the interface name
interface "ffffuerthVPN";
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20
#method "xsalsa20-poly1305";
#method "aes128-gcm";
method "null";
# Bind to a fixed port, IPv4 only
bind any:10004;
# fastd need a key but we don't use them
secret "c00a286249ef5dc5506945f8a3b413c0928850214661aab866715203b4f2e86a";
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)
# (see MTU selection documentation)
mtu 1426;
on up "/etc/fastd/fff.fuerth/up.sh";
on post-down "/etc/fastd/fff.fuerth/down.sh";
secure handshakes no;
on verify "/etc/fastd/fff.fuerth/verify.sh";
root@vm3-gw-cd1:/etc/fastd/fff.fuerth# cat up.sh 
#!/bin/sh
/sbin/ifup $INTERFACE
root@vm3-gw-cd1:/etc/fastd/fff.fuerth# cat verify.sh 
#!/bin/sh
return 0
root@vm3-gw-cd1:/etc/fastd/fff.fuerth# 
root@vm3-gw-cd1:/home/christiand# cat /etc/systemd/system/fastd.service 
[Unit]
Description=fastd

[Service]
ExecStart=/usr/bin/fastd -c /etc/fastd/fff.fuerth/fff.fuerth.conf
Type=simple

[Install]
WantedBy=multi-user.target

danach:

systemctl enable fastd
systemctl start fastd

Der Server muss dann händisch in den keyxchangev2 eingetragen werden. Dazu sind folgende Infos nötig:

  • IP Adresse (aktuell v4)
  • Port von fastd
  • Public Key von fastd (die Router müssen den Pub-Key vom Gateway kennen sonst funktioniert es nicht, das Gateway muss KEINE Keys vom Router kennen)
  • Servername
  • Hood

Gateways untereinander verbinden

Die Gateways müssen sich im fastd auch noch untereinander verbinden, hier fehlt noch $config

am besten wird es sein, sich die json vom keyxchange zu holen und alle Gateways (auser sich selbst) in das peers Verzeichnis eintragen, dann sollte fastd sich darum kümmern. Dies regelmäßig per Cronjob tun.

babel

siehe hier

GRE TUnnel

Die GRE Tunnel brauchen auch eine ipv6 aus dem Transfernetz.

...
post-up ip -6 addr add fd43:5602:29bd:ffff::1 dev vm1fffgwcd1
...

radvd

root@vm3-gw-cd1:/etc/fastd/fff.fuerth# cat /etc/radvd.conf 
interface bat0 { 
        AdvSendAdvert on;
        MinRtrAdvInterval 60; 
        MaxRtrAdvInterval 300;
	AdvDefaultLifetime 0;
        prefix fd43:5602:29bd:4::/64 { 
                AdvOnLink on; 
                AdvAutonomous on; 
        };
        route fc00::/7 {
        };
};
/etc/init.d/radvd restart

ntp Server

Es werden routbare v6 Adressen aus den ULA Bereich verwendet. Jede Hood kann, muss aber nicht einen eigenen ntp Server bereit stellen. Aktuell sind folgende NTP Server in betrieb und können verwendet werden:

  • fd43:5602:29bd:ffff::1

http

hier wird noch ein http Server benötigt den man so konfigurieren kann, das es pro eingehendes Interface mit gleicher IP (jedes batX bekommt eine fe80::1/64 mit nodad damit auch mehrere GWs in einer Hood die IP haben können!) eine andere Hoodfile zurück gibt. Die aktuelle Hoodfile kann vom keyxchangev2 bezogen werden und muss regelmäßig (Cronjob, alle 5 Minuten) auf den Gateways aktualisiert werden

Cronjob:

*/5 * * * * wget "http://keyserver.freifunk-franken.de/v2/index.php?lat=49.4814&long=10.966" -O /var/www/html/keyxchangev2data

Koordinaten auf die Hood anpassen: http://keyserver.freifunk-franken.de/v2/hoods.php

ACHTUNG: Später muss der Webserver noch geändert werden wenn mehrere Hoods betrieben werden wollen auf einer Maschine!!! Das ist nur für erste Tests brauchbar!!

Mittlerweile ist die Firmware angepasst und der Webserver muss auf Port 2342 lauschen! Zeile 103: https://github.com/FreifunkFranken/firmware/blob/master/src/packages/fff/fff-hoods/files/usr/sbin/configurehood