Freifunk-Gateway aufsetzen/keyxchangev2 VERALTET: Unterschied zwischen den Versionen
(→http) |
K (ChristianD verschob die Seite Freifunk-Gateway aufsetzen/keyxchangev2 nach Freifunk-Gateway aufsetzen/keyxchangev2 VERALTET) |
||
(26 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= ACHTUNG = | |||
DIESE ANLEITUNG IST VERALTET. KEINESFALLS VERWENDEN!! | |||
Dieses hier verwenden: | |||
https://wiki.freifunk-franken.de/w/Freifunk-Gateway_aufsetzen | |||
Hier ist grob zusammengefasst, was bei den Gateways für den KeyxchangeV2 anders ist, als bei den KeyxchangeV1 Gateways. Es sind nur Beispieldateien und müssen pro Hood unbedingt angepasst werden! Ungetestet! | Hier ist grob zusammengefasst, was bei den Gateways für den KeyxchangeV2 anders ist, als bei den KeyxchangeV1 Gateways. Es sind nur Beispieldateien und müssen pro Hood unbedingt angepasst werden! Ungetestet! | ||
Zeile 56: | Zeile 100: | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
</pre> | </pre> | ||
Hinweis: Wenn in der eigenen Konfiguration keine separate Bridge verwendet wird, muss beim Parameter -i das bat-Interface angegeben werden; also bei -i und -b das selbe Interface. | |||
==== Alfred Monitoring Proxy ==== | ==== Alfred Monitoring Proxy ==== | ||
Zeile 61: | Zeile 107: | ||
Dazu kann alfred-json von kratz00 (https://github.com/kratz00/alfred-json) in Kombination mit einem passenden curl-Skript verwenden werden. Zunächst muss alfred-json kompiliert werden (siehe README). | Dazu kann alfred-json von kratz00 (https://github.com/kratz00/alfred-json) in Kombination mit einem passenden curl-Skript verwenden werden. Zunächst muss alfred-json kompiliert werden (siehe README). | ||
Zusätzlich zu den in der Readme angegebenen Packeten muss noch make sowie pkg-config installiert werden. | |||
Danach noch das curl-Script anlegen (auf eigenes Zeug anpassen! Pfade der inneren for-loop über die Sockets prüfen!): | Danach noch das curl-Script anlegen (auf eigenes Zeug anpassen! Pfade der inneren for-loop über die Sockets prüfen!): | ||
Zeile 66: | Zeile 113: | ||
<pre> | <pre> | ||
~# cat /usr/sbin/alfred-monitoring-proxy | ~# cat /usr/sbin/alfred-monitoring-proxy | ||
</pre> | |||
<pre> | |||
#!/bin/bash | #!/bin/bash | ||
Zeile 240: | Zeile 289: | ||
== network == | == network == | ||
Für keyxchangev2 werden neue Subnetze benötigt. Jede Hood aus dem KeyxchangeV2 ist ein eigenes Subnetz aus dem 10.83.0.0/16 und muss dort auch auf der Netz Seite registriert werden. | Für keyxchangev2 werden neue Subnetze benötigt. Jede Hood aus dem KeyxchangeV2 ist ein eigenes Subnetz aus dem 10.83.0.0/16 und muss dort auch auf der [https://wiki.freifunk-franken.de/w/Portal:Netz#10.83.0.0.2F16_.28decentraliced_keyXchange_network.29.2C_dynamische_Vergabe Netz Seite] registriert werden. | ||
Dazu werden absofort auch IPv6 Netze verwendet, diese müssen auch hier registriert werden: https://wiki.freifunk-franken.de/w/Portal:Netz/IPv6 | Dazu werden absofort auch IPv6 Netze verwendet, diese müssen auch hier registriert werden: https://wiki.freifunk-franken.de/w/Portal:Netz/IPv6 | ||
Zeile 268: | Zeile 317: | ||
# zusätzliche Link Local für Hoodfile und Default-Gateway | # zusätzliche Link Local für Hoodfile und Default-Gateway | ||
post-up ip -6 addr add fe80::1/64 dev $IFACE nodad | post-up ip -6 addr add fe80::1/64 dev $IFACE nodad | ||
post-up ip -6 addr add fe80::fff:1/64 dev $IFACE nodad | |||
post-up ip -6 addr add fe80::IRGENDWAS/64 dev $IFACE | post-up ip -6 addr add fe80::IRGENDWAS/64 dev $IFACE | ||
post-up ip -6 rule add iif $IFACE table fff | post-up ip -6 rule add iif $IFACE table fff | ||
post-down ip -6 rule del iif $IFACE table fff | post-down ip -6 rule del iif $IFACE table fff | ||
# "catchall" | |||
post-up ip -6 rule add from all iif $IFACE lookup fff | |||
# ip route | # ip route | ||
post-up ip -6 route replace fd43:5602:29bd:x::/64 dev $IFACE proto static table fff | post-up ip -6 route replace fd43:5602:29bd:x::/64 dev $IFACE proto static table fff | ||
post-down ip -6 route del fd43:5602:29bd:x::/64 dev $IFACE proto static table fff | post-down ip -6 route del fd43:5602:29bd:x::/64 dev $IFACE proto static table fff | ||
post-up invoke-rc.d radvd restart | |||
Zeile 286: | Zeile 340: | ||
port-down ip link set down $IFACE | port-down ip link set down $IFACE | ||
</pre> | </pre> | ||
Die Interfaces müssen nicht manuell (ifup bla) gestartet werden, dies erledigt fastd. | |||
Jedes Interface wird an eine eigene Link Local Adresse gebunden (fe80::IRGENDWAS/64), über die es von anderen Diensten - beispielsweise radvd - angesprochen werden kann. | |||
Zeile 323: | Zeile 381: | ||
bind any:10004; | bind any:10004; | ||
# fastd need a key but we don't use them | # fastd need a key but we don't use them: generate by "fastd --generate-key" | ||
secret "c00a286249ef5dc5506945f8a3b413c0928850214661aab866715203b4f2e86a"; | secret "c00a286249ef5dc5506945f8a3b413c0928850214661aab866715203b4f2e86a"; | ||
Zeile 331: | Zeile 389: | ||
on up "/etc/fastd/up.sh"; | on up "/etc/fastd/up.sh"; | ||
on | on down "/etc/fastd/down.sh"; | ||
secure handshakes no; | secure handshakes no; | ||
Zeile 373: | Zeile 431: | ||
* Servername | * Servername | ||
* Hood | * Hood | ||
<br> | |||
Weiterhin erforderlich ist ein [[Freifunk-Gateway_aufsetzen#B.A.T.M.A.N_Gateway_Selection|B.A.T.M.A.N Gateway Selection]] Script. | |||
=== Gateways untereinander verbinden === | === Gateways untereinander verbinden === | ||
Zeile 446: | Zeile 506: | ||
'''ACHTUNG:''' Die fe80:: die bei AdvRASrcAddress eingetragen ist muss fest an das batX Interface gebunden werden. (siehe interface-config oben). Die Adresse zufällig zu generieren bietet sich an, damit die Adressen in jeder Hood eindeutig sind. | '''ACHTUNG:''' Die fe80:: die bei AdvRASrcAddress eingetragen ist muss fest an das batX Interface gebunden werden. (siehe interface-config oben). Die Adresse zufällig zu generieren bietet sich an, damit die Adressen in jeder Hood eindeutig sind. Es muss die gleiche Adresse sein, die in /etc/network/interfaces an das jeweilige batX Interface gebunden wurde. | ||
Zeile 457: | Zeile 517: | ||
== ntp Server == | == 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 | 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 | * fd43:5602:29bd:ffff::1 | ||
* fd43:5602:29bd:7d::2 | |||
* fd43:5602:29bd:ffff::42 | |||
== http == | == http == | ||
Es wird ein http Server benötigt, der auf Port 2342 das Hoodfile ausliefert. | Es wird ein http Server benötigt, der auf Port 2342 das Hoodfile ausliefert. | ||
'''<span style="color:red">Dieser Schritt sollte erst ausgeführt werden, wenn der Server im KeyXchange eingetragen ist. Sonst erhält man das Hoodfile einer falschen Hood (die richtige ist ja nicht eingetragen) und verteilt dieses u.U. weiter (= Bumm, nicht gut)! Auch ein manuelles Herunterladen ohne Cronjob hat diesen Effekt.</span>''' | |||
Das aktuellste Hoodfile kann vom keyxchangev2 bezogen werden und '''muss''' regelmäßig (Cronjob, alle 5 Minuten) auf dem Gateway aktualisiert werden. | Das aktuellste Hoodfile kann vom keyxchangev2 bezogen werden und '''muss''' regelmäßig (Cronjob, alle 5 Minuten) auf dem Gateway aktualisiert werden. | ||
Hier die ID für die Hoodfile raus suchen. | |||
http://keyserver.freifunk-franken.de/v2/hoods.php?hoodfile=1 | |||
Cronjob: | Cronjob: | ||
<pre> | <pre> | ||
*/5 * * * * wget "http://keyserver.freifunk-franken.de/v2/index.php? | */5 * * * * wget "http://keyserver.freifunk-franken.de/v2/index.php?hoodid=DEINE_HOOD_ID" -O /var/www/fuerth/keyxchangev2data | ||
</pre> | </pre> | ||
Achtung, da die Hoodfile auf allen Gateways exakt identisch sein muss, darf sie keinesfalls verändert werden (z.b. formatieren oder Zeichen hinzufügen o.ä.). | |||
'''Achtung, da die Hoodfile auf allen Gateways exakt identisch sein muss, darf sie keinesfalls verändert werden (z.b. formatieren oder Zeichen hinzufügen o.ä.).''' | |||
Die Router beziehen die Datei wechselseitig von verschiedenen Quellen (KeyXchange, Gateways, etc.). Unterscheidet sich die Checksumme, wird hier jeweils neu umkonfiguriert, was bei verschiedenen Files auf zwei GWs dann gerne mal alle 5 Minuten passiert und das Netz lokal kaputt macht. | |||
Koordinaten und Pfad müssen für jede Hood angepasst werden: | Koordinaten und Pfad müssen für jede Hood angepasst werden: | ||
http://keyserver.freifunk-franken.de/v2/hoods.php | http://keyserver.freifunk-franken.de/v2/hoods.php | ||
Mehr Details zum Hood file: [[Hood file]] | |||
===Für mehrere Hoods=== | ===Für mehrere Hoods=== | ||
Zeile 527: | Zeile 599: | ||
ip6tables -t nat -A PREROUTING -i bat1 -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2002 | ip6tables -t nat -A PREROUTING -i bat1 -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2002 | ||
ip6tables -t nat -A PREROUTING -i bat2 -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2003 | ip6tables -t nat -A PREROUTING -i bat2 -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2003 | ||
ip6tables -t nat -A PREROUTING -i bat0 -p tcp -d fe80::fff:1 --dport 2342 -j REDIRECT --to-port 2001 | |||
ip6tables -t nat -A PREROUTING -i bat1 -p tcp -d fe80::fff:1 --dport 2342 -j REDIRECT --to-port 2002 | |||
ip6tables -t nat -A PREROUTING -i bat2 -p tcp -d fe80::fff:1 --dport 2342 -j REDIRECT --to-port 2003 | |||
</pre> | </pre> | ||
===Bonus=== | ===Bonus=== | ||
Es sollte noch in jedem Hood-Verzeichnis ein File "gateway" mit dem Servernamen (z.B. "fff-hof-gw3") liegen. So kann man beim Debuggen gleich sehen, welcher Server hier lauscht. | Es sollte noch in jedem Hood-Verzeichnis ein File "gateway" mit dem Servernamen (z.B. "fff-hof-gw3") liegen. So kann man beim Debuggen gleich sehen, welcher Server hier lauscht. |
Aktuelle Version vom 10. Februar 2019, 00:19 Uhr
ACHTUNG
DIESE ANLEITUNG IST VERALTET. KEINESFALLS VERWENDEN!!
Dieses hier verwenden: https://wiki.freifunk-franken.de/w/Freifunk-Gateway_aufsetzen
Hier ist grob zusammengefasst, was bei den Gateways für den KeyxchangeV2 anders ist, als bei den KeyxchangeV1 Gateways. 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' sowohl für batctl, als auch für batman-adv eine Version größer 2013.4 ausgeben. (wie in diesem Beispiel 2017.3...)
# modprobe batman-adv && batctl -v batctl 2017.3 [batman-adv: 2017.3]
ACHTUNG: Selbst kompilierte Kernelmodule funktionieren nach einem Kernelupdate nicht mehr und müssen unbedingt neu kompiliert und eingefügt werden!
Alfred Master aufsetzen
Die Nodewatcher Daten aus dem Alfred werden nicht mehr von einer zentralen VM ans Monitoring geschickt. Das übernehmen jetzt die Gateways.
Alfred
Das Gateway muss die Daten zuerst als sogenannter Alfred-Master sammeln. Dazu muss "alfred" installiert werden. (Entweder aus den Distributionsquellen oder selbst kompilieren, funktioniert analog zum batman-adv (siehe oben))
Dann muss pro bedienter Hood (also für jedes batX Interface) ein Alfred master gestartet werden (beispielsweise mit in die Interfacekonfiguration oder wie unten als systemd-Service ...):
~# cat /etc/systemd/system/alfred-bayreuth.service [Unit] Description=Alfred Master After=network-online.target [Service] Type=simple ExecStart=/usr/sbin/alfred -m -i br-bayreuth -b bat2 -u /var/run/alfred-bayreuth.sock WorkingDirectory=/tmp RestartSec=10 Restart=always [Install] WantedBy=multi-user.target
Hinweis: Wenn in der eigenen Konfiguration keine separate Bridge verwendet wird, muss beim Parameter -i das bat-Interface angegeben werden; also bei -i und -b das selbe Interface.
Alfred Monitoring Proxy
Die gesammelten Daten müssen nun noch periodisch an das Monitoring gesendet werden.
Dazu kann alfred-json von kratz00 (https://github.com/kratz00/alfred-json) in Kombination mit einem passenden curl-Skript verwenden werden. Zunächst muss alfred-json kompiliert werden (siehe README). Zusätzlich zu den in der Readme angegebenen Packeten muss noch make sowie pkg-config installiert werden.
Danach noch das curl-Script anlegen (auf eigenes Zeug anpassen! Pfade der inneren for-loop über die Sockets prüfen!):
~# cat /usr/sbin/alfred-monitoring-proxy
#!/bin/bash api_url="https://monitoring.freifunk-franken.de/api/alfred" fetch_ids="64" for fetch_id in $fetch_ids do for socket in /var/run/alfred-*.sock do tmp=$(mktemp) echo "{\"$fetch_id\": " > $tmp alfred-json -r "$fetch_id" -s "$socket" >> $tmp echo "}" >> $tmp if [ "$zip" = "1" ]; then gzip $tmp tmp="$tmp.gz" HEADER='-H "Content-Encoding: gzip" --compressed' fi curl -v -H "Content-type: application/json; charset=UTF-8" $HEADER --data-binary @$tmp $api_url rm "$tmp" done done
Und einen passenden Cronjob dafür anlegen:
1-59/5 * * * * sleep 9; /usr/sbin/alfred-monitoring-proxy
WICHTIG: Bitte im nächsten Abschnitt den optimalen Zeitpunkt für das senden bestimmen!
Wahl des korrekten Delays (sleep)
Das Zusammenspiel zwischen nodewatcher, Alfred und Monitoring ist komplex. Entsprechend gibt es mehr und weniger sinnvolle Zeiten, wann der Alfred Master seine Daten an das Monitoring sendet. Die folgende Tabelle soll bei der Wahl eines geeigneten Delays behilflich sein.
Anstatt eines fixen Delays ist auch eine Variante mit random möglich. Die Grenzen sollten dabei die angegebenen Bereiche nicht verlassen!
WICHTIG: Sind mehrere Alfred Master in einer Hood sollten diese ihre Daten nie gleichzeitig schicken! (Empfohlener Abstand min. 5 sec.)
Wartezeit nach Erreichen von */5 | Kommentar | |
---|---|---|
0 - 50 sec. | Reservierter Zeitslot (nodewatcher)
| |
50 - 85 sec. | Empfohlener Zeitslot
| |
85 - 120 sec. | Reservierter Zeitslot (Netmon-VM)
| |
120 - 175 sec. | Möglicher Zeitslot
| |
175 - 185 sec. | Reservierter Zeitslot (Erstellung der Statistiken)
| |
185 - 300 sec. | Freier Zeitslot
|
Tipps:
Handelt es sich um mehr als eine Minute Delay, kann die Cron Syntax ausgenutzt werden:
1-59/5 * * * * Befehl
Das löst dann 00:01, 00:06, 00:11 usw. aus, also im beginnend bei 1 bis 59 in 5-er Schritten
2-59/5 * * * * Befehl
Das löst dann 00:02, 00:07, 00:12 usw. aus, also im beginnend bei 2 bis 59 in 5-er Schritten.
In Kombination mit sleep gibt es also für 130 Sekunden folgende Lösungen:
*/5 * * * * sleep 130; Befehl
oder besser:
2-59/5 * * * * sleep 10; Befehl
Zwei Minuten plus 10 Sekunden sind 130 Sekunden, aber man vermeidet den langen Sleep.
GWinfo Skript aufsetzen
Wir erhalten im Monitoring von den Routern auch Gateway-Daten, allerdings nur die MAC-Adresse des VPN Interfaces. Um dies mit den Gateway-Namen und ggf. weiteren Informationen zu unterfüttern, kann folgendes Skript verwendet und z.B. per Cron alle 5 Minuten ausgeführt werden (hier ist kein sleep o.ä. notwendig).
#!/bin/sh # # Gateway data script for FFF Monitoring # Copyright Adrian Schmutzler, 2018. # License GPLv3 # # v1.2.1 - 2018-01-12 # - Added "grep fff" to support L2TP # # v1.2 - 2018-01-12 # - Added batctl command and vpnif # # v1.1 - 2018-01-12 # - Initial Version # # Config api_url="http://monitoring.freifunk-franken.de/api/gwinfo" batctlpath=/usr/local/sbin/batctl # Adjust to YOUR path! hostname="MyHost" # Namen nicht zu lang machen, kein hostname.fff.irgendwas admin1="Admin" admin2= admin3= statslink="" # Provide link to stats page (MRTG or similar) # Code tmp=$(/bin/mktemp) echo "{\"hostname\":\"$hostname\",\"stats_page\":\"$statslink\",\"netifs\":[" > $tmp comma="" for netif in $(ls /sys/class/net); do if [ "$netif" = "lo" ] ; then continue fi mac="$(cat "/sys/class/net/$netif/address")" batctl="$("$batctlpath" -m "$netif" if | grep "fff" | sed -n 's/:.*//p')" echo "$comma{\"mac\":\"$mac\",\"netif\":\"$netif\",\"vpnif\":\"$batctl\"}" >> $tmp comma="," done echo "],\"admins\":[" >> $tmp comma="" [ -n "$admin1" ] && echo "\"$admin1\"" >> $tmp && comma="," [ -n "$admin2" ] && echo "$comma\"$admin2\"" >> $tmp && comma="," [ -n "$admin3" ] && echo "$comma\"$admin3\"" >> $tmp echo "]}" >> $tmp /usr/bin/curl -k -v -H "Content-type: application/json; charset=UTF-8" -X POST --data-binary @$tmp $api_url /bin/rm "$tmp"
Sowohl die Verwendung des Skriptes als auch welche Daten zur Verfügung gestellt werden bleibt dem Nutzer überlassen.
Soll z.B. keine stats_page angezeigt werden, einfach statslink="" einstellen.
network
Für keyxchangev2 werden neue Subnetze benötigt. Jede Hood aus dem KeyxchangeV2 ist ein eigenes Subnetz aus dem 10.83.0.0/16 und muss dort auch auf der Netz Seite registriert werden. Dazu werden absofort auch IPv6 Netze verwendet, diese müssen auch hier registriert werden: https://wiki.freifunk-franken.de/w/Portal:Netz/IPv6
/etc/network/interfaces
iface bat0 inet static address 10.83.x.1/y post-up ip rule add iif $IFACE table fff post-down ip rule del iif $IFACE table fff ## Sollten hier ip-rules für 10.0.0.0/8 oder ähnlich Interface-unabhängige Dinge stehen, ## bietet es sich an, diese anstatt dessen an das loopback Interface zu hängen, da diese ## für das ganze Freifunk-Netz gelten und entsprechend nur einmal benötigt werden und nicht ## von speziellen Interfaces abhängig sein sollten. ## Je nachdem, wie der DHCP Server gestartet wird, ist hier möglicherweise noch folgendes nötig post-up invoke-rc.d isc-dhcp-server restart # ip route post-up ip route replace 10.83.x.0/y dev $IFACE proto static table fff post-down ip route del 10.83.x.0/y dev $IFACE proto static table fff iface bat0 inet6 static address fd43:5602:29bd:x::1/64 # zusätzliche Link Local für Hoodfile und Default-Gateway post-up ip -6 addr add fe80::1/64 dev $IFACE nodad post-up ip -6 addr add fe80::fff:1/64 dev $IFACE nodad post-up ip -6 addr add fe80::IRGENDWAS/64 dev $IFACE post-up ip -6 rule add iif $IFACE table fff post-down ip -6 rule del iif $IFACE table fff # "catchall" post-up ip -6 rule add from all iif $IFACE lookup fff # ip route post-up ip -6 route replace fd43:5602:29bd:x::/64 dev $IFACE proto static table fff post-down ip -6 route del fd43:5602:29bd:x::/64 dev $IFACE proto static table fff post-up invoke-rc.d radvd restart # VPN iface ffffuerthVPN inet manual post-up batctl -m bat0 if add $IFACE post-up ip link set up $IFACE post-up ifup bat0 post-down ifdown bat0 port-down ip link set down $IFACE
Die Interfaces müssen nicht manuell (ifup bla) gestartet werden, dies erledigt fastd.
Jedes Interface wird an eine eigene Link Local Adresse gebunden (fe80::IRGENDWAS/64), über die es von anderen Diensten - beispielsweise radvd - angesprochen werden kann.
ACHTUNG: Die oben stehende Konfiguration enthält keine IP(6)-Rules, die dem Server sagen, dass er für die entsprechenden Subnetze in die fff-table gucken muss!
Am einfachsten lässt sich das durch das statische Anfügen von wenigen rules beim starten des loopback-Interfaces lösen:
iface lo inet loopback up ip rule add to 10.0.0.0/8 lookup fff up ip -6 rule add to fc00::/7 lookup fff ## Möglicherweise möchte man die gleichen rules auch nochmal als Destination-rules (from statt to) anfügen.
fastd
fastd wird komplett anders als früher konfiguriert. Das früher nötige Verwaltungsscript darf KEINESFALLS(!!) ausgeführt werden, auch der Cronjob ist nicht mehr nötig. Falls die IP noch im alten KeyXchange eingetragen ist, sollte sie hieraus unbedingt entfernt werden (KeyXchange Admin fragen) Bitte nur noch folgende Anleitung folgen:
/etc/fastd/ffffuerthVPN/fastd.conf
# Log errors to stderr log level error; # Log warnings to a log file log to syslog as "ffffuerthVPN" level warn; # Set the interface name interface "ffffuerthVPN"; # Disable encryption method "null"; # Bind to a fixed port, IPv4 only bind any:10004; # fastd need a key but we don't use them: generate by "fastd --generate-key" 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/up.sh"; on down "/etc/fastd/down.sh"; secure handshakes no; on verify "/etc/fastd/verify.sh";
/etc/fastd/down.sh
#!/bin/sh /sbin/ifdown $INTERFACE
/etc/fastd/up.sh
#!/bin/sh /sbin/ifup $INTERFACE
/etc/fastd/verify.sh
#!/bin/sh return 0
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 des Gateways
- 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
Weiterhin erforderlich ist ein B.A.T.M.A.N Gateway Selection Script.
Gateways untereinander verbinden
Die Gateways sollten sich im Hood-Layer2 auch noch untereinander verbinden, das ist aktuell noch nicht umgesetzt.
babel
siehe hier
GRE Tunnel
Die GRE Tunnel brauchen nun auch eine IPv6 aus dem Transfernetz. (siehe babel-Seite oben)
Es müssen dann noch folgende IP-Rules existieren (beispielsweise wie oben beschrieben am loopback-Interface):
- from all to fc00::/7 lookup fff
- from fc00::/7 lookup fff
radvd
Damit radvd nicht die fe80::1 als Source-IP verwendet (geht ziemlich kaputt), muss mindestens Version 2.16 installiert sein. Das kann man so überprüfen:
radvd -v
In den Debian 9 Packetquellen wird leider noch 2.15 ausgeliefert.
Man kann radvd aber aus Debian 10 (aktuell testing) backporten.
Damit nicht alle Pakete auf die buster-Version aktualisiert werden:
/etc/apt/preferences.d/limit-buster
Package: * Pin: release n=buster Pin-Priority: 150
Dann die buster Packetquellen einfügen:
/etc/apt/sources.d/buster.list
deb http://ftp.de.debian.org/debian/ buster main
Und radvd installieren:
apt-get update apt-get -t buster install radvd
radvd muss dann in jeder Hood Router Advertisements senden und die entsprechende ULA als Autonomous Prefix announcen:
/etc/radvd.conf
interface bat0 { AdvSendAdvert on; AdvDefaultLifetime 0; AdvRASrcAddress { fe80::IRGENDWAS; }; prefix fd43:5602:29bd:x::/64 { AdvOnLink on; AdvAutonomous on; }; route fc00::/7 { }; };
ACHTUNG: Die fe80:: die bei AdvRASrcAddress eingetragen ist muss fest an das batX Interface gebunden werden. (siehe interface-config oben). Die Adresse zufällig zu generieren bietet sich an, damit die Adressen in jeder Hood eindeutig sind. Es muss die gleiche Adresse sein, die in /etc/network/interfaces an das jeweilige batX Interface gebunden wurde.
AdvRASrcAddress ist nötig, damit die Router Advertisements nicht von der fe80::1 gesendet werden. Denn wenn zwei Gateways verschiedene Router Advertisements von der gleichen Link Local Adresse senden, sind die Clients verwirrt und es kommt unter Umständen zu einer instabilen Verbindung.
systemctl restart radvd
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
- fd43:5602:29bd:7d::2
- fd43:5602:29bd:ffff::42
http
Es wird ein http Server benötigt, der auf Port 2342 das Hoodfile ausliefert.
Dieser Schritt sollte erst ausgeführt werden, wenn der Server im KeyXchange eingetragen ist. Sonst erhält man das Hoodfile einer falschen Hood (die richtige ist ja nicht eingetragen) und verteilt dieses u.U. weiter (= Bumm, nicht gut)! Auch ein manuelles Herunterladen ohne Cronjob hat diesen Effekt.
Das aktuellste Hoodfile kann vom keyxchangev2 bezogen werden und muss regelmäßig (Cronjob, alle 5 Minuten) auf dem Gateway aktualisiert werden.
Hier die ID für die Hoodfile raus suchen. http://keyserver.freifunk-franken.de/v2/hoods.php?hoodfile=1
Cronjob:
*/5 * * * * wget "http://keyserver.freifunk-franken.de/v2/index.php?hoodid=DEINE_HOOD_ID" -O /var/www/fuerth/keyxchangev2data
Achtung, da die Hoodfile auf allen Gateways exakt identisch sein muss, darf sie keinesfalls verändert werden (z.b. formatieren oder Zeichen hinzufügen o.ä.).
Die Router beziehen die Datei wechselseitig von verschiedenen Quellen (KeyXchange, Gateways, etc.). Unterscheidet sich die Checksumme, wird hier jeweils neu umkonfiguriert, was bei verschiedenen Files auf zwei GWs dann gerne mal alle 5 Minuten passiert und das Netz lokal kaputt macht.
Koordinaten und Pfad müssen für jede Hood angepasst werden: http://keyserver.freifunk-franken.de/v2/hoods.php
Mehr Details zum Hood file: Hood file
Für mehrere Hoods
Man benötigt einen Webserver, der (für die gleiche Adresse) für verschiedene Interfaces verschiedene Dateien ausliefern kann.
Am einfachsten ist das zu realisieren, indem man den Webserver auf mehreren Ports lauschen lässt und aus und Pakete vom jeweiligen batX Port 2342 auf den jeweiligen Port redirected.
Beispiel nginx:
~# cat /etc/nginx/sites-enabled/nuernberg server { listen [::]:2001; root /var/www/fuerth; }
Für weitere Hoods analog.
Beispiel Apache:
~# cat /etc/apache2/ports.conf Listen 2001 Listen 2002 . . ~# cat /etc/apache2/sites-available/bat.conf: <VirtualHost *:2001> ServerAdmin webmaster@localhost DocumentRoot /var/www/fuerth ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <VirtualHost *:2002> ServerAdmin webmaster@localhost DocumentRoot /var/www/nuernberg ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> . . ~# a2ensite bat
Und dann braucht man noch die entsprechenden Redirects.
Diese müssen entweder mit iptables-persistent reboot-safe gemacht werden oder irgendwie anders zuverlässig beim Serverstart eingetragen werden (z.B. an die batX interface-config anhängen)
ip6tables -t nat -A PREROUTING -i bat0 -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2001 ip6tables -t nat -A PREROUTING -i bat1 -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2002 ip6tables -t nat -A PREROUTING -i bat2 -p tcp -d fe80::1 --dport 2342 -j REDIRECT --to-port 2003 ip6tables -t nat -A PREROUTING -i bat0 -p tcp -d fe80::fff:1 --dport 2342 -j REDIRECT --to-port 2001 ip6tables -t nat -A PREROUTING -i bat1 -p tcp -d fe80::fff:1 --dport 2342 -j REDIRECT --to-port 2002 ip6tables -t nat -A PREROUTING -i bat2 -p tcp -d fe80::fff:1 --dport 2342 -j REDIRECT --to-port 2003
Bonus
Es sollte noch in jedem Hood-Verzeichnis ein File "gateway" mit dem Servernamen (z.B. "fff-hof-gw3") liegen. So kann man beim Debuggen gleich sehen, welcher Server hier lauscht.