Freifunk Fulda/Gateway/NG

Aus Magrathea Laboratories e.V.
Wechseln zu: Navigation, Suche

Dieser Artikel beschreibt die Aufgaben der Freifunk Fulda Gateway-Server und bietet eine detaillierte Anleitung zur Konfiguration neuer Gateways.

Die Gateway Server stellen zentrale Dienste im Freifunk Fulda Netzwerk bereit und sorgen dafür, dass sich Freifunk Knoten, die keine direkte Verbindung über WLAN besitzen, dennoch in einem Layer2 Netzwerk verbunden werden können. Dazu bauen Freifunk-Knoten eine VPN-Verbindung zu den Gateway-Servern auf innerhalb derer das B.A.T.M.A.N Protokoll verwendet wird, um eine Mesh-Wolke zu erzeugen. Darüber hinaus versorgen die Gateway-Server Clients mit IP-Adressen (DHCP), stellen den DNS-Dienst zur Verfügung und bieten Zugriff zum Internet.

Wichtig: Diese Konfiguration beschreibt nur den Aufbau des Testnetzwerkes!

Diese Seite beschreibt immer die Konfiguration des Testnetzwerkes, wie Sie auf einer Test-VM (später dann auf Gateway 3 (gw03)) in betrieb ist um die Weiterentwicklung des Netzwerks zu dokumentieren. Wenn die Konfiguration in den Produktivbetrieb uebernommen wird, muss sie nach Freifunk Fulda/Gateway verschoben werden, wo sich die aktuelle Konfiguration befindet.


Übersicht Gateway-Server

Folgende Gateway-Server sind im Moment in betrieb:

Name IPv4 IPv6 MAC (Mesh) Standort Aktiv Ansprechpartner Anmerkung
gw01.fulda.freifunk.net 10.185.0.1 fd00:fffd:fffd::1 00:00:ff:fd:00:01 Hetzner, Frankfurt  Ja  Major, Fooker, Indigo
gw02.fulda.freifunk.net 10.185.0.2 fd00:fffd:fffd::2 00:00:ff:fd:00:02 Nürnberg, netcup  Ja  Major, Fooker, Indigo
gw03.fulda.freifunk.net 10.185.0.3 fd00:fffd:fffd::3 00:00:ff:fd:00:03 Nürnberg, netcup  Nein  Major, Fooker, Indigo Test-Betrieb für veränderungen in der Netzstruktur (siehe NG)

Installation und Konfiguration

Die folgenden Abschnitte beschreiben die Installation und Konfiguration eines Gateway-Server.


Grundinstallation und -einrichtung

Als Betriebssystem wird Debian Jessie verwendet. Ausgehend von der Minimalinstallation müssen noch die folgenden Installationsschritte durchgeführt werden.

TODO: Freifunk Fulda/Gateway/Standardconfig Integrieren.


Einwahlknoten für fastd

Für den VPN-Zugang von Freifunk-Knoten zum Gateway-Server wird fastd verwendet. Innerhalb des VPNs werden mittels batman-adv Routing-Entscheidungen getroffen.

Die benötigten Pakete können aus einem externen Software-Repository installiert werden, das zunächst hinzugefügt werden muss:

echo "deb http://repo.universe-factory.net/debian/ sid main" > /etc/apt/sources.list.d/fastd.list

Anschließend werden die PGP-Schlüssel für das Repository mit Hilfe der folgenden Kommandos importiert:

apt-key adv --recv --keyserver pgpkeys.mit.edu  16EF3F64CB201D9C

Nun kann fastd installiert werden:

apt-get update
apt-get install fastd

Der VPN-Server muss mit einer Konfiguration versehen werden. Dafür müssen die entsprechenden Verzeichnisse angelegt werden:

mkdir -pv /etc/fastd/fffd/
mkdir -pv /etc/fastd/fffd/peers-backbone
mkdir -pv /etc/fastd/fffd/peers-nodes

Anschließend muss die Konfigurationsdatei /etc/fastd/fffd/fastd.conf mit folgendem Inhalt erstellt werden:

log to syslog level debug;

interface "fffd.vpn";

method "salsa2012+gmac";

bind 0.0.0.0:10000;

hide ip addresses yes;
hide mac addresses yes;

include "secret.conf";

mtu 1426; # 1492 - IPv6 Header (40 Bytes) - fastd Header (46 Bytes)

include peers from "peers-backbone";
include peers from "peers-nodes";

on up "
  ip link set dev $INTERFACE up
";

Jeder fastd-Server benötigt ein Schlüsselpaar, bestehend aus einem geheimen und einem öffentlichen Schlüssel. Der geheime Schlüssel kann mit folgendem Kommando erstellt werden:

fastd --generate-key

Hinweis: Da der öffentliche Schlüssel des Gateway in der Konfigurationsdatei der Freifunk-Knoten eingetragen werden muss, wurden Schlüsselpaare vorgeneriert. Dadurch muss nicht bei Hinzufügen eines neuen Gateway auch ein Update der Freifunk Firmware verteilt werden. Die Schlüsselpaare werden von Major verwaltet.


Der Geheime Schlüssel muss nun in die Konfigurationsdatei /etc/fastd/fffd/secret.conf eingetragen werden:

secret "%%KEY_SECRET%%";

wobei %%KEY_SECRET%% der Geheime Schlüssel fur das jeweilige Gateway ist.

Damit die Vernetzung der Geräte des Backbone (Gateways, Server, usw.) möglich ist, müssen die öffentlichen Schlüssel der entsprechenden Knoten in Konfigurationsdateien im Unterverzeichnis peers-backbone abgelegt werden. Die entsprechenden Konfigurationsdateien befinden sich in einem Git-Repository, das nun gecloned werden muss.

git clone https://github.com/freifunk-fulda/fffd-peers-backbone.git /etc/fastd/fffd/peers-backbone

Wenn ein neues Gerät im Backbone hinzukommt, muss eine entsprechende Konfigurationsdatei zum Git-Repository hinzugefügt werden.

Aus dem geheimen Schlüssel kann der öffentliche Schlüssel mittels folgendem Kommando abgeleitet werden:

fastd -c /etc/fastd/fffd/fastd.conf --show-key

Der Inhalt der Konfigurationsdatei sieht so aus:

key "%%KEY_PUBLIC%%";
remote ipv4 "%%CONF_HOSTNAME%%" port 10000;

wobei %%KEY_PUBLIC%% der öffentliche Schlüssel und %%CONF_HOSTNAME%% der öffentlicheHostname des Gerätes ist.

Der name der Konfigurationsdatei sollte dem Hostnamen des Gewrätes entsprechen.


Die öffentlichen Schlüssel der Freifunk-Knoten, die sich mit dem VPN-Gateway verbinden dürfen, werden im Unterverzeichnis peers-nodes abgelegt. Die entsprechenden Konfigurationsdateien werden dort durch den Automatischen Key-Upload der Knoten verwaltet.

Nun kann fastd gestartet werden:

systemctl enable fastd@fffd.service
systemctl start fastd@fffd.service

Mesh-Netzwerk mit B.A.T.M.A.N. Advanced

Um ein Mesh-Netzwerk mit allen Geräten des Backbonse und den Knoten herzustellen wird B.A.T.M.A.N. Advanced verwendet.

Das Kernel-Modul ist bereits im System enthalten. Zur einfacheren Verwaltung muss das Programm batctl installiert werden:

apt-get install batctl

Das B.A.T.M.A.N. Advanced Kernel-Modul muss beim Systemstart automatisch geladen werden:

echo batman-adv >> /etc/modules
modprobe -v batman-adv

Um das B.A.T.M.A.N. Advanced Interface zu verwlten, muss eine Service-Definition unter /etc/systemd/system/batman@.service mit folgendem Inhalt angelegt werden:

[Unit]
Description=B.A.T.M.A.N. Advanced Interface (connection %I)
After=network.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/sbin/batctl -m %i.bat if add %i.vpn
ExecStop=/usr/sbin/batctl -m %i.bat if del %i.vpn

[Install]
WantedBy=multi-user.target

Die statische Netzwerk-Konfiguration des Interfaces erfolg nun in der Datei /etc/network/interfaces.d/fffd (man achte auf den Vermerk in /etc/network/interfaces, sodass diese configs geladen werden):

# B.A.T.M.A.N Advanced Interface
allow-hotplug fffd.bat

iface fffd.bat inet6 static
	hwaddress ether %%CONF_MAC%%
	address %%CONF_IPV6_ADDRESS%%
	netmask %%CONF_IPV6_NETMASK%%

iface fffd.bat inet static
	address %%CONF_IPV4_ADDRESS%%
	netmask %%CONF_IPV4_NETMASK%%

wobei %%CONF_* die MAC, IPv4 und IPv6 Konfiguration des jeweiligen Gateways ist.

Nun kann das Mesh-Netzwerk aktiviert werden:

systemctl enable batman@fffd.service
systemctl start batman@fffd.service

Statistiken mittels A.L.F.R.E.D. verteilen

Jeder Knoten, so auch die Gateways verteilen Statistiken und Nachbarschaftsbeziehungen im Mesh-Netzwerk mittels A.L.F.R.E.D..

Die benötigte Software kann aus einem Repository installiert werden:

wget http://debian.draic.info/README.txt -O /etc/apt/sources.list.d/alfred.list

Nun kann A.L.F.R.E.D. instaliert werden:

apt-get update
apt-get install alfred alfred-json batadv-vis

Um den A.L.F.R.E.D. Daemon zu verwlten, muss eine Service-Definition unter /etc/systemd/system/alfred@.service mit folgendem Inhalt angelegt werden:

[Unit]
Description=A.L.F.R.E.D. (connection %I)
After=network.target
Wants=batman@%i.service
BindsTo=batman@%i.service

[Service]
Type=simple
ExecStart=/usr/sbin/alfred -i %i.bat -b %i.bat

[Install]
WantedBy=multi-user.target

Die Daten werden durch das Programm batadv-vis aufbereitet und versendet. Für diese muss auch noch eine Service-Definition unter /etc/systemd/system/batadv-vis@.service mit folgendem Inhalt angelegt werden:

[Unit]
Description=A.L.F.R.E.D. vis (connection %I)
After=network.target
Wants=alfred@%i.service
BindsTo=alfred@%i.service

[Service]
Type=simple
ExecStart=/usr/sbin/batadv-vis -s -i %i.bat

[Install]
WantedBy=multi-user.target

Nun können die beiden Services gestartet werden:

systemctl enable alfred@fffd.service
systemctl start alfred@fffd.service

systemctl enable batadv-vis@fffd.service
systemctl start batadv-vis@fffd.service

Die Funktionalität von batadv-vis sollte mittelfristig durch alfred-announce ersetzt werden. Fooker (Diskussion) 23:45, 19. Jul. 2015 (CEST)


IP-Addressvergabe und weitere Client-Dienste

Wenn ein Client in dem Netz teilnemen möchte, muss eine gewisse Grund-Konfiguration des Clients vorhanden sein. Um den Zugang zum Netz zu vereinfachen, wird diese Konfiguration durch die Gateway-Server verteilt.

Vergabe der IPv4-Addressen

Die IPv4-Adressen der Clients werden mittles des DHCP-Servers isc-dhcp vergeben.

Installation von isc-dhcp:

apt-get install isc-dhcp-server

Die Konfiguration wird in der Datei /etc/dhcp/dhcpd.conf wie folgt vorgenommen:

#
# Freifunk Fulda DHCP Configuration
#
# Network:      10.185.  0.0/16 
# Subnetting:   10.185.  0.0/18 (DHCP: 10.185.  1.0 - 10.185. 63.254)
#               10.185. 64.0/18 (unused)
#               10.185.128.0/18 (unused)
#               10.185.192.0/18 (unused)
#
# DHCP ranges:
#  gw01:        10.185.10.0 - 10.185. 19.255
#  gw02:        10.185.20.0 - 10.185. 29.255
#  gw03:        10.185.30.0 - 10.185. 39.255
#
# Static IPs:   10.185. 1.0 - 10.185.  9.255
#  
# Note: Addresses in the range 10.185.0.0 - 10.185.0.255 are reserved
#       for infrastructure services!
#

# Our domain name
option domain-name "fffd";

# Lease time parameters
default-lease-time 600;
max-lease-time 3600;

# Use facility local7 and send dhcp log messages to a different log file 
log-facility local7;

# Freifunk Fulda subnet
subnet 10.185.0.0 netmask 255.255.192.0 {
	authoritative;
	range 10.185.%%NET_START%% 10.185.%%NET_END%%;
	option routers %%CONF_IPV4_ADDRESS%%;
	option domain-name-servers 10.185.0.3, 10.185.0.1, 10.185.0.2;
	option ntp-servers ntp3.services.fffd, ntp1.services.fffd, ntp2.services.fffd;
}

wobei %%NET_START%% und %%NET_END%% die Anfangs- und End-Adressen des Netzbereichsdes Gateways darstellen (siehe Freifunk Fulda/Netz#IPv4) und %%CONF_IPV4_ADDRESS%% durch die IPv4-Adresse des jeweiligen Gateways ersetzt werden muss.

Damit der DHCP-Server muss nur aus das Freifunk-Netz erreichbar ist, muss die Datei /etc/default/isc-dhcp-server angepasst werden:

INTERFACES="fffd.bat"

Anschließend kann der DHCP-Server gestartet werden.

systemctl enable isc-dhcp-server
systemctl start isc-dhcp-server


TODO: Ist das folgende mit systemd noch aktuell? Wichtig: Der DHCP-Server legt sehr detaillierte Logs über Client-Name, MAC-Adresse und verwendete IP-Adresse an. Diese wollen wir nicht haben! In rsyslog werden daher Log-Nachrichten der facility local7 (diese wird von isc-dhcp verwendet) verworfen.

echo "local7.* stop" > /etc/rsyslog.d/dhcp.conf
/etc/init.d/rsyslog restart

Bekanntmachung IPv6-Adressen

Die IPv6-Adressen werden per Router-Adverticements radvd verbreitet.

Installation von radvd:

apt-get install radvd

Die Konfiguration findet in der Datei /etc/radvd.conf statt:

interface fffd.bat {    
	AdvSendAdvert on;
	MaxRtrAdvInterval 200;
	prefix %%CONF_IPV6_PREFIX%%/64 {
	};
	
	RDNSS %%CONF_IPV6_ADDRESS%% {
	};
};

wobei %%CONF_IPV6_PREFIX%% der IPv6-Prefix des Freifunk-Netzes und %%CONF_IPV6%%_ADDRESS die IPv6-Adresse des Gateways ist.

Anschließend kann radvd gestartet werden.

systemctl enable radvd
systemctl start radvd

DNS-Server

Für die DNS-Auflösung wird bind9 verwendet. Die Gateways stellen jeweils einen secondary DNS Server dar, der seine Zoneninformationen von einem Master erhält. Die Konfiguration der DNS Server wird im Artikel Freifunk Fulda/DNS beschrieben.

Zeit-Server

TODO: Konfig aus bestehenden Gateways extrahieren?


Zugang zu anderen Netzen

Um die Kommunikation mit anderen Netzen zu ermöglichen, müssen Peerings und Routen zu den jeweiligen Netzen eingerichtet werden. Zum verwalten der Roten wird BIRD eingesetzt:

apt-get install bird

Zuerst wird eine Grund-Konfiguration des Routings angelegt. Diese erlaubt die modularisierung der weiteren Konfiguration in einzelnen Dateien und bereitet ein Grundgerüst vor. Dafür müssen erst die Ordner für die Konfigurationsdateien angelegt werden:

 mkdir -pv /etv/bird/bird.conf.d
 mkdir -pv /etv/bird/bird6.conf.d

Nun muss die Konfiguration in der Datei /etc/bird/bird.conf mit folgendem Inhalt angepasst werden:

# Special protocol for listening to device changes.
protocol device {
	scan time 10;
}

# Publish all routes to the kernel.
#
# The provisioned kernel table is the table used for all the traffic between
# the different networks - table 42.
#
# The routes are not flushed after the daemon quits.
protocol kernel {
	kernel table 42;
	
	persist yes;
	
	device routes yes;
	
	import none;
	export all;
}

# Add a default sink route.
#
# To ensure no traffic is leaving the routed networks, all traffic going to
# other destinations is rejected.
#
# The sink route has a very low preference allowing other protocols to publish
# default routes.
protocol static sink {
	route 0.0.0.0/0 unreachable;
	
	preference 0;
	
	import all;
	export none;
}

# Include all config modules.
include "/etc/bird/bird.conf.d/*.conf";

Damit Daten von anderen Netzen zurück zum Freifunk-Netz fließen können, muss eine Route zu diesem Netz konfiguriert werden. Dafür muss die Datei /etc/bird/bird.conf.d/fffd.conf mitfolgendem Inhalt angelegt werden:

# Add the net route for the Freifunk network.
#
# The network route is directly pulled from the interface.
protocol direct fffd {
	interface "fffd.bat";
	
	import all;
	export none;
}

Um die Änderungen zu aktivieren, muss folgender Befehl ausgeführt weren:

birtc configure

Internetzugang

Der Zugang zum Internet für die Clients wird im Moment über einen OpenVPN Tunnel gewährt. Dieser VPN-Tunnel kann von verschiedenen Providern bereit gestellt werden. Um den Wechsel zwischen den Providern zu vereinfachen, wird die Konfiguration so erstellt, das alle Provider-Konfigurationen das selbe Interface verwenden. So können alle Provider gleichzeitig auf dem Gateway konfiguriert sein aber es wird immer nur ein Tunnel betrieben.

Zuerst muss OpenVPN installiert werden:

apt-get install openvpn

Für eine einheitliche Namensgebung werden alle Tunnel nach folgendem Schema benannt:

exit-%%PROVIDER%%

wobei %%PROVIDER%% durch den Namen des Providers ersetzt werden muss.


Als nächstes erfolg die Konfiguration der einzelnen Provider wie in Freifunk Fulda/Gateway/VPN-Anbieter beschrieben. Hier wird als Name des Interfaces immer exit verwendet.

TODO: Configs aus Freifunk Fulda/Gateway/VPN-Anbieter integrieren.

Nun kann der Tunnel aktiviert werden:

systemctl enable openvpn@exit-%%PROVIDER%%
systemctl start openvpn@exit-%%PROVIDER%%

wobei %%PROVIDER%% durch den Namen des Providers ersetzt werden muss.

Zum wechseln zu einem anderen Provider muss der Aktive zuvor deaktiviert werden:

systemctl disable openvpn@exit-%%PROVIDER%%
systemctl stop openvpn@exit-%%PROVIDER%%

wobei %%PROVIDER%% durch den Namen des Providers ersetzt werden muss.


Danach muss eine Default-Route zu dem Tunnel konfiguriert werden. Diese sorgt dafür, dass alle Adressen, die kein spezifiziertes Zeile haben durch den Tunnel geleitet werden. Dafür muss die Datei /etc/bird/bird.conf.d/exit.conf mitfolgendem Inhalt angelegt werden:

# Add a default route for all exit trafic via the tunnel interface.
#
# There is no need to specify the default gateway IP address as the interface
# is a point to point connection.
protocol static exit {
	route 0.0.0.0/0 via "exit";
	
	check link yes;
	
	import all;
	export none;
}

Um die Änderungen zu aktivieren, muss folgender Befehl ausgeführt weren:

birtc configure

Andere Freifunk-Netze (InterCity-VPN, dn42, Chaos-VPN)

TODO


TODO: ip rule add from all iff fffd.bat table 42 - Es sollte Regeln mit iif für alle (Freifunk-relevanten) Interfaces geben, die zur entsp. Tabelle leiten und eine geringere preference haben alss die from all table local regel

TODO: gw_mode server durch script

TODO: Weiter machen...




Gateway in den Server-Modus bringen (wird bereits in /etc/network/interfaces erledigt)

echo server > /sys/class/net/bat0/mesh/gw_mode


Internet mittels VPN

Die Gateway-Server bieten Zugang zum Internet mittels eines VPN-Anbieters. Als VPN-Dienste ins Internet werden Mullvad oder hide.me genutzt.

Hinweis: Prinzipiell können beide Anbieter konfiguriert werden. Auf jedem Gateway wird jedoch nur ein einziger Tunnel tatsächlich gestartet. Wenn OpenVPN gestartet wird, öffnet es standardmäßig alle Tunnel, die unter /etc/openvpn konfiguriert sind. Daher muss der zu startende Tunnel in der Datei /etc/default/openvpn konfiguriert werden.

Beispiel:

AUTOSTART="mullvad"


Installation von OpenVPN

apt-get install openvpn


Konfiguration des VPN-Anbieters

Die Konfiguration der verschiedenen VPN-Anbieter findet sich im Artikel Freifunk_Fulda/Gateway/VPN-Anbieter.

Es muss mindestens einer der VPN-Anbieter konfiguriert werden.


VPN starten

Das VPN mittels des folgenden Kommandos starten

/etc/init.d/openvpn start


Monitoring und Gateway Status

Mittels eines BASH-Skriptes wird der Internetzugang über den VPN-Anbieter überwacht und ggf. der Gateway-Modus geändert. Damit soll erreicht werden, dass die Default-Gateways von Clients nicht auf einen Gateway gesetzt werden, der (vorrübergehend) keinen Internetzugang bietet.

  • Repo clonen
cd /opt
git clone https://github.com/freifunk-fulda/fffd-utils
  • Skript anpassen
INTERFACE=fffd.internet
BANDWIDTH=54MBit/54MBit
  • Ausführbar machen
chmod 755 /opt/fffd-utils/check_gateway.sh
  • Cronjob
cp /opt/fffd-utils/check_gateway.cron /etc/cron.d/fffd-check_gateway
  • DONE

Routing

Freifunk Routing

Das hier ist der zentrale Punkt fuer das Routing. Wir routen Traffic von/nach Freifunk, vom/ins ICVPN und dn42, sowie vom/ins Internet. Letzteres benoetigt NAT, was durch iptables erledigt wird. Das Flowchart zeigt den derzeitigen Aufbau der Routing-Tabellen und -Regeln. Das gesamte Routing wird mittels bird umgesetzt und in die entsprechenden Kernel-Routingtabellen synchronisiert.


IP Rule

Anhand der IP Rules wird entschieden, welcher Datenverkehr anhand welcher Routing-Tabellen behandelt wird. Beispielsweise soll der Austausch von Datenverkehr zwischen IC-VPN und Freifunk Fulda ermöglicht werden, während IC-VPN Datenverkehr keinen Transit ins Internet erhält. Zur Zeit findet die Festlegung der ip rules in der /etc/rc.local statt (was nicht optimal ist).


IP Route

Die Routing Tabellen werden vollständig mittels bird verwaltet und in die entsprechenden Kernel-Routingtabellen zurück synchronisiert.


Firewall

Die Firewall wurde mittels ferm umgesetzt. Hier wird grundsätzlich sämtlicher Datenverkehr verworfen, der nicht explizit erlaubt wurde. Prinzipiell sollte durch den Aufbau des Routing kein Datenverkehr das Gateway über Interfaces oder Routen verlassen können, als dies gewünscht ist. Als letzte Bastion wird ungewünschter Datenverkehr durch iptables verworfen. Darüber hinaus findet hier Network Address Translation (NAT) für Datenverkehr ins Internet statt.

Routing ins VPN

OLD!!

Der gesamte Internet-Traffic soll ausschließlich über den VPN-Anbieter laufen. Dazu werden alle Datenpakete, die über die Netzwerkbrücke br-fffd eintreffen mittels einer IP-Tables Regel im PREROUTING Schritt markiert alle 0x1 makierten Pakete nach Regel 42 behandet.

Hier gibt es noch einiges an ToDo. Ich wäre sehr dankbar, wenn noch ein paar weitere Gehirne hier Rechenleistung beisteuern würden. Unter anderem bestehen Probleme, Dienste auf dem Gateway selbst zu erreichen und die IPv6 Frage ist zur Zeit noch offen.


iptables-persistent installieren um Regeln beim Neustart des Systems automatisch zu speichern/laden

apt-get install iptables-persistent


Datei /etc/iptables/rules.v4

# Generated by iptables-save v1.4.14 on Fri Aug 29 16:51:27 2014
*nat
:PREROUTING ACCEPT [58617111:4439263610]
:INPUT ACCEPT [58589720:4436623777]
:OUTPUT ACCEPT [2558082:156239096]
:POSTROUTING ACCEPT [2557544:156205090]
-A POSTROUTING -o mullvad -j MASQUERADE
COMMIT
# Completed on Fri Aug 29 16:51:27 2014
# Generated by iptables-save v1.4.14 on Fri Aug 29 16:51:27 2014
*mangle
:PREROUTING ACCEPT [2365827856:2142625664466]
:INPUT ACCEPT [2365365659:2142409849135]
:FORWARD ACCEPT [457823:214738999]
:OUTPUT ACCEPT [2126158250:2156460629448]
:POSTROUTING ACCEPT [2126616073:2156675368447]
-A PREROUTING -i br-fffd -j MARK --set-xmark 0x1/0xffffffff
COMMIT
# Completed on Fri Aug 29 16:51:27 2014
# Generated by iptables-save v1.4.14 on Fri Aug 29 16:51:27 2014
*filter
:INPUT ACCEPT [66787933:59827412523]
:FORWARD ACCEPT [16545:3868266]
:OUTPUT ACCEPT [60286141:60195540025]
:TRAFFIC_IN - [0:0]
:TRAFFIC_OUT - [0:0]
:fail2ban-ssh - [0:0]
-A INPUT -j TRAFFIC_IN
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A OUTPUT -j TRAFFIC_OUT
-A TRAFFIC_IN -i eth0
-A TRAFFIC_OUT -o eth0
-A fail2ban-ssh -j RETURN
COMMIT
# Completed on Fri Aug 29 16:51:27 2014

Datei /etc/rc.local

/sbin/ip route add unreachable default table 42
/sbin/ip rule add from all fwmark 0x1 table 42

Anschließend iptables (neu) starten.

/etc/init.d/iptables-persistent start

Bei Debian 8 mit systemd die datei /lib/systemd/system/rc-local.service mit der section [Install] erweitern:

# /lib/systemd/system/rc-local.service
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

Die Datei /etc/rc.local muss ausführbar sein

chmod +x /etc/rc.local
systemctl reenable rc-local

aktiveren und wird dann bei Systemstart mit ausgeführt.

Synchronisation von Repositories

Auf dem Weg bis hier her wurden eine Reihe von Git Repositories gecloned, die regelmäßig synchronisiert werden müssen. Es steht ein Skript zur Verfügung, das dies vollautomatisch tut.

Die Installation ist im Artikel Freifunk Fulda/Repo-Updates beschrieben.


Neustart

An dieser Stelle macht es Sinn, mal einen Reboot durchzuführen, da man garantiert vergessen hat irgendeine Datei zu sourcen, einen Dienst neu zu starten oder ähnliches.

Das Gateway sollte jetzt grundsätzlich Einsatzbereit sein. Es erlaubt Meshing der Knoten durch das VPN, Verteilt IP-Adressen und bietet Internetzugang über einen VPN-Anbieter. Bevor sich Knoten verbinden können, muss jedoch noch der fastd-Schlüssel Verteilmechanismus installiert werden.







UNFINISHED

Keyupload (und Default Webseite des Gateway)

Auf dem Gateway muss das Keyupload-Tool laufen, damit Knoten ihre fastd Publickeys hochladen und zum Gateway verbinden können. Auf dem Gateway wird dazu ein Webserver installiert, der eine Splashpage des Gateway ausliefert, die vnstat Statistik anzeigt und das in Python geschriebene Keyupload Tools zur Verfügung stellt.

Apache installieren und konfigurieren

Welchen Webserver man verwendet ist prinzipiell egel, solange er etwas mit WSGI anfangen kann.


apt-get install apache2 libapache2-mod-wsgi


  • Konfigurieren (u.a. ports.conf) und absichern (u.a. Ciphers, MPM, /etc/apache2/conf.d/security, usw)
  • Default Seite clonen


Keyupload

  • Abhängigkeiten installieren (Bottle)
pip install bottle
  • Keyupload-Repo nach /opt clonen
cd /opt
git clone https://github.com/freifunk-fulda/fffd-keyupload.git
  • Skripte ausführbar machen
chmod 755 /opt/fffd-keyupload/script/*
  • Logdatei für das Keyupload Tool erstellen
touch /var/log/fffd-keyupload.log
chgrp www-data /var/log/fffd-keyupload.log
chmod 770 /var/log/fffd-keyupload.log
  • Dem Webserver Schreibrechte auf das Schlüsselverzeichnis erteilen
chgrp www-data -R /etc/fastd/fffd-mesh-vpn/fffd-peers-nodes/
chmod 775 /etc/fastd/fffd-mesh-vpn/fffd-peers-nodes/
  • Dem Webserver-User per sudo das Recht erteilen, fastd reload aufzurufen
visudo
www-data        ALL = NOPASSWD: /opt/fffd-keyupload/script/reload_fastd.sh
  • WSGI installieren
apt-get install libapache2-mod-wsgi
  • Verzeichnis für Webseite erstellen und mit Splashpage bestücken
mkdir /var/www/gwXX.freifunk-fulda.de
cp -R /opt/fffd-keyupload/website/* /var/www/gwXX.freifunk-fulda.de
  • Skript für die Statistikseite anpassen. Dieses wurde zuvor nach /opt/fffd-keyupload/scripts/vnstat.sh gecloned. Die Variable TARGET muss auf den korrekten Pfad gesetzt werden: /var/www/gwXX.freifunk-fulda.de
  • Cronjob für Statistik-Seite (/etc/cron.d/vnstat)
*/5 * * * * root /bin/sh /opt/fffd-keyupload/script/vnstat.sh
  • Apache konfigurieren (/etc/apache2/sites-available/gwXX.freifunk-fulda.de)
<VirtualHost *:80>
       ServerName gwXX.freifunk-fulda.de
       ServerAdmin admin@freifunk-fulda.de
       DocumentRoot /var/www/gwXX.freifunk-fulda.de

       WSGIDaemonProcess fffd-keyupload user=www-data group=www-data processes=1 threads=5
       WSGIScriptAlias /upload_key /opt/fffd-keyupload/keyupload/keyupload.py

       <Directory "/var/www/gwXX.freifunk-fulda.de">
               Options Indexes FollowSymLinks MultiViews
               AllowOverride None
       </Directory>

       <Directory /opt/fffd-keyupload/keyupload>
               WSGIProcessGroup fffd-keyupload
               WSGIApplicationGroup %{GLOBAL}

               # Apache 2.2
               Order deny,allow
               Allow from all

               # Apache 2.4
               Require all granted
       </Directory>

       LogLevel warn
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  • Vhost aktivieren
a2dissite default
a2ensite gwXX.freifunk-fulda.de
  • Apache neu starten
/etc/init.d/apache2 restart

alfred

apt-get install libgps-dev

cd /usr/local/src
wget http://downloads.open-mesh.org/batman/stable/sources/alfred/alfred-2014.4.0.tar.gz
tar xvzf alfred-2014.4.0.tar.gz
cd alfred-2014.4.0
make
checkinstall

alfred-json

Eine A.L.F.R.E.D - JSON Client, den wir aus vielerlei Gruenden benoetigen (ffmap, DNS).

Abhaengigkeiten installieren

apt-get install cmake libjansson-dev zlib1g-dev

alfred-json installieren

cd /usr/local/src
wget https://github.com/tcatm/alfred-json/archive/v0.3.1.tar.gz
tar xvzf v0.3.1.tar.gz
cd alfred-json-0.3.1
cmake CMakeLists.txt
make
make install