Freifunk Lauenburg:Gateway
Infrastruktur
Element | IPv6 | ULA | RFC1918 | DHCP | ICVPN-Transit | B.A.T.M.A.N.-adv. MAC(s) | Dienste | Standort | Betreuer | Internet-Gateway |
---|---|---|---|---|---|---|---|---|---|---|
Bille | fddf:0bf7:80::a38:4 | ULA | 10.144.0.4 | 10.144.30.2-10.144.44.254 | n/a | 00:5b:27:80:00:04 | Dienste | Hetzner | Lauenburg | Mullvad 2 |
Krummbach | fddf:0bf7:80::144:1 | ULA | 10.144.0.8 | 10.144.144.2-10.144.159.254 | n/a | 00:5b:27:80:01:44 | Hetzner | ks | Mullvad 1 | |
Trave | fddf:0bf7:80::a38:12 | ULA | 10.144.0.12 | 10.144.xx.1-10.144.xx.254 | n/a | 00:5b:27:80:00:12 | Dienste | Hetzner | Lauenburg | Mullvad 2 |
Viehbach | fddf:0bf7:80::a38:13 | ULA | 10.144.0.13 | 10.144.224.2-10.144.239.254 | n/a | 00:5b:27:80:00:13 | Karte | Hetzner | ks | Mullvad 1 |
Hopfenbach | fddf:0bf7:80::128:1 | ULA | 10.144.128.1 | 10.144.128.2-10.144.143.254 | n/a | 00:5b:27:80:01:28 | Karte, Website | Hetzner | swo | PrivateInternetAccess |
Gateway aufsetzen
Dieser Artikel befasst sich mit der Konfiguration eines Gateways und optional einem Meshviewer für die Freifunk-Community Lauenburg (FFRZ). Dieser Eintrag beruht zum allergrößten Teil auf dem Wiki-Eintrag zum gleichen Thema von unserer Partnercommunity https://freifunk-stormarn.de mit der wir uns große Teile der Infrastruktur teilen und sehr eng zusammen arbeiten. Dank an dieser Stelle auch an die Community http://www.freifunk-nordlippe.de .
Linux
Als erstes ist ein Rechner im Internet notwendig, der mit Linux vorbereitet ist. Wir verwenden Debian.
Paket Quellen
Um auf dem Linux die notwendige Software zu installieren, muss man die Paketquellen definieren. Insbesondere für GLUON sind Pakete notwendig, die im normalen Umfang bei Debian nicht dabei sind. Daher müssen wir hier direkt ansetzen und die erste Konfiguration durchführen.
Erst mal diese Quellen in die /etc/apt/source.list einfügen:
deb https://repo.universe-factory.net/debian/ sid main
Für die libjson-c2 wegen der Abhängigkeit von fastd >= 15 noch diese Quelle aus dem Backport:
deb http://http.debian.net/debian wheezy-backports main
Für die GPG Schlüssel noch diese auf der Console als root ausführen:
gpg --keyserver pgpkeys.mit.edu --recv-key AB7A88C5B89033D8 gpg -a --export AB7A88C5B89033D8 | apt-key add - apt-key adv --recv-keys --keyserver keys.gnupg.net AB7A88C5B89033D8
So, jetzt kann es los gehen und die Pakete werden installiert. Zuvor noch das Repository auf den aktuellen Stand bringen:
apt-get update
Software installieren
Wir haben uns an die Beschreibungen und Tipps von anderen gehalten und es ist empfohlen, die folgenden Pakete zu installieren:
^ Paket ^ Beschreibung | sudo | Ausführung von Befehlen mit Root-Rechten | | bridge-utils | Verwaltung von Netzwerkbrücken | | batctl | B.A.T.M.A.N. Verwaltungstools | | openvpn | VPN für Verbindung zur Anonymisierung | | haveged | Entropie | | fastd | VPN für Verbindung zu den Knoten | | radvd | IPv6 Router Advertisements | | isc-dhcp-server | DHCP Server | | bind9 | DNS Server | | git | Versionsverwaltungssystem | | alfred | A.L.F.R.E.D. Datenübertragung | | alfred-json | A.L.F.R.E.D. Datenausgabe | | batman-adv-dkms | Batman-Kernelmodul in Version 2013.04 | | ntp | Zeitsynchronisation | | curl | Linux Tool | | htop | top-ähnliches Tool, aber hübscher | | | | | nagios-nrpe-server | Statusüberwachung, wenn man das möchte |
Die Installation erfolgt über die folgende Befehlszeile als root:
apt-get install bridge-utils batctl openvpn haveged fastd radvd isc-dhcp-server bind9 git batman-adv-dkms ntp curl
Nun noch 'alfred' und passend dazu 'batadv-vis' installieren. Dies erfolgt aus den Sourcen wie folgt:
NEU: apt-get install libnl-3-dev libnl-genl-3-dev libcap-dev wget https://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2017.1.tar.gz unp batman-adv-2017.1.tar.gz cd batman-adv-2017.1/ make make install cd ../ wget wget https://downloads.open-mesh.org/batman/stable/sources/batctl/batctl-2017.1.tar.gz unp batctl-2017.1.tar.gz cd batctl-2017.1/ make make install cd ../ wget https://downloads.open-mesh.org/batman/stable/sources/alfred/alfred-2017.1.tar.gz unp alfred-2017.1.tar.gz cd alfred-2017.1/ make CONFIG_ALFRED_GPSD=n make CONFIG_ALFRED_GPSD=n install cd ../ die Dateien und Ordner können gelöscht werden.
Optional:
apt-get install nagios-nrpe-server #####
SSH einrichten
Für den Zugriff auf den Server sollte es einen User geben, der per SSH erreichbar ist. So kann man den Server besser konfigurieren und betreuen. Auf der Console als root folgende Befehle ausführen, damit ein neuer User für SSH angelegt wird:
adduser --shell /bin/bash ffrz
Das Zertifikat für SSH wird wie folgt erstellt:
sudo -H -u ffrz ssh-keygen -t rsa scp /home/ffrz/.ssh/id_rsa.pub /home/ffrz/.ssh/authorized_keys chmod 0644 /home/ffrz/.ssh/authorized_keys
In der SSH Konfiguration /etc/ssh/sshd_config nun noch den User als erlaubter User eintragen:
AllowUsers ffrz
Nun SSH mit folgendem Befehl als root neu laden:
service ssh reload
Konfiguration
So jetzt wird's ernst ;-) Nach der Einleitung kommt jetzt die Kür.
Die Software muss nun so konfiguriert werden, dass die Freifunk Router sich mit dem Gateway verbinden können und sich die Einstellungen ziehen, um die Clients ins Internet zu bringen. Jeder Client ist am Ende direkt mit dem Gateway verbunden. Der Router leitet "einfach nur" alles weiter. Der Router ist aber trotzdem noch eine wichtige Einheit, denn ohne den Router, wäre die Verbindung zum Gateway nicht möglich. Der Router sucht sich auch aus, mit welchem Gateway er sich verbindet und kann (wenn möglich) das Freifunknetz meshen. So lassen sich auch andere Router in das Netz bringen, die selbst keinen Internetanschluss haben. Hier liegt u.a. der Reiz der neueren Freifunknetze.
IP Forwarding
In der Konfigurationsdatei /etc/sysctl.d/forwarding.conf bitte die folgenden Zeilen eintragen, damit das IP Forwarding für IPv4 und IPv6 laufen:
# IPv4 Forwarding net.ipv4.ip_forward=1 # IPv6 Forwarding net.ipv6.conf.all.forwarding = 1
Netzwerk
Nun kommt das eigentlich wichtigste. Das Netzwerk muss eingerichtet werden, so das die einzelnen Schnittstelle bereitstehen und eine Art Brücke vom Freifunknetz in das Internet aufbauen.
Als erstes kommt die Netzwerkbrücke (Schnittstelle zwischen dem "Mesh" Netzwerk und dem Internet-Ausgang per VPN:
Hinweis: diese Konfiguration ist allgemeingültig für unser Netz. Daher ist das jeweilige Gateway in den IP-Adressen mit [GW Nr] geschrieben. Diese Nummer muss natürlich durchgänig gleich sein, da sonst nichts funktionieren wird!
Bitte die /etc/network/interfaces mit Folgenden Zeilen befüllen. Das eth0 sollte so belassen werden, wie es bereits eingerichtet war, damit die Netzwerkhardware auch weiterhin im Internet erreichbar ist:
# The loopback network interface auto lo iface lo inet loopback # The primary network interface (here it's a local network) allow-hotplug eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.224 network 192.168.1.0 gateway 192.168.1.1 dns-nameservers 10.144.0.1 85.214.20.141 213.73.91.35 # Netwerkbruecke fuer Freifunk # - Hier laeuft der Traffic von den einzelnen Routern und dem externen VPN zusammen # - Unter der hier konfigurierten IP ist der Server selber im Freifunk Netz erreichbar # - bridge_ports none sorgt dafuer, dass die Bruecke auch ohne Interface erstellt wird auto br-ffrz iface br-ffrz inet static address 10.144.[GW Netz].1 netmask 255.255.0.0 bridge_ports none iface br-ffrz inet6 static address fddf:0bf7:80::[GW Netz]:1 netmask 64 post-up /sbin/ip -6 addr add fddf:0bf7:80::[GW Netz]:1/64 dev br-ffrz post-up /sbin/ip rule add iif br-ffrz table 42 pre-down /sbin/ip -6 addr del fddf:0bf7:80::[GW Netz]:1/64 dev br-ffrz pre-down /sbin/ip rule del iif br-ffrz table 42 # Batman Interface # - Erstellt das virtuelle Inteface fuer das Batman-Modul und bindet dieses an die Netzwerkbruecke # - Die unten angelegte Routing-Tabelle wird spaeter fuer das Routing innerhalb von Freifunk (Router/VPN) verwendet # # Bevor das Netzwerkinterface gestartet wird, wird zur Sicherheit nochmal batman-adv geladen. # Nachdem das Interface gestartet ist, wird eine IP-Regel angelegt, die besagt, dass alle Pakete, die über das bat0-Interface eingehen, # und mit 0x1 markiert sind, über die Routing-Tabelle 42 geleitet werden. # Dies ist wichtig, damit die Pakete aus dem Mesh wirklich über das VPN raus gehen. # # Es wird alfred und batadv-vis gestartet. Damit können Daten für die Knotenkarte gesammelt werden. allow-hotplug bat0 iface bat0 inet6 manual pre-up modprobe batman-adv pre-up batctl if add ffrz-mesh post-up ip link set dev bat0 up post-up brctl addif br-ffrz bat0 post-up batctl it 10000 post-up ip rule add from all fwmark 0x1 table 42 pre-down brctl delif br-ffrz bat0 || true down ip link set dev bat0 down post-up start-stop-daemon -b --start --exec /usr/sbin/alfred -- -i br-ffrz -b bat0; # -m darf nur auf dem FFMAP-Master (derzeit Gateway "Viehbach"), Clients bitte ohne -m !! post-up start-stop-daemon -b --start --exec /usr/sbin/batadv-vis -- -i bat0 -s;
Die /etc/hosts mit Folgenden Zeilen befüllen:
127.0.0.1 localhost [externe IP] [GW Name].ffod.org [GW Name] 10.144.[GW Netz].1 ffod fddf:0bf7:80::[GW Netz]:1 ffod
Hier benutzen wir die Abkürzung von Freifunk Stormarn da wir unsere DNS Dienste gemeinsam benutzen.
IP Tables
Lege die Konfigurationsdatei /etc/iptables.up.rules an mit Folgendem:
# Damit werden alle Pakete, die über die Bridge rein kommen, mit dem 0x1-Flag markiert, und damit über Routing-Tabelle 42 geschickt. # Es gibt noch 2 Regeln für DNS, dass auch DNS-Pakete (Port 53 TCP/UDP) über die Tabelle 42 geschickt werden. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] COMMIT *mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT
Nun müssen die IP Tables geladen werden. Bitte erstellt die Datei /etc/network/if-pre-up.d/iptables mit folgenden Zeilen:
#!/bin/sh /sbin/iptables-restore < /etc/iptables.up.rules
Bitte nun noch eine Datei /etc/fastd/ffrz/iptables_ffrz.sh erstellen, die alle Routing iptables Vorgaben enthält:
#!/bin/sh /sbin/ip route add default via [EXTERNE-IPv4] table 42 /sbin/ip route add 10.144.[GW Netz].0/20 dev br-ffrz src 10.144.[GW Netz].1 table 42 /sbin/ip route add 0/1 dev tun0 table 42 /sbin/ip route add 128/1 dev tun0 table 42 /sbin/ip route del default via [EXTERNE-IPv4] table 42 /sbin/iptables -t nat -I POSTROUTING -s 0/0 -d 0/0 -j MASQUERADE /sbin/iptables -t nat -D POSTROUTING -s 0/0 -d 0/0 -o tun0 -j MASQUERADE /sbin/iptables -t mangle -I PREROUTING -s 10.144.[GW Netz].0/20 -j MARK --set-mark 0x1 /sbin/iptables -t mangle -I OUTPUT -s 10.144.[GW Netz].0/20 -j MARK --set-mark 0x1
Jetzt müssen die für Linux ausführbar werden. Dazu dies als root auf der Konsole eingeben:
chmod +x /etc/network/if-pre-up.d/iptables chmod +x /etc/fastd/ffrz/iptables_ffrz.sh iptables-restore < /etc/iptables.up.rules
VPN (z.B. Mullvad)
Achtung: Kopiere bitte nicht die Konfigurationsdateien von einem Gateway auf andere Gateways!
Für das VPN werden diese Dateien benötigt, die alle nach /etc/openvpn/ müssen:
ca.crt crl.pem mullvad.crt mullvad.key mullvad_linux.conf
Die Datei mullvad_linux.conf muss noch um folgende Zeilen am Ende ergänzt werden:
#custom route-noexec up /etc/openvpn/mullvad_up.sh up /etc/fastd/ffrz/iptables_ffrz.sh
Mullvad hat an seinen Konfigurationen seit mehreren Sicherheitslücken bei OpenVPN und Snowden/NSA geändert. Es kann sein, dass ein Fehler zur Cipher-Liste angezeigt wird. Dann muss in der mullvad_linux.conf die Zeile zur TLS-Verschlüsselung beginnend tls-cipher auskommentiert werden. Wenn kein IPv6 am Server ins Internet möglich ist, kann auch tun-ipv6 auskommentiert werden.
Die Datei /etc/openvpn/mullvad_up.sh gibt es noch nicht.Also bitte die Datei mit folgenden Zeilen anlegen:
#!/bin/sh ip route replace 0.0.0.0/1 via $5 table 42 ip route replace 128.0.0.0/1 via $5 table 42 service isc-dhcp-server restart exit 0
Diese Datei muss nun auch als root ausführbar gemacht werden:
chmod +x /etc/openvpn/mullvad_up.sh
Damit Linux auch diese VPN-Schnittstelle kennt, muss tun in der Datei /etc/modules bekannt gemacht werden. OpenVPN benötigt ein tun-Interface. Trage einfach in eine eigene neue Zeile dies ein
tun
Bitte nun als root über die Konsole tun aktivieren und den VPN starten mit:
modprobe tun service openvpn start
VPN-Connect regelmäßig überprüfen
Es ist sinnvoll regelmäßig zu prüfen, ob die VPN Verbindung noch aktiv ist. Dazu wird ein Script auf dem Server abgelegt, dass dann über den CRON immer neu den VPN-Connect prüft.
Script /etc/openvpn/check-vpn.sh
#!/bin/bash # Test gateway is connected to VPN test=$(ping -q -I tun0 8.8.8.8 -c 4 -i 1 -W 5 | grep 100 ) if [ "$test" != "" ] then echo "VPN nicht da - Neustart!" service openvpn restart # Fehler - VPN nicht da - Neustart else echo "alles gut" fi
Dann noch das Script ausführbar machen:
chmod ug+x /etc/openvpn/check-vpn.sh
Danach in die Datei /etc/crontab das Skript alle 10 Minute auszuführen und damit regelmäßig der VPN-Status geprüft wird.
# Check VPN via openvpn is running, if not service restart */10 * * * * root /ffrz/check-vpn.sh > /dev/null
Die Änderungen übernehmen durch einen Neustart des Cron-Dämonen:
service cron restart
Mesh - fastd
Wir brauchen für den neuen Server die Schlüssel für fastd. Diese sind in Stormarn für 12 Gateways bereits in der Firmware eingetragen und den privaten Schlüssel gibt es über Kaj von Freifunk Stormarn.
Im Folgenden wird der sichere private Schlüssel als [SERVER-SECRET-KEY] aufgeführt und müssen durch die erzeugten Schlüssel sinnvoll ersetzt werden!
Bitte ins fastd-Verzeichnis wechseln und als root zwei neue Verzeichnisse anlegen. Dort werden die Schlüssel für das Freifunknetz hinterlegt, damit Gateway und Router später zusammenfinden können:
cd /etc/fastd mkdir -p ffrz/gateway/peers mkdir ffrz/gateway/gateways
Es ist eine Konfigurationsdatei für fastd notwendig. In der folgenden Konfiguration bitte die [EXTERNE-IPv4] durch die echte IP vom Server ersetzen. Wenn es auch eine IPv6 gibt, kann die entsprechende Zeile aktiviert werden und benötigt die echte IPv6 [EXTERNE-IPv6]. Die Konfigurationsdatei /etc/fastd/ffrz/fastd.conf soll bitte diese Zeilen enthalten:
# Bind to a fixed address and port, IPv4 and IPv6 at Port 1234 bind any:10000 interface "eth0"; # bind [EXTERNE-IPv6]:1234 interface "eth0"; # Set the user, fastd will work as user "ffrz"; # Set the interface name interface "ffrz-mesh"; # Set the mode, the interface will work as mode tap; # Set the mtu of the interface (salsa2012 with ipv6 will need 1406) mtu 1426; # Set the methods (aes128-gcm preferred, salsa2012+umac preferred for nodes) method "salsa2012+umac"; method "null"; # NUR WENN DAS GW UNVERSCHLÜSSELT ANNEHMEN DARF
#hide ip addresses yes; #hide mac addresses yes: # Secret key generated by `fastd --generate-key` secret "[SERVER-SECRET-KEY]"; # Log everything to syslog log to syslog level debug; # Include peers from our git-repos include peers from "/etc/fastd/ffrz/gateway/peers/"; include peers from "/etc/fastd/ffrz/gateway/gateways/"; # Configure a shell command that is run on connection attempts by unknown peers (true means, all attempts are accepted) on verify "true"; # on verify "/etc/fastd/fastd-blacklist.sh $PEER_KEY"; # Configure a shell command that is run when fastd comes up on up " ip link set dev $INTERFACE address 00:5b:27:80:0X:XX # X für das GW Netz, zB 2:24 für 10.144.224.0/20 ip link set dev $INTERFACE up ifup bat0 batctl if add $INTERFACE batctl gw server 100 Mbit/ 100 Mbit batctl vm server sh /etc/fastd/ffrz/iptables_ffrz.sh ";
Nun sollten in das /etc/fastd/ffrz/gateway/gateways/ Verzeichnis auch alle Gateways hinterlegt werden. Die Datei sollte einfach benannt werden. Für unser Gateway "Barnitz" wäre es barnitz. Die Datei muss den public-Key des jeweiligen Gateway haben und die öffentliche IP-Adresse für den fastd Remote Zugriff. Damit ergibt sich folgender Inhalt:
key "[SERVER-PUBLIC-KEY]"; # remote [EXTERNE-IPv4]:10000;
Das Beste ist, wenn man nun die fastd-Konfiguration mal überprüft. Vorher muss der Server rebootet werden, damit die vorher durchgeführten Anpassungen auch Wirkung zeigen :-)
Dann als root auf der Konsole mit folgender Zeile die fastd Einstellungen prüfen:
fastd -c /etc/fastd/ffrz/fastd.conf
Wenn das erfolgreich war, kann nun fastd gestartet werden, auch wieder als root mit:
service fastd start
Wichtig: In der Konfiguration wird jeder Router reingelassen. Das mag nicht jeder, aber es vereinfacht die Integration der Router und damit auch die Verteilung. Wenn man das nicht möchte, müsste jeder Router separat mit seinem öffentlichen Schlüssel unter '.../peers/ hinterlegt werden. Auskommentiert ist eine Zeile bei on verify die eine Blacklist führt. Damit kann man unliebsame Genossen aussperren. Wenn man das haben möchte, so ist eine Datei /etc/fastd/fastd-blacklist.sh zu erstellen mit folgenden Zeilen und dann auch ausführbar zu machen:
#!/bin/bash PEER_KEY=$1 if /bin/grep -Fq $PEER_KEY /etc/fastd/fastd-blacklist.json; then exit 1 else exit 0 fi
Wie die weiteren Dateien mit der Blacklist aussehen, findet man unter diesem Link https://github.com/ffruhr/fastdbl
DHCP
DHCP radvd IPv6
Es wird für IPv6 die Konfigurationsdatei /etc/radvd.conf mit folgenden Zeilen benötigt:
interface br-ffrz { AdvSendAdvert on; IgnoreIfMissing on; AdvManagedFlag off; AdvOtherConfigFlag on; MaxRtrAdvInterval 200; AdvLinkMTU 1280; prefix fddf:0bf7:80::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; }; RDNSS fddf:0bf7:80::[GW Netz]:1 { }; };
Jetzt kann radvd als root auf der Konsole gestartet werden:
service radvd restart
DHCP isc-dhcp-server IPv4 und IPv6
Die Konfigurationsdatei /etc/dhcp/dhcpd.conf wird für IPv4 mit folgenden Zeilen benötigt:
ddns-update-style none; option domain-name ".ffod"; # möglichst kurze Leasetime default-lease-time 120; max-lease-time 600; log-facility local7; subnet 10.144.XXX.0 netmask 255.255.240.0 { authoritative; range 10.144.XXX.2 10.144.XXX.254; option routers 10.144.[GW Netz].1; option domain-name-servers 10.144.[GW Netz].1; # für die eigenen DNS-Einträge # option domain-name-servers 85.214.20.141; # weitere anonyme DNS # option domain-name-servers 213.73.91.35; } include "/etc/dhcp/static.conf";
Bitte eine leere Datei /etc/dhcp/static.conf erzeugen. Anleitung unter: https://github.com/ffod/dhcp-static.
Auf dem DHCP-Server muss noch das Bridge-Interface für IPv4 festgelegt werden. Bitte die Datei /etc/default/isc-dhcp-server mit folgender Option ergänzen:
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACES="br-ffrz"
Am Besten wird der DHCP-Server vor dem Start und Betrieb noch mal geprüft. Bitte vorher den Server rebooten und dann auf der Konsole als root folgende Zeile ausführen:
dhcpd -f -d
War das erfolgreich, so kann der DHCP-Server als root gestartet werden:
service isc-dhcp-server restart
REBOOT
Server, Routing, etc mal testen
Man schaue sich die Routings an, ob die passen. Dazu kann man das mit diesen Befehlen prüfen:
ifconfig
ping ccc.de
nslookup ccc.de
nslookup map.ffod
ping -q -I tun0 8.8.8.8
route -n
ip route show
ip route show table 42
ip rule show
iptables -L -v -n -t mangle
iptables -L -v -n -t nat
Wichtig für die ffmap ist, dass die korrekten Versionen für batman-adv (2013.4.0) und batctl (2013.4.0) laufen. Daher mit folgenden Befehlen die Versionen prüfen.
cat /sys/module/batman_adv/version
batctl -v
batadv-vis -v
Wer mal die Bandbreite gerade bei einem gemiedeten Server prüfen möchte, kann das recht einfach mit wget machen. Einfach folgenden Test mit 100 MB durchführen und in der Zusammenfassung sieht man die max. Bandbreite für den Download. Dies ist schon mal ein guter Indikator. Der Werte sollte in jedem Fall größer 5 M/s sein, wenn der Anbieter eine 100 MBit Karte bei der Hardware versprochen hatte.
wget -O /dev/null http://speedtest.dal01.softlayer.com/downloads/test100.zip
Außerdem sollte man testen ob der alfred Dienst korrekt läuft. Dazu öffnet man htop mit root-Rechten und sucht mit F3 nach alfred. Der Eintrag sollte alfred -i br-ffrz -b bat0 lauten. Falls dieser Eintrag fehlt kann man den Dienst manuel mit root-Rechten starten: alfred -i br-ffrz -b bat0
Meldet der Dienst "read unix socket" zurück, ist alles gut. Sollte es eine Fehlermeldung geben ("can't bind: Cannot assign requested address" und "Failed to open interfaces") sollte man im wiki von Freifunk Pinneberg mal nachlesen: https://wiki.pinneberg.freifunk.net/alfred
DNS-Server (BIND)
Für das interne Freifunknetz ist nun noch der DNS-Server bind9 mit den Konfigurationsdateien wie folgt zu konfigurieren:
Erstmal diese Datei /etc/bind/named.conf.options
options { directory "/var/cache/bind"; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. forwarders { 8.8.8.8; 8.8.4.4; }; //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== // dnssec-enable yes; // dnssec-validation yes; dnssec-validation no; // dnssec-lookaside auto; // recursion yes; // allow-recursion { localnets; localhost; }; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; };
Dann in der Datei /etc/bind/named.conf.default-zones folgendes am Ende ergänzen:
zone "stormarn.freifunk.net" { type master; file "/etc/bind/db.net.freifunk.stormarn"; };
Und diese Datei /etc/bind/named.conf.local
// Do any local configuration here // Consider adding the 1918 zones here, if they are not used in your organization include "/etc/bind/zones.rfc1918";
Nun die db.net.freifunk.stormarn Datei mit Inhalt füllen:
Dazu https://github.com/ffod/bind
Achtung, je nach Einstellungen bitte auch die resolv.conf beachten, damit später auch DNS funktioniert!!!
Mit den Dateien kann bind9 als root über die Konsole gestartet werden:
service bind9 restart
Fertig
Der Server ist jetzt fertig und sollte als Gateway laufen. Bitte den Server neu starten und schauen, ob man sich mit fastd als Client an den Server anmelden kann.
Mit einem PC/Notebook kann die Verfügbarkeit des Gateways getestet werden bzw. kann man so auch ohne FF Router eine sichere Verbindung fastd herstellen.
Eine Client Datei (z.B. client-test.conf) soll die fastd-Test-Verbindung mit folgendem Inhalt ermöglichen:
mode tap; method "salsa2012+umac"; mtu 1426; secret "[ein privater fastd key für den client]"; peer "FreifunkRouter" { remote "[GW Name].ffod.org":10000; # IPV4 Server key "[der öffentliche fastd key vom server]"; } on up " ip link set up $INTERFACE batctl if add $INTERFACE ";
Dann auf der Konsole fastd als client starten:
fastd -c /etc/fastd/client_test.conf
Man sollte nun sehen, dass der Gateway gefunden wird und sich mittels Handshake verbindet und dann erfolgreich den fastd-VPN geöffnet hat. Parallel kann man das auch auf dem Server im System-Log verfolgen. Wichtig sind mögliche Fehlermeldungen, wenn die Verbindung nicht ordnungsgem. erfolgt.
FOLGENDE SCHRITTE SIND FÜR EIN GW NICHT WEITER NOTWENDIG!!!
FFmap Einrichten
Die FFmap visualisiert die Freifunk Router. So hat man visuell einen Überblick über die Infrastruktur. Dieser Absatz erklärt wie man optional seinem neuen Gateway beibringt eine Karte darzustellen auf denen die Freifunk-Knoten zu sehen sind. Die Daten hierfür werden in das Verzeichnis /***/meshviewer/data geschrieben. Abhängig vom genutzten Web-Server Paket möchte man den meshviewer vielleicht nicht in dem hier vorgeschlagenen Ordner installieren sondern in /var/www/ oder sonstwo. Dann müssen die entsprechenden Pfade natürlich geändert werden (auch im Eintrag im crontab hinter dem "-d" Parameter).
WICHTIG: das folgende darf nicht als ROOT sondern muss als lokaler User ffrz erfolgen:
FFmap meshviewer Frontend und Backend (neue Version)
Es werden laufende batctl, alfred-json und batadv-vis benötigt. Als Basis für das Frondend muss Folgendes installiert werden. Wer sein FFmap-3d aktualisiert, muss npm nicht neu installieren.
apt-get install rrdtool python python3-pip apt-get install nodejs-legacy sudo su -c "gem install sass" curl -L --insecure https://www.npmjs.org/install.sh | bash pip install git://github.com/networkx/networkx.git#egg=networkx pip-3.2 install networkx
WICHTIG: die folgenden Eingaben auf der Console müssen unter dem User ffrz erfolgen!
Nun können die Sourcen für den meshviewer heruntergeladen werden:
mkdir /ffrz cd /ffrz git clone https://github.com/ffnord/ffmap-backend.git cd ffmap-backend git checkout v2 cd .. git clone https://github.com/tcatm/meshviewer.git
Dann in das Verzeichnis und mit folgenden Befehlszeilen die notwendige Installation abschließen:
cd meshviewer npm install npm install bower grunt-cli node_modules/.bin/bower install --allow-root node_modules/.bin/grunt --force
Die letzte Zeile installiert die Basis für das Frondend. Es dürfen keine Fehler angezeigt werden. Wenn 'ERR angezeigt wird, wurden vermutlich die Zeilen als root eingegeben. Wenn das der Fall war, dann bitte die Verzeichnisse komplett löschen und dann unter dem User ffod erneut Schritt für Schritt durchlaufen.
Nun bitte noch die Konfiguration für die Community Lauenburg und Stormarn vornehmen. Dazu die Datei config.js im meshviewer Ordner erstellen und folgendes hereinkopieren:
{ {
"dataPath": "http://map.ffod.org/data/", "siteName": "Freifunk Lauenburg & Stormarn", "mapSigmaScale": 0.5, "showContact": false, "maxAge": 7, "globalInfos": [ { "name": "Wochenstatistik", "href": "data/nodes/globalGraph.png", "thumbnail": "data/nodes/globalGraph.png", "caption": "Bild mit Wochenstatistik" } ], "nodeInfos": [ { "name": "Clientstatistik", "href": "data/nodes/{NODE_ID}.png", "thumbnail": "data/nodes/{NODE_ID}.png", "caption": "Knoten {NODE_ID}" } ], "mapLayers": [
{
"name": "Mapquest streets", "url": "https://b.tiles.mapbox.com/v4/mapquest.streets-mb/{z}/{x}/{y}.jpg?access_token=pk.eyJ1IjoiZmZvZCIsImEiOiJjaXFtZjJ2aHAwMDI1aTRubXl4Z254cmw1In0.-z8XLL906JwNZQWnWB5TkQ", "config": { "subdomains": "1234", "type": "osm", "attribution": "Tiles © <a href=\"https://www.mapquest.com/\" target=\"_blank\">MapQuest</a>, Data CC-BY-SA OpenStreetMap", "maxZoom": 19 }
},
{ "name": "Stamen.Toner" },
{
"name": "Esri World Imagery", "url": "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}", "config": { "attribution": "Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community", "maxZoom": 18 }
}, { "name": "arcgisonline-topo",
"url": "https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}", "config": { "subdomains": "1234", "type": "osm", "attribution": "Tiles © ARCGISONLINE.com", "maxZoom": 19 } },
{
"name": "Stamen.Toner" },
{
"name": "Stamen.TonerLite" } ]
} }
Nun abschließend die Installation fertigstellen, dass die relevanten Dateien in dem Verzeichnis build liegen. Darauf muss dann der WebServer als map-Verzeichnis (map.ffod.org) beim Aufruf zeigen. So können dort dann auch über den Cronjob die eingesammelten Daten in der Mesh-View abgerufen werden.
Das Script backend.py für die Zusammensammlung der Daten hat einen Parameter, der die Ausgabe steuert: -d output. Dies ist wichtig für das Frontend, welches diese Daten an einem bestimmten Ort für die Darstellung benötigt. Das Backend-Script kann über die Hilfe auch alle weiteren Parameter anzeigen ( backend.py --help ).
Mit der folgenden Zeile im Crontab werden dann die Daten regelmäßig autom. bereitgestellt:
*/5 * * * * root cd /ffrz/ffmap-backend && ./backend.py -d /ffrz/meshviewer/data/ -a aliases.json --vpn 00:5b:27:80:00:[GW-Nr]
Inhalt der aliases.json [
{ "node_id": "barnitz", "hostname": "GW_Barnitz", "hardware": { "model": "Gateway" }, "owner": { "contact": "www.kst87.de" }, "nodeinfo": { "system": { "site_code": "ffod" } }, "software": { "fastd": { "version": "v17", "enabled": "true" }, "firmware": { "release": "Jessie", "base": "Debian" } }, "location": { "longitude": 10.42472, "latitude": 53.72556 }, "network": { "mesh": { "bat0": { "interfaces": { "tunnel": [ "00:5b:27:80:00:02" ] } } }, "addresses": ["fddf:bf7:80:0:0:0:a38:2"] } }, { "node_id": "beste", "hostname": "GW_Beste", "hardware": { "model": "Gateway" }, "owner": { "contact": "www.kst87.de" }, "nodeinfo": { "system": { "site_code": "ffod" } }, "software": { "fastd": { "version": "v17", "enabled": "true" }, "firmware": { "release": "Jessie", "base": "Debian" } }, "location": { "longitude": 10.36750, "latitude": 53.71944 }, "network": { "mesh": { "bat0": { "interfaces": { "tunnel": [ "00:5b:27:de:00:03" ] } } }, "addresses": ["fddf:bf7:80:0:0:0:a38:3"] } }, { "node_id": "bille", "hostname": "GW_Bille", "hardware": { "model": "Gateway" }, "owner": { "contact": "www.zemvol.de" }, "nodeinfo": { "system": { "site_code": "ffrz" } }, "software": { "fastd": { "version": "v17", "enabled": "true" }, "firmware": { "release": "Jessie", "base": "Debian" } }, "location": { "longitude": 10.46500, "latitude": 53.64778 }, "network": { "mesh": { "bat0": { "interfaces": { "tunnel": [ "00:5b:27:80:00:04" ] } } }, "addresses": ["fddf:bf7:80:0:0:0:a38:4"] } }, { "node_id": "trave", "hostname": "GW_Trave", "hardware": { "model": "Gateway" }, "owner": { "contact": "www.zemvol.de" }, "nodeinfo": { "system": { "site_code": "ffrz" } }, "software": { "fastd": { "version": "v17", "enabled": "true" }, "firmware": { "release": "Jessie", "base": "Debian" } }, "location": { "longitude": 10.60098, "latitude": 54.05412 }, "network": { "mesh": { "bat0": { "interfaces": { "tunnel": [ "00:5b:27:80:00:12" ] } } }, "addresses": ["fddf:bf7:80:0:0:0:a38:12"] } },
{
"node_id": "hopfenbach", "hostname": "GW_Hopfenbach", "hardware": { "model": "Gateway" }, "owner": { "contact": "stephen@lauenburg.freifunk.net" }, "nodeinfo": { "system": { "site_code": "ffrz" } }, "software": { "fastd": { "version": "v17", "enabled": "true" }, "firmware": { "release": "Jessie", "base": "Debian" } }, "location": { "longitude": 10.200835, "latitude": 53.638061 }, "network": { "mesh": { "bat0": { "interfaces": { "tunnel": [ "00:5b:27:80:01:24" ] } } }, "addresses": ["fddf:bf7:80:0:0:0:124:1"] } }
] }