Freifunk-Gateway aufsetzen/VPN/fastd: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
Zeile 18: | Zeile 18: | ||
== Konfiguation == | == Konfiguation == | ||
Für jede Hood muss eine eigene fastd Konfiguration in einem eigenen Unterordner in '''/etc/fastd/<hoodname>/fastd.conf''' angelegt werden. | |||
Die Konfiguration sollte etwa so aussehen: | |||
<pre> | <pre> | ||
# Log errors to stderr | # Log errors to stderr | ||
Zeile 29: | Zeile 26: | ||
# Log warnings to a log file | # Log warnings to a log file | ||
log to syslog as " | log to syslog as "fastd-nuernberg" level warn; | ||
# Set the interface name | # Set the interface name | ||
interface " | interface "fastd-nuernberg"; | ||
# Disable encryption | # Disable encryption | ||
method "null"; | method "null"; | ||
# Bind to a fixed port | # Bind to any IPv4 and IPv6 address with a fixed port | ||
bind any:10004 | bind any:10004; | ||
# fastd needs a key | # fastd needs a key despite the disabled encryption. generate with "fastd --generate-key" | ||
# | # | ||
# Der öffentliche Schlüssel für die KeyXchange Admins kann | |||
# mit "fastd -c /etc/fastd/<hoodname>/fastd.conf --show-key" angezeigt werden. | |||
secret "c00a286249ef5dc5506945f8a3b413c0928850214661aab866715203b4f2e86a"; | secret "c00a286249ef5dc5506945f8a3b413c0928850214661aab866715203b4f2e86a"; | ||
# | # See https://fastd.readthedocs.io/en/v18/manual/mtu.html | ||
# | # Must not be changed! It has to be the same for both server and all clients. | ||
mtu 1426; | mtu 1426; | ||
on up "/etc/fastd | # Skript starten, sobald fastd Interface angelegt ist. Damit wird es zu batman hinzugefügt. | ||
on down "/etc/fastd | on up "/etc/fastd/up.sh"; | ||
on down "/etc/fastd/down.sh"; | |||
secure handshakes no; | secure handshakes no; | ||
on verify "/etc/fastd | on verify "/etc/fastd/verify.sh"; | ||
</pre> | </pre> | ||
/etc/fastd | /etc/fastd/down.sh | ||
<pre> | <pre> | ||
#!/bin/sh | #!/bin/sh | ||
Zeile 66: | Zeile 64: | ||
/etc/fastd | /etc/fastd/up.sh | ||
<pre> | <pre> | ||
#!/bin/sh | #!/bin/sh | ||
Zeile 73: | Zeile 71: | ||
/etc/fastd | /etc/fastd/verify.sh | ||
<pre> | <pre> | ||
#!/bin/sh | #!/bin/sh | ||
Zeile 80: | Zeile 78: | ||
Die Skripte müssen ausführbar gemacht werden: | |||
<pre> | <pre> | ||
chmod +x /etc/fastd | chmod +x /etc/fastd/*.sh | ||
</pre> | </pre> | ||
Dienst | |||
Dann muss für jede Hood der fastd-Dienst aktiviert und gestartet werden. | |||
<pre> | <pre> | ||
systemctl enable fastd@ | systemctl enable fastd@<hoodname> | ||
systemctl start fastd@ | systemctl start fastd@<hoodname> | ||
</pre> | </pre> | ||
== Testen der Konfiguration == | == Testen der Konfiguration == |
Version vom 23. Juni 2019, 16:30 Uhr
Funktion
fastd ist eine Möglichkeit die Freifunk Knoten per Tunnel mit dem Gateway zu verbinden.
fastd wird bei uns Punkt-zu-Multipunkt (PtMP) verwendet, daher wird am Server nur ein Interface für alle Clients einer Hood benötigt.
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 des Gateways noch im alten KeyXchange eingetragen ist, sollte sie unbedingt entfernt werden (KeyXchange Admin fragen)
Installation
fastd kann aus den Paketquellen installiert werden
Debian:
apt install fastd
Konfiguation
Für jede Hood muss eine eigene fastd Konfiguration in einem eigenen Unterordner in /etc/fastd/<hoodname>/fastd.conf angelegt werden.
Die Konfiguration sollte etwa so aussehen:
# Log errors to stderr log level error; # Log warnings to a log file log to syslog as "fastd-nuernberg" level warn; # Set the interface name interface "fastd-nuernberg"; # Disable encryption method "null"; # Bind to any IPv4 and IPv6 address with a fixed port bind any:10004; # fastd needs a key despite the disabled encryption. generate with "fastd --generate-key" # # Der öffentliche Schlüssel für die KeyXchange Admins kann # mit "fastd -c /etc/fastd/<hoodname>/fastd.conf --show-key" angezeigt werden. secret "c00a286249ef5dc5506945f8a3b413c0928850214661aab866715203b4f2e86a"; # See https://fastd.readthedocs.io/en/v18/manual/mtu.html # Must not be changed! It has to be the same for both server and all clients. mtu 1426; # Skript starten, sobald fastd Interface angelegt ist. Damit wird es zu batman hinzugefügt. 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
Die Skripte müssen ausführbar gemacht werden:
chmod +x /etc/fastd/*.sh
Dann muss für jede Hood der fastd-Dienst aktiviert und gestartet werden.
systemctl enable fastd@<hoodname> systemctl start fastd@<hoodname>
Testen der Konfiguration
nachdem der Service gestartet ist, sollte mit
ip -c link show
Sowohl das Batman als auch das VPN Interface zu sehen sein.
fastd socket
fastd bietet die Möglichkeit den Status über einen Socket abzufragen.
Dazu in der Konfigurationsdatei folgende Zeile einfügen:
status socket "/run/fastd-HOOD.sock";
In den Sources unter doc/examples/ findet man ein kleines Perlskript status.pl, mit dem man das Socket auslesen kann.
#!/usr/bin/perl -w use strict; use IO::Socket::UNIX qw( SOCK_STREAM ); $ARGV[0] or die("Usage: status.pl <socket>\n"); my $socket = IO::Socket::UNIX->new( Type => SOCK_STREAM, Peer => $ARGV[0], ) or die("Can't connect to server: $!\n"); foreach my $line (<$socket>) { print $line; }
Mit dem tool jq (apt install jq) Kann man sich die Ausgabe leserlich anzeigen lassen und im json suchen.
Beispiel; Suche nach einem Key:
status.pl /run/fastd-HOOD.sock | jq . | grep -A35 1f5111cfa36b11
Einzelne Router sperren
Folgende Variablen werden in die fastd config übertragen:
- LOCAL_ADDRESS: the local IP address
- LOCAL_PORT: the local UDP port
- PEER_ADDRESS: the peer’s IP address
- PEER_PORT: the peer’s UDP port
- PEER_NAME: the peer’s name in the local configuration
- PEER_KEY: the peer’s public key
Diese können am on-verify angehangen werden z.b.:
on verify "/etc/fastd/fff.bat3/fastd-blacklist.sh $PEER_KEY $PEER_ADDRESS";
das fastd-blacklist.sh kann dann z.b. so aussehen:
#!/bin/bash echo $1 >> /tmp/bla echo $2 >> /tmp/bla if [ $1 == xxx ]; then exit 1 else exit 0 fi
Somit erhält man in /tmp/bla eine File mit fastd keys (die man leider zu gar nix zuordnen kann und daher auch keine bösen Router darüber finden kann) und eine Reihe IP Adressen die man leider auch zu keinen Router zu ordnen kann. Wenn man nun einen bösen Router im fastd sperren will, kann man nun einzeln die IPs per iptables vom Server sperren und im Batman gucken ob er weg ist. Alles unschön aber einen besseren Weg hab ich bisher nicht gefunden. $PEER_NAME ist leider leer und kann auch für nichts verwendet werden... Allgemein ist das Problem, das man eine Batman-adv MAC nirgens zu einer fastd MAC oder irgendwas zuordnen kann. Daher ist aktuell der einzige Weg ausprobieren... mit exit != 0 kann man Router auch direkt im fastd sperren, dies erledigt das Script auch, wenn man xxx durch den Routerkey anpasst