Einrichtung eines Freifunk Gateways mithilfe von fastd + batman-adv + isc-dhcp-server + bind9
Diese Freifunk Gateway Installationsanleitung bezieht sich auf die Einrichtung eines neuen Gateway im Freifunk Kassel Netzwerk. Sie kann recht einfach für andere Communities adaptiert werden.
Inhaltsverzeichnis
- Debian Installation
1.1 Manuell
1.2 Automatisch - DigitalOcean - Installation von batman-adv, batctl und fastd
2.1 Vorbereitung
2.2 fastd installieren
2.3 batman-adv & batctl installieren - Einrichtung von DHCP, DNS, fastd & batman-adv
3.1 DHCP & DNS & IPv6-RA mit isc-dhcp-server, bind9 und radvd einrichten
3.2 fastd, batman-adv einrichten - Starten der Dienste
- Changelog
Debian Installation
Debian Installation -- Manuell
Zuerst installieren wir Debian in der Version 9.3 auf einer virtuellen Maschine (oder überlassen dies einem VPS-Hoster).
Folgende Einstellungen sollte man wählen:
Hostname: uniksgw
Domain name: ffks.de
Root Passwort muss gesetzt werden.
User erstellen und Passwort setzen.
Für die Festplatten nutze ich immer die einfache Partitionierung ohne LVM und lege alle Daten in eine einzige Partition ab.
Bei der Zusammenfassung der Partitionen kann man die Installation mit "Finish partitioning and write changes to disk" starten.
Die Desktopumgebung kann abgewählt werden, es wird jedoch der SSH-Server dringend benötigt.
Nach der Installation kann mit der Einrichtung fortgesetzt werden.
Debian Installation -- Automatisch
Hier die automatische Installation mal mit DigitalOcean gezeigt:
Installation von batman-adv, batctl und fastd
Vorbereitung
Sobald Debian vollständig installiert ist, müssen nur noch folgende Befehle ausgeführt werden:
apt update
apt install libuecc-dev libsodium-dev bison pkg-config libcap-dev libjson-c-dev libssl-dev git build-essential cmake linux-headers-$(uname -r) libnl-3-dev libnl-genl-3-dev isc-dhcp-server bind9 dnsutils radvd
Ich hab es gern einen Unterordner für alles an Quellcode zu haben:
mkdir src
cd src
Es muss unter anderem auch die neue Routingtabelle "ffks" hinzugefügt werden:
echo "110 ffks" >> /etc/iproute2/rt_tables
fastd installieren
Anschließend braucht man die Umgebung einrichten, fastd kompilieren und installieren:
batman-adv & batctl installieren
Damit ist fastd installiert. Wir fahren mit dem batman-adv Kernelmodul und dem Konfigurationstool batctl fort:
Das ganze sollte ohne Fehler oder jegliche Probleme durchlaufen. Anschließend kann das Modul mit modprobe batman-adv
geladen werden.
An dieser Stelle empfehle ich unteranderem einen Systemneustart mit reboot
.
Einrichtung von DHCP, DNS, fastd & batman-adv
DHCP & DNS mit isc-dhcp-server und bind9 einrichten
Einrichtung von DHCP:
/etc/dhcp/dhcpd.conf:
authoritative;
subnet 10.54.0.0 netmask 255.255.0.0 {
range 10.54.200.1 10.54.219.255;
interface "bat0";
default-lease-time 3600;
max-lease-time 3600;
option routers 10.54.20.1;
option domain-name-servers 10.54.20.1;
option domain-name "ffks";
option broadcast-address 10.54.255.255;
option subnet-mask 255.255.0.0;
}
Bind9 als DNS-Server einrichten:
cd /etc/bind/
mkdir zones
Folgendes in die Datei /etc/bind/named.conf.local hinzufügen:
zone "ffks" {
type master;
file "/etc/bind/zones/db.ffks";
};
zone "54.10.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.10.54";
};
/etc/bind/zones/db.ffks:
;
; BIND data file for ffks
;
$ORIGIN ffks.
$TTL 86400
@ IN SOA gw-10. admin.gw-10. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS gw-10.ffks.
; APs
ap IN A 10.54.0.1
ap IN AAAA fdca:55e1:baca:baca::1
; Gateways
gw-01 IN A 10.54.1.1
gw-01 IN AAAA fdca:55e1:baca:baca::1:1
gw-04 IN A 10.54.4.1
gw-04 IN AAAA fdca:55e1:baca:baca::4:1
gw-07 IN A 10.54.7.1
gw-07 IN AAAA fdca:55e1:baca:baca::7:1
gw-10 IN A 10.54.10.1
gw-10 IN AAAA fdca:55e1:baca:baca::10:1
; Server
web-01 IN A 46.38.240.62
web-01 IN AAAA 2a03:4000:7:96::1
; DIENSTE
dl IN CNAME web-01.ffks.
map IN CNAME web-01.ffks.
pad IN CNAME web-01.ffks.
stats IN CNAME web-01.ffks.
api IN CNAME web-01.ffks.
/etc/bind/zones/db.10.54:
;
; BIND reverse data file for ffks
;
$TTL 86400
@ IN SOA gw-10. admin.gw-10. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS gw-10.ffks.
1.1 IN PTR gw-01.ffks.
1.4 IN PTR gw-04.ffks.
1.7 IN PTR gw-07.ffks.
1.10 IN PTR gw-10.ffks.
In der /etc/bind/named.conf.options entfernen wir das Kommentar bei forwarders
und tragen statt der 0.0.0.0
einen selbst gewählten DNS-Server. In meinem Fall werde ich CloudFlare's Public-DNS Dienst nutzen, notiere dort also 1.1.1.1
.
Außerdem muss unter der Option listen-on-v6 { any; };
noch die Option allow-query { any; };
stehen. Damit ist der DNS-Server von jeder IP-Adresse erreichbar. Dies ist zwar nicht unbedingt empfohlen für Server, die Absicherung eines DNS-Servers wird in Zukunft folgen.
fastd, batman-adv einrichten
Der VPN-Dienst fastd wird eine Konfigurationsdatei bekommen. Darin werden die erforderlichen Interfaces behandelt. Es werden die IP-Adressen eingerichtet, die Interfaces an das B.A.T.M.A.N. Advanced Routingprotokoll angebunden und die erforderlichen DHCP, DNS Dienste gestartet.
Zuerst müssen wir das Verzeichnis für die Konfiguration anlegen: mkdir -p /etc/fastd/ffks_vpn/
Damit fastd arbeiten kann, benötigt es ein ein Schlüsselpaar. Dieses erzeugt man mit dem Befehl fastd --generate-key
. Der Output sieht folgendermaßen aus:
2018-04-23 20:54:21 +0200 --- Info: Reading 32 bytes from /dev/random...
Secret: 0098db34a0ac445c51ca79b52d54d9a2ea50a3e64d1db21c68a9e034cbaeff67
Public: b600b91b47c11402c9793936d00a6c29e1cafec5e13b3133177262f626b8ee7f
WICHTIG: Beide Keys müssen aufbewahrt werden! Den Secret Key sollte man logischerweise vertraulich behandeln und unter keinen Umständen in Fremde Hände gelangen lassen!
Anschließend editieren wir die Datei /etc/fastd/ffks_vpn/fastd.conf
. Der Secret muss aus dem vorherigem Befehl entnommen und in die Datei eingepflegt werden.
# Log to stderr (will be picked up by systemd)
log to stderr level debug2;
hide ip addresses yes;
hide mac addresses yes;
interface "ffks-vpn";
method "salsa2012+gmac";
method "salsa2012+umac";
bind any:10000;
secret "0098db34a0ac445c51ca79b52d54d9a2ea50a3e64d1db21c68a9e034cbaeff67";
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)
# (see MTU selection documentation)
mtu 1312;
include peers from "gateways";
# Node peer configuration (https://github.com/freifunkks/fastd-keys)
include peers from "nodes";
on up "
ip link set dev $INTERFACE address 56:ae:94:47:77:20
ip link set dev $INTERFACE up
batctl if add $INTERFACE
ip link set dev bat0 address 56:ae:94:47:76:20
ip link set dev bat0 mtu 1500
ip link set dev bat0 up
ip addr add 10.54.20.1/16 dev bat0
ip addr add fdca:55e1:baca:baca::20:1/64 dev bat0
sysctl -w net.ipv6.conf.all.forwarding=1
systemctl restart radvd
systemctl restart openvpn@perfectprivacy.service
systemctl restart isc-dhcp-server.service
systemctl restart bind9.service
batctl gw_mode server 200mbit/200mbit
# bash /opt/mesh-announce/respondd.sh
";
on down "
batctl gw_mode off
systemctl stop isc-dhcp-server.service
systemctl stop bind9.service
ip link set bat0 down
batctl if del $INTERFACE
ip link set dev $INTERFACE down
";
Hinterher müssen noch die Nodes auf dem Gateway eingetragen werden:
cd /etc/fastd/ffks_vpn/
git clone https://github.com/freifunkks/fastd-keys.git nodes
Falls keine weiteren Gateways vorhanden sind, muss die Zeile include peers from "gateways";
entfernt werden.
Damit fastd automatisch starten kann, benötigt man ein systemd-Service File:
cat <<EOF > /lib/systemd/system/fastd@.service
[Unit]
Description=Fast and Secure Tunnelling Daemon (connection %I)
After=network.target
[Service]
Type=notify
ExecStart=/usr/local/bin/fastd --syslog-level info --syslog-ident fastd@%I -c /etc/fastd/%I/fastd.conf
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable fastd@ffks_vpn.service
radvd für die Vergabe von IPv6-Adressen aktivieren
Die radvd Konfiguration /etc/radvd.conf
ist kurz und einfach einzurichten:
interface bat0
{
AdvSendAdvert on;
prefix fdca:55e1:baca:baca::/64 {
AdvOnLink on;
AdvAutonomous on;
};
};
Starten der Dienste
Mit dem Befehl systemctl start fastd@ffks_vpn.service
lassen sich nun alle Dienste starten. Nach dieser Anleitung ist das Gateway startklar. Es fehlt nur noch die Internetanbindung. Dies werde ich in einem einzelnen Beitrag genauer erklären.
Ich hoffe du hast es bis hierhin geschafft und ich wünsche frohes Freifunken :)
Bei Fragen stehe ich gern via Mail zur Verfügung:
- www [ät] danielrippen [döt] de -
Changelog
2020-07-08: systemd Service hinterlegt; Gist's aktualisiert mit aktuellen Versionen & anderem Git Pfad; Für Debian 10 geprüft
2018-06-25: Skripte zur Installation von fastd & batman-adv nach GitHub Gist verlegt