Freifunk-Gateway aufsetzen/VPN/fastd: Unterschied zwischen den Versionen

Aus Freifunk Franken
Wechseln zu:Navigation, Suche
(37 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
= fastd =
== Funktion ==
fastd ist eine Möglichkeit die Freifunk Knoten per Tunnel mit dem Gateway zu verbinden.


== Funktion ==
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 ist eine Möglichkeit die Freifunk Knoten per VPN mit dem Gateway zu verbinden. Fastd ist ein PtMP VPN Tool, es wird am Server nur ein Interface erzeugt über das sich alle Knoten verbinden. Als alternative bietet sich das schnellere l2tp an welches bereits ebenfalls in der Firmware enthalten ist:
https://wiki.freifunk-franken.de/w/Freifunk-Gateway_aufsetzen/VPN/l2tp


fastd wird komplett anders als früher konfiguriert.
fastd wird komplett anders als früher konfiguriert.</br>
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)
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 ==
== Installation ==
Zeile 12: Zeile 11:
fastd kann aus den Paketquellen installiert werden
fastd kann aus den Paketquellen installiert werden


== Beispiel Konfiguation ==
Debian:
<pre>
apt install fastd
</pre>


/etc/fastd/ffffuerthVPN/fastd.conf
== Konfiguation ==
 
=== fastd ===
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 20: Zeile 27:


# Log warnings to a log file
# Log warnings to a log file
log to syslog as "ffffuerthVPN" level warn;
log to syslog as "fastd-nuernberg" level warn;


# Set the interface name
# Set the interface name
interface "ffffuerthVPN";
interface "fastd-nuernberg";


# Disable encryption
# Disable encryption
method "null";
method "null";


# Bind to a fixed port, IPv4 only
# Bind to any IPv4 and IPv6 address with a fixed port
bind any:10004;
bind any:10004;


# fastd need a key but we don't use them: generate by "fastd --generate-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";
# to show the public key for the keyxchange Admin use:
# fastd -c /etc/fastd/bla/bla.conf --show-key


# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)
# See https://fastd.readthedocs.io/en/v18/manual/mtu.html
# (see MTU selection documentation)
# Must not be changed! It has to be the same for both server and all clients.
mtu 1426;
mtu 1426;


# Skript starten, sobald fastd Interface angelegt ist. Damit wird es zu batman hinzugefügt.
on up "/etc/fastd/up.sh";
on up "/etc/fastd/up.sh";
on down "/etc/fastd/down.sh";
on down "/etc/fastd/down.sh";
Zeile 63: Zeile 72:




/etc/fastd/verify.sh  
/etc/fastd/verify.sh
<pre>
<pre>
#!/bin/sh
#!/bin/sh
Zeile 69: Zeile 78:
</pre>
</pre>


und noch den Service anlegen:
 
/etc/systemd/systemfastdbat2.service
Die Skripte müssen ausführbar gemacht werden:
<pre>
chmod +x /etc/fastd/*.sh
</pre>
 
=== fastd ifupdown ===
Zudem muss eine passende ifupdown Interfacekonfiguration angelegt werden, die das fastd-Interface zu batman-adv hinzufügt.</br>
(vgl. [[Freifunk-Gateway_aufsetzen/Batman-adv#Konfiguration]])
<pre>
<pre>
[Unit]
# Fastd Interface
Description=fastd
iface fastd-nuernberg inet manual
pre-up batctl -m bat-nuernberg if add $IFACE
post-down batctl -m bat-nuernberg if del $IFACE


[Service]
up ip link set up $IFACE
ExecStart=/usr/bin/fastd -c /etc/fastd/fff.bat2/fff.bat2.conf
down ip link set down $IFACE
Type=simple
</pre>


[Install]
<i>Hinweis:</i> Die MTU des fastd Interfaces darf nicht verstellt (vergrößert) werden, diesbezügliche Laufzeitmeldungen von batman_adv müssen ignorieret werden. Weil durch das Internet nur 1500 Byte MTU durchpassen und man daher den Tunnel nicht größer machen kann, bleiben für batman-adv leider nur 1500 - $Tunneloverhead Bytes übrig.
WantedBy=multi-user.target
<br>
 
=== fastd Dienst ===
Dann muss für jede Hood der fastd-Dienst aktiviert und gestartet werden.
<pre>
systemctl enable fastd@<hoodname>
systemctl start fastd@<hoodname>
</pre>
</pre>


== Testen der Konfiguration ==


danach:
nachdem der Service gestartet ist, sollte mit
<pre>
ip -c link show
</pre>
Sowohl das Batman als auch das VPN Interface zu sehen sein.
 
== fastd socket ==


Scripte ausführbar machen:
fastd bietet die Möglichkeit den Status über einen Socket abzufragen.
 
Dazu in der Konfigurationsdatei folgende Zeile einfügen:
<pre>
<pre>
chmod +x /etc/fastd/*.sh
status socket "/run/fastd-HOOD.sock";
</pre>
 
Mit netcat kann man die Daten daraus abfragen.
<pre>
nc -U /run/fastd-HOOD.sock
</pre>
 
=== JSON-Parser ===
Mit dem Tool jq (apt install jq) kann das json geparsed werden.
 
==== Suche nach einem Key ====
<pre>
nc -U /run/fastd-HOOD.sock | jq . | grep -A35 1f5111cfa36b11
</pre>
 
==== Anzeigen der Adressen aller aktuell verbundenen Clients ====
<pre>
nc -U /run/fastd-HOOD.sock | jq .peers[].address
</pre>
 
== 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.:
<pre>
on verify "/etc/fastd/fff.bat3/fastd-blacklist.sh $PEER_KEY $PEER_ADDRESS";
</pre>
</pre>
Dienst aktivieren und starten
das fastd-blacklist.sh kann dann z.b. so aussehen:
<pre>
<pre>
systemctl enable fastdbat2
#!/bin/bash
systemctl start fastdbat2
echo $1 >> /tmp/bla
echo $2 >> /tmp/bla
if [ $1 == xxx ]; then
  exit 1
else
  exit 0
fi
</pre>
</pre>


== Gateways untereinander verbinden ==
=== Zuordnung ===
Die Gateways sollten sich im Hood-Layer2 auch noch untereinander verbinden, das ist aktuell noch nicht umgesetzt.
 
''Eventuell ist dies doch nicht nötig''
IP zu MAC lässt sich über Ping + ip -4/-6 neigh zuordnen.
 
Falls die MAC nicht im fastd bekannt ist, kann ein batman-traceroute helfen.

Version vom 7. September 2019, 21:58 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

fastd

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

fastd ifupdown

Zudem muss eine passende ifupdown Interfacekonfiguration angelegt werden, die das fastd-Interface zu batman-adv hinzufügt.
(vgl. Freifunk-Gateway_aufsetzen/Batman-adv#Konfiguration)

# Fastd Interface
iface fastd-nuernberg inet manual
	pre-up batctl -m bat-nuernberg if add $IFACE
	post-down batctl -m bat-nuernberg if del $IFACE

	up ip link set up $IFACE
	down ip link set down $IFACE

Hinweis: Die MTU des fastd Interfaces darf nicht verstellt (vergrößert) werden, diesbezügliche Laufzeitmeldungen von batman_adv müssen ignorieret werden. Weil durch das Internet nur 1500 Byte MTU durchpassen und man daher den Tunnel nicht größer machen kann, bleiben für batman-adv leider nur 1500 - $Tunneloverhead Bytes übrig.

fastd Dienst

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";

Mit netcat kann man die Daten daraus abfragen.

nc -U /run/fastd-HOOD.sock

JSON-Parser

Mit dem Tool jq (apt install jq) kann das json geparsed werden.

Suche nach einem Key

nc -U /run/fastd-HOOD.sock | jq . | grep -A35 1f5111cfa36b11

Anzeigen der Adressen aller aktuell verbundenen Clients

nc -U /run/fastd-HOOD.sock | jq .peers[].address

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

Zuordnung

IP zu MAC lässt sich über Ping + ip -4/-6 neigh zuordnen.

Falls die MAC nicht im fastd bekannt ist, kann ein batman-traceroute helfen.