Wiki - Freifunk Pinneberg

Freies WLAN im Kreis Pinneberg

Benutzer-Werkzeuge

Webseiten-Werkzeuge


gateway_installation_debian_12

Dies ist eine alte Version des Dokuments!


Gateway Installationsanleitung für Debian 12

Diese Anleitung soll zeigen wie ein Gateway unter Debian 12 installiert wird. Die Anleitung basiert auf der alten Anleitung zur Installation unter Debian 9. Der Teufel liegt allerdings oft im Detail, und über die Debian Versionen haben sich manche Details geändert.

!!! WORK IN PROGRESS !!!

Die anleitung geht davon aus das wir bereits mit root rechten unterwegs sind.

Die wichtigsten Pakete aus den Paketquellen installieren.

apt-get install isc-dhcp-server radvd bridge-utils iptables-persistent libcap2-bin haveged ntp incron sudo vnstat vnstati bind9 lsb-release sysstat iotop rsync

Zusätzlich brauchen wir noch einen http Server. Falls nur gateway betrieb gewünscht ist, und sonst nichts übers web gemacht wird, genügt lighttpd. apt-get install lighttpd Wenn noch andere Webtools genutzt werden sollen, empfiehlt sich Apache2 apt-get install apache2

NTP

Zeitservice (NTP) auf spezielle Schnittstellen beschränken

/etc/ntp.conf
interface listen lo
interface listen enp0s1
interface listen br-ffpi

Routing

Siehe auch Routing

/etc/iproute2/rt_tables
[...]
42      freifunk

Alfred

Daten für die Karte (Meshviewer) bereitstellen (alfred-announced)

mkdir /etc/alfred

Beispielhafte json Datei, bitte Werte entsprechend anpassen.

/etc/alfred/statics.json
{
    "node": {
	"node_id": "gate03",
        "hostname": "Thesdorfer Tor",
        "location": {
            "longitude": "11.612279",
            "latitude": "50.949691"
        },
        "owner": {
          "contact": "Havelock"
        },
        "system": {
          "site_code": "ffpi",
          "role": "gate"
        }
    },
    "statistics": {
        "node_id": "gate03"
    }
}

Mesh-VPN mit fastd

Fastd kann aus den Paketen von Debian installiert werden. apt-get install fastd

Konfigurationsschritte

Nutzer für fastd anlegen

adduser --system --group --uid 300 --shell /bin/sh --disabled-password --gecos 'Fast and Secure Tunneling Daemon' --no-create-home --home /etc/fastd fastd

Ordner und blanko Dateien für SSH anlegen

mkdir /etc/fastd
mkdir /etc/fastd/.ssh
chmod 700 /etc/fastd/.ssh
touch /etc/fastd/.ssh/authorized_keys
chmod 600 /etc/fastd/.ssh/authorized_keys

fastd Verzeichnisstruktur erstellen

mkdir -p /etc/fastd/ffpi/peers
mkdir /etc/fastd/ffpi/backbone
chown -R fastd:fastd /etc/fastd

fastd keys generieren

fastd --generate-key > /etc/fastd/keys
chmod 600 /etc/fastd/keys

Nun die Konfiguration für fastd erstellen.

/etc/fastd/ffpi/fastd.conf
log level warn;
log to syslog level info;
interface "mesh-vpn";
method "salsa2012+umac";
method "salsa2012+gmac";
bind 0.0.0.0:10000;
include "secret.conf";
secure handshakes yes;
mtu 1426;
user "fastd";
group "fastd";
hide ip addresses yes;
hide mac addresses yes;
 
include peers from "backbone";
include peers from "peers";
peer limit 200;
 
status socket "/var/run/fastd/ffpi.sock";
 
on up "
# ip link set dev $INTERFACE address <HIER GENERIERTE MAC EINTRAGEN>
  ip link set up dev $INTERFACE
  /usr/sbin/batctl if add $INTERFACE
";

Die auskommentierte Zeile mit der Fehlenden MAC-Adresse lassen wir für den ersten Start so. fastd generiert dann selber eine MAC-Adresse welche wir im späteren verlauf dann dort eintragen.

Da wir in der fastd.conf die Zeile include „secret.conf“; haben, müssen wir diese Datei noch erstellen. Dazu lesen wir zuerst die Keys aus der /etc/fastd/keys Datei aus. Wir benötigen vorerst nur den Secret.

cat /etc/fastd/keys

Danach können wir die Datei dann wie folgt erstellen (* bitte durch echten Secret ersetzen)

/etc/fastd/ffpi/secret.conf
secret "****************************************";

Damit fastd die ebenfalls oben konfigurierte socket Datei anlegen kann, müssen wir noch dafür sorgen das der Ordner existiert, und fastd dort schreiben darf.

mkdir -p /var/run/fastd/
chown fastd:fastd /var/run/fastd/

Damit wir nach dem anlegen neuer Peers nicht jedes mal manuell fastd neu laden müssen, überwachen wir den Ordner mit incron.

/etc/incron.d/fastd_peers
/etc/fastd/ffpi/peers IN_CREATE pkill -HUP fastd

Nun können wir den fastd service noch automatisch beim booten starten lassen.

systemctl enable fastd@ffpi

ffpi-tools

Die ffpi-tools sind eine kleine Sammlung von Scripten welche das administrieren eines Gateways vereinfachen sollen. https://github.com/freifunk-pinneberg/ffpi-tools wir clonen das Repository

git clone https://github.com/freifunk-pinneberg/ffpi-tools.git ~/ffpi-tools

Nun am besten durch alle Scripte gucken, ob das soweit plausibel aussieht. Für ffgate-check sollte in Zeile 18 bei TESTIP die IP eines anderen aktiven Gateways eingetragen werden.

Wenn alles passt können wir die Tools installieren.

~/ffpi-tools/install-tools.sh

A.L.F.R.E.D

A.L.F.R.E.D - Almighty Lightweight Fact Remote Exchange Daemon

Mit alfred tauschen die Knoten (und Gateways) allgemeine Informationen aus. Einige der Daten sind im Meshviwer sichtbar. Wir installieren alfred einfach aus den Paketquellen.

apt-get install alfred

Spezielle Gatewaydaten für Alfred bereitstellen. Das Programm alfred-announce.py muss zuvor natürlich auf dem Gateway eingespielt worden sein, es ist teil der oben genannten ffpi-tools.

Voraussetzung:

apt-get install python-daemon ethtool
/etc/cron.d/alfred
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
*/2 *	* * *	root	/usr/local/bin/alfred-announce.py

B.A.T.M.A.N.

B.A.T.M.A.N., kurz für „Better Approach To Mobile Adhoc Networking“, ist ein Mesh-Protokoll für Layer-2-Netzwerke, das sowohl für stationäre Systeme funktioniert als auch Funktionen wie Knoten-zu-Knoten- und Knoten-zu-Netz-Verbindungen, VLAN-Bridging über Mesh-Netzwerke und Robustheit gegenüber Topologieänderungen bietet, jedoch keine Verschlüsselung oder Authentifizierung bereitstellt.

Wir nutzen die etwas neuere batman-adv Variante welche im Kernel läuft. batman-adv wird mit dem Kommando batctl gesteuert. Das muss entsprechend installiert werden.

apt-get install batctl

Netzwerkkonfiguration

Die folgende Datei muß mit den jew. eigenen Adressen konfiguriert werden. Dieses Beispiel ist von gate03 abgeleitet. Solange batadv-vis und alfred noch nicht konfiguriert sind, sollten die beiden betreffenden Zeilen auskommentiert werden.

enp0s1 muss gegebenefalls durch das korrekte physische interface ausgetauscht werden. Mittels ip a kann man sich alle verfügbaren Interfaces anzeigen lassen.

/etc/network/interfaces
auto lo enp0s1
iface lo inet loopback
iface enp0s1 inet static
	address 91.143.81.176
	netmask 255.255.255.0
	broadcast 91.143.81.255
	gateway 91.143.81.1
iface enp0s1 inet6 static
	address 2a02:0180:1:1::5b8f:51b0
	netmask 64
	gateway 2a02:0180:1:1::1
 
# Freifunk Pinneberg Bridge-Interface (IPv4 und IPv6)
# - bridge_ports none sorgt dafür, daß die Brücke auch ohne Interface erstellt wird
auto br-ffpi
iface br-ffpi inet6 static
	bridge-ports none
	address fde8:21c6:9d82::0c01
	netmask 64
iface br-ffpi inet static
	address 10.137.12.1
	netmask 255.255.0.0
 
# BATMAN Interface
allow-hotplug bat0
iface bat0 inet6 manual
	pre-up modprobe batman-adv
	pre-up batctl if add mesh-vpn
	up ip link set $IFACE up
	post-up brctl addif br-ffpi $IFACE
	post-up batctl it 10000
	post-up batctl gw_mode server 1000mbit/1000mbit
	post-up /sbin/ip rule add from all fwmark 0x1 table 42
	post-up start-stop-daemon -b --start --exec /usr/local/sbin/batadv-vis -- -i $IFACE -s
	post-up start-stop-daemon -b --start --exec /usr/local/sbin/alfred -- -i br-ffpi -b $IFACE
	pre-down /sbin/ip rule del from all fwmark 0x1 table 42
	pre-down brctl delif br-ffpi $IFACE || true
	down ip link set $IFACE down

Firewall initialisieren. Die NAT-Regel für das Exit-VPN wird von den Pinneberger up- und down-Scripten aus der OpenVPN-Konfiguration gesteuert und ist deshalb an dieser Stelle entfallen.

Alle eingehenden Pakete auf dem Interface br-ffpi mit dem Wert 0x1 markieren.

iptables -t mangle -A PREROUTING -i br-ffpi -j MARK --set-xmark 0x1/0xffffffff
cd /etc/iptables
iptables-save > rules.v4

TODO Wofür ist die markierung?

/etc/sysctl.conf
[...]
# Freifunk specific settings
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
 
net.bridge.bridge-nf-call-arptables = 0
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
 
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.enp0s1.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.enp0s1.accept_ra = 0

Neuladen mit sysctl -p

/etc/rc.local
/sbin/ip route add unreachable default table freifunk
/sbin/ip rule add from all fwmark 0x1 table freifunk
exit 0

Exit-VPN (OpenVPN)

Protokollierung

Statistiken

Öffentliche Statistiken werden mit vnstat zusammengestellt. Über einen Webserver können diese direkt per HTTP angesehen werden. Wir haben beides bereits im ersten Schritt dieser Anleitung installiert. Es muss daher nur noch konfiguriert werden.

Log Ordner vorbereiten

mkdir -p /var/log/vnstat
chown vnstat:vnstat /var/log/vnstat

Mittels vnstat –iflist prüfen ob alle Netzwerk Interfaces vorhanden sind. Falls welche fehlen, diese wie in folgenden Beispielen hinzufügen.

vnstat --add -i bat0
vnstat --add -i br-ffpi
vnstat --add -i mesh-vpn
vnstat --add -i mullvad

Nun kümmern wir uns noch um die Konfigurations- Datei. öffne /etc/vnstat.conf in deinem favorisierten Editor und setzte in der Konfigurationsdatei folgende Einstellung

BandwidthDetection 0
MaxBandwidth 1000

1000 steht für 1 Gbit, sollte der Server mehr oder weniger haben sollte auch der Wert entsprechend angepasst werden.

Sollte es in generierten Graphiken zu Problemen mit Umlauten oder Sonderzeichen kommen, kann das setzen eins anderen Encondings helfen. Zum Beispiel

Locale "de_DE.ISO-8859-1"

Nun kommt noch eins von den ffpi-tools zum Einsatz, und zwar /usr/local/bin/vnstati.sh Das script ruft vnstat und vnstati auf um Bilder zu generieren, und baut dazu eine ganz einfache html Seite.

Prüfe in dem Script den wert TARGET, dieser gibt an wo die Grafiken und das HTML gespeichert werden sollen, und sollte auf den document root des Webservers/vhost zeigen. IFACES hat möglicherweise noch einen ls befehl zugewiesen, welcher so in neueren vnstat versionen nicht mehr funktioniert. Ersetze es mit $(sqlite3 /var/lib/vnstat/vnstat.db „select name from interface where active=1;“)

Beispiel

IFACES=$(sqlite3 /var/lib/vnstat/vnstat.db "select name from interface where active=1;")
TARGET=/var/www/vhosts/gate07.pinneberg.freifunk.net/

Nun möchten wir natürlich noch das die Statistiken auch regelmäßig generiert werden, dazu legen wir einen cron an.

/etc/cron.hourly/statistics
#!/bin/sh
 
# Gateway Statistiken
/usr/local/bin/vnstati.sh 
gateway_installation_debian_12.1709325677.txt.gz · Zuletzt geändert: 01.03.2024 21:41 von kevin