VPN Offloader: Unterschied zwischen den Versionen

Aus Thomas Wiki
Zur Navigation springen Zur Suche springen
 
(39 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 6: Zeile 6:




== Was ist ein VPN Offloader ==
== Was ist ein VPN-Offloader? ==


Ein VPN Offloader ist ein möglichst leistungsstarker Rechner, der im Freifunknetz eine VPN-Verbindung zu den Supernodes aufbaut und die einfachen Nodes von der Verschlüsselung entlastet. In der Regel erreichen einfache Router nur eine Geschwindigkeit von 10 MBit/s, weil die CPU die Daten nicht schneller verschlüsseln kann. Hier hilft eine VPN-Offloader, der je nach Leistung 80 Mit/s und mehr erreichen kann und damit die eigene Internetverbindung dicht macht.
Ein VPN-Offloader ist ein leistungsstarker Rechner mit zwei Netzwerkkarten, der im Freifunknetz für die Nodes die VPN-Verbindung zu den Supernodes übernimmt. Die Nodes weren dadurch von der Verschlüsselung der VPN-Verbindung entlastet. In der Regel erreichen einfache Router nur eine Geschwindigkeit von etwa 10 MBit/s, weil die CPU die Daten nicht schnell genug verschlüsseln kann. Hier hilft ein schneller VPN-Offloader, der je nach CPU 80 Mit/s deutlich höherer Datenraten erzielt.


== Was wir brauchen ==
Eine Netzwerkkarte verbindet den VPN-Offloader mit dem Internet und den Supernodes, die andere Netzwerkkarte stellt die Verbindung zu den Freifunkroutern her. Grundsätlich ist es unerheblich, ob der VPN-Offloader dies Ethernet oder WLAN herstellt. Wichtig ist nur, dass die Freifunk-Router nicht mehr selbst die Verbindung über ''fastd'' zu den Supernodes herstellen.
 
Die Installation besteht aus drei Schritten:
 
# Einrichten des VPN-Tunnels
# Verbinden des VPN-Tunnel und der zweiten Netzwerkkarte für das MESH
# Konfigurieren der Router zur Nutzung des VPN-Offloader
 
== Was brauchen wir? ==


Einen schnellen Rechner oder Router. Hier habe ich mich für einen ganzen Rechner entschieden. Als Betriebssystem nehme ich Debian 8.5 Jessy. Es geht sicher auch unter OpenSuSE, aber da ist das besorgen der aktuellen Software etwas aufwändiger, da es keine geeigneten Paketquellen als RPM gibt.
Einen schnellen Rechner oder Router. Hier habe ich mich für einen ganzen Rechner entschieden. Als Betriebssystem nehme ich Debian 8.5 Jessy. Es geht sicher auch unter OpenSuSE, aber da ist das besorgen der aktuellen Software etwas aufwändiger, da es keine geeigneten Paketquellen als RPM gibt.
Zeile 16: Zeile 24:
Als Software brauchen wir zusätzlich  
Als Software brauchen wir zusätzlich  


* fastd
* [[fastd]]
* batctl (am besten passend zu den Supernodes, wie neuere und ältere Versionen miteinander funktionieren, kann ich nicht sagen.
* [[batctl]]
* batman-adv passend zu batctl
* [[batman-adv]] in der ''batctl'' passenden Version.
 
Nehmen Sie am besten die zu Ihrem Freifunknetz passenden Versionen. Wie sich neuere Versionen mit den älteren Versionen vertragen, kann ich nicht sagen. Wie sie die passende Version finden, steht weiter unten. Die anderen Voraussetzungen wie [[wget]], [[make]], [[g++]], [[tar]] etc. führe ich hier nicht auf.


== Installation ==
== Installation ==


=== fastd ===
=== fastd ===
Zeile 28: Zeile 37:


  deb http://repo.universe-factory.net/debian/ sid main
  deb http://repo.universe-factory.net/debian/ sid main
 
Die folgende Befehle fügen anschließend die GnuPG-Schlüssel der Quelle in die Paketverwaltung ein.
Die folgende Befehle fügen anschließend die GnuPG-Schlüssel der Quelle in die Paketverwaltung ein:


  gpg --keyserver pgpkeys.mit.edu --recv-key 16EF3F64CB201D9C
  gpg --keyserver pgpkeys.mit.edu --recv-key 16EF3F64CB201D9C
  gpg -a --export 16EF3F64CB201D9C | apt-key add -
  gpg -a --export 16EF3F64CB201D9C | apt-key add -


Mit folgenden Befehl werden die für fastd benötigten Pakete installiert.
Mit folgenden Befehl werden die für fastd benötigten Pakete installiert:


  apt install apt-transport-http
  apt install apt-transport-https
  apt update
  apt update
  apt install build-essential pkg-config libnl-3-dev linux-headers-amd64 fastd
  apt install build-essential pkg-config libnl-3-dev linux-headers-amd64 fastd
Zeile 42: Zeile 51:
Bei mir war ein ''apt-get install apt-transport-https'' erforderlich. Pakete die schon früher installiert wurden, müssen natürlich nicht erneut installiert werden.
Bei mir war ein ''apt-get install apt-transport-https'' erforderlich. Pakete die schon früher installiert wurden, müssen natürlich nicht erneut installiert werden.


=== batctl 2015.2 ===
=== batctl ===
 
Siehe [http://www.open-mesh.org/projects/open-mesh/wiki/Download Open-Mesh Wiki ]
 
''batctl'' ist ein Konsolenwerkzeug um das Modul ''batman-adv'' zu steuern.
 
Um die für das Freifunknetz passende Version zu finden, melden Sie sich auf einem Freifunk-Router und geben ''batctl -v'' ein.


Siehe [http://www.open-mesh.org/projects/open-mesh/wiki/Download Open-Mesh Wiki ] '''Wichtig!''' nur die passende Version (derzeit 2015.2) verwenden.
root@su-rhb-zingsheim-31-eg:~# batctl -v
batctl 2015.1 [batman-adv: 2015.1]
 
Anschließend installieren Sie batctl mit folgenden Befehlen, in denen Sie ''2015.1'' durch die Version Ihres Freifunk-Routers / Netzes ersetzen.
 
'''Achtung:''' Bis zur Version 2014.4.0 enthielt der Dateiname noch den Modification Level, der meist '0' war. Ab ''2015.0'' ist dieser Modification Level entfallen.


  cd /usr/src/
  cd /usr/src/
  wget http://downloads.open-mesh.org/batman/stable/sources/batctl/batctl-2015.2.0.tar.gz
  wget http://downloads.open-mesh.org/batman/stable/sources/batctl/batctl-2015.1.tar.gz
  tar xzf batctl-2015.2.0.tar.gz
  tar xzf batctl-2015.1.tar.gz
  cd batctl-2015.2.0
  cd batctl-2015.1
  make
  make
  make install
  make install


=== batman-adv 2015.2 ===
Das heruntergeladene Archiv batctl-2015.1.tar.gz können Sie nach der Installation wieder löschen.


Siehe [http://www.open-mesh.org/projects/open-mesh/wiki/Download Open-Mesh Wiki ] '''Wichtig!''' nur die passende Version (derzeit 2015.2) verwenden.
=== batman-adv ===
 
Siehe [http://www.open-mesh.org/projects/open-mesh/wiki/Download Open-Mesh Wiki ]
 
''batman-adv'' sollte in der gleichen Version, wie ''batctl'' installiert werden.
 
'''Achtung:''' Bis zur Version 2014.4.0 enthielt der Dateiname noch den Modification Level, der meist '0' war. Ab 2015.0 ist dieser Modification Level entfallen.
 
''batman-adv'' wird mit den folgenden Befehlen installiert und anschließend mit [[modprobe]] gestartet.


  cd /usr/src/
  cd /usr/src/
  wget http://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2015.2.0.tar.gz
  wget http://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2015.1.tar.gz
  tar xzf batman-adv-2015.2.0.tar.gz
  tar xzf batman-adv-2015.1.tar.gz
  cd batman-adv-2015.2.0
  cd batman-adv-2015.1
  make
  make
  make install
  make install
  modprobe batman-adv
  modprobe batman-adv


In /etc/modules muss die folgende Zeile eingefügt werden, um das Module ''batman-adv'' beim Neustart automatisch zu laden.
Um ''batman-adv'' beim Start des Betriebssystems zu laden muss folgende Zeile in ''/etc/modules'' eingefügt werden:
   
   
  batman-adv
  batman-adv


== Config ==
Das heruntergeladene Archiv ''batman-adv-2015.1.tar.gz'' können Sie nach der Installation wieder löschen.
 
== Konfiguration ==
 
Zuerst konfigurieren wir ''fastd'' für den Aufbau eines VPN-Tunnel zu den Supernodes im Internet.


=== fastd ===
=== fastd ===


fastd --generate-key
'''fastd''' wird über die Datei ''fastd.conf'' und mehrere Dateien für die Gegenstellen (peers) konfiguriert. Es können beliebig viele Tunnel und Gegenstellen definiert werden.
2015-12-01 17:13:46 +0100 --- Info: Reading 32 bytes from /dev/random...
Secret: <s>98ca57a85ca291bae54c844e916b500d42cbfe68fdc5cda431eb81a42fa84540</s>
Public: e2dd57385916c211969632a2934d6d0a7b6831487851510dfb13f634fdec7a24


mkdir /etc/fastd/ffmuc /etc/fastd/peers
Für den Freifunk Rheinbach, Rhein-Sieg-Kreis bzw der Domäne Wupper des Freifunk Rheinland habe ich einen Ordner ''ffrhb'' unter [[/etc/fastd]] angelegt, ihdem sich wiederum der Ordner ''peers'' Gegenstellen befindet. Diese Ordner werden mit folgendem Befehl angelegt.


/etc/fastd/ffmuc/fastd.conf Secret key mit generiertem ersetzen
mkdir -p /etc/fastd/ffrhb/peers
 
'''Tipp:''' Versuchen Sie den Verzeichnisnamen nicht durch ein '-' zwischen 'ff' und 'rhb' zu verschönern. ''systemctl'' mag dies nicht und macht aus dem '-' ein '/'.
 
Für die Verschlüsselung des Tunnels brauchen wir ein Schlüsselpaar, dass wir mit ''fastd'' und dem Befehl ''generate-key'' erzeugen:
   
   
  # Secret key generated by `fastd --generate-key`
  root@x1:~# fastd --generate-key
  secret "<s>98ca57a85ca291bae54c844e916b500d42cbfe68fdc5cda431eb81a42fa84540</s>";
  2016-09-11 21:48:42 +0200 --- Info: Reading 32 bytes from /dev/random...
   
  Secret: 60c62533b05274a4bb22d9688b72d942fc4c9d118432c261151a4ae815be4046
  # use warn or error loglevel for production use
  Public: 4b5d20139bfa98041842f3e146f7299793d0273367cd810b1a79f95e912cdd0d
log level debug;
 
log to syslog level debug;
Nun legen wir die Datei fastd.conf im Verzeichnis ''/etc/fastd/ffrhb'' mit folgendem Inhalt an (Werte gelten zur Zeit für FF-RHB).
 
# name des tunnel interface
<pre>
interface "mesh-vpn";
# Log warnings and errors to stderr
log level warn;
# Akzeptierte Verschlüsselungsmethoden. Muss auch vom Gateway angeboten werden.
 
method "salsa2012+umac";
# Log everything to syslog
log to syslog level warn;
bind 0.0.0.0:10000;
 
# Set the interface name
# Die MTU muss mit der des Gateways übereinstimmen. Im Zweifelsfall bitte nachfragen.
interface "mesh-vpn";
mtu 1426;
 
# Support salsa2012+umac and null methods, prefer salsa2012+umac
# im Ordner "peers" je eine Datei pro VPN-Peer anlegen
method "salsa2012+umac";
include peers from "/etc/fastd/peers";
method "null";
 
on up "
mode tap;
   ip link set dev $INTERFACE up
 
# Bind to a fixed port, IPv4 only
# Wird hier nicht benötigt.
# bind 0.0.0.0:53757;
 
# Secret key generated by `fastd --generate-key`
# 2016-09-11 21:48:42 +0200 --- Info: Reading 32 bytes from /dev/random...
# Secret: 60c62533b05274a4bb22d9688b72d942fc4c9d118432c261151a4ae815be4046
# Public: 4b5d20139bfa98041842f3e146f7299793d0273367cd810b1a79f95e912cdd0d
 
secret "60c62533b05274a4bb22d9688b72d942fc4c9d118432c261151a4ae815be4046";
 
secure handshakes yes;
 
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)
# (see MTU selection documentation)
# Nehmen Sie hier die MTU aus der site.conf der Gluon Site Definitionen.  
 
mtu 1364;
 
# Auch wenn Sie mehrere Tunnel definieren können, es reicht ein Peer.
 
peer limit 1;
 
# Include peers from the directory 'peers'
 
include peers from "/etc/fastd/ffrhb/peers";
 
# Wenn fastd gestartet ist, dann soll der Tunnel für das MESH-Netzwerk von batman-adv genutzt werden.
 
on up "
   ip link set up dev $INTERFACE
   batctl if add $INTERFACE
   batctl if add $INTERFACE
   ip link set up dev bat0
   ip link set up dev bat0
  ";
";
</pre>
 
Ihren erzeugten Schlüssel müssen Sie an die Stelle des hier als Beispiel erzeugten Schlüssels eintragen. Zur Dokumentation kopiere ich das Ergebnis der Schlüsselerzeugung als Kommentar in die Datei. Der öffentlichen (public) Teil wird nicht gebraucht, da die Peers alle eingehenden Verbindungen akzeptieren und keine Authentisierung vornehmen, sondern alle Verbindungen akzeptieren. Für andere VPN-Verbindungen muss der public keys auf dem Server eingetragen werden.
 
=== Peers ===
 
Nun müssen wir noch die Peers in /etc/fastd/ffrhb/peers konfigurieren. Dazu bekommt jeder Peer seine eigene Konfigurationsdatei.
 
Hier die Datei ''mesh_vpn_backbone_peer_wupper0''
   
key "e52daa654abcf5c20c5b7a74b5145f70a7491435c6ef334ae352e4f19c00e8f5";
remote "0.wupper.ffrl.de" port 53757;
 
Jede Datei besteht aus dem Schlüssel des Peers und seinem Namen mit der Angabe des Ports auf dem er auf eien Verbindung wartet.
 
Die Dateien befinden sich unter /tmp/fastd/fastd.mesh_vpn/peers%mesh_vpn_backbone/ auf dem Freifunkrouter, von dem Sie sie mit einfach kopieren können.
 
=== Starten des fastd ===
 
Mit folgendem Befehl kann nun der Dienst ''fastd'' gestartet werden.
 
systemctl start fastd@ffrhb.service
 
Mit ''enable'' richten sie den Dienst dauerhaft ein.
 
systemctl enable fastd@ffrhb.service
 
Jetzt muss nur noch das Netzwerk richtig konfiguriert werden.
 
=== Test der Installation ===
 
Wir haben nun den VPN-Tunnel zu einem oder mehreren Supernodes hergestellt. Dies können wir jetzt testen. Zuerst prüfen wir, ob ''fastd'' läuft.
 
<pre>
root@x1:~# systemctl status fastd@ffrhb.service
root@x1:~# systemctl status fastd@ffrhb.service
  fastd@ffrhb.service - Fast and Secure Tunnelling Daemon (connection ffrhb)
  Loaded: loaded (/lib/systemd/system/fastd@.service; enabled)
  Active: active (running) since Mo 2016-09-12 18:28:07 CEST; 1min 55s ago
  Main PID: 3570 (fastd)
  CGroup: /system.slice/system-fastd.slice/fastd@ffrhb.service
          └─3570 /usr/bin/fastd --syslog-level info --syslog-ident fastd@ffrhb -c /etc/fastd/ffrhb/fastd.conf
</pre>
 
Als Interface müsste nun mesh-vpn ...
 
<pre>
root@x1:~# ifconfig mesh-vpn
mesh-vpn  Link encap:Ethernet  Hardware Adresse 4e:e2:ae:3e:fc:15 
          inet6-Adresse: fe80::4ce2:aeff:fe3e:fc15/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1364  Metrik:1
          RX packets:9638 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6984 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:500
          RX bytes:1096628 (1.0 MiB)  TX bytes:978098 (955.1 KiB)
</pre>
 
... und bat0  zur Verfügung stehen.
 
<pre>
 
<pre> 
root@x1:~# ifconfig bat0
bat0      Link encap:Ethernet  Hardware Adresse ae:39:47:6b:27:da 
          BROADCAST MULTICAST  MTU:1500  Metrik:1
          RX packets:3252 errors:0 dropped:2903 overruns:0 frame:0
          TX packets:0 errors:0 dropped:5 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0
          RX bytes:184784 (180.4 KiB)  TX bytes:0 (0.0 B)
</pre>
 
Mit batctl o erhalten wir eine Liste der ''originators''.
<pre>
root@x1:~# batctl o
[B.A.T.M.A.N. adv 2015.1, MainIF/MAC: mesh-vpn/f6:e6:e6:fd:92:20 (bat0 BATMAN_IV)]
  Originator      last-seen (#/255)          Nexthop [outgoingIF]:  Potential nexthops ...
c6:ed:84:a3:9f:4c    1.452s  (  2) 04:57:a0:90:57:40 [  mesh-vpn]: 04:57:a0:90:57:40 (  2)
f6:f6:6d:40:72:fe    4.004s  (  2) 04:57:a0:90:57:40 [  mesh-vpn]: 04:57:a0:90:57:40 (  2)
46:dd:e7:c7:67:9c    0.524s  ( 11) 04:57:a0:90:57:40 [  mesh-vpn]: 04:57:a0:90:57:40 ( 11)
62:e7:27:9a:a8:8a    8.296s  ( 21) 04:57:a0:90:57:40 [  mesh-vpn]: 04:57:a0:90:57:40 ( 21)
a6:2e:b1:c8:91:b0    1.236s  (  2) 04:57:a0:90:57:40 [  mesh-vpn]: 04:57:a0:90:57:40 (  2)
 
...
</pre>
 
Aus der Liste suchen wir eine MAC Adresse aus und starten einen Ping auf diese Adresse (Abbruch mit Strg-C):
 
<pre>
root@x1:~# batctl p c6:ed:84:a3:9f:4c
PING c6:ed:84:a3:9f:4c (c6:ed:84:a3:9f:4c) 20(48) bytes of data
20 bytes from c6:ed:84:a3:9f:4c icmp_seq=1 ttl=48 time=45.60 ms
20 bytes from c6:ed:84:a3:9f:4c icmp_seq=2 ttl=48 time=51.48 ms
20 bytes from c6:ed:84:a3:9f:4c icmp_seq=3 ttl=48 time=78.93 ms
20 bytes from c6:ed:84:a3:9f:4c icmp_seq=4 ttl=48 time=71.63 ms
^C--- c6:ed:84:a3:9f:4c ping statistics ---
4 packets transmitted, 4 received, 0% packet loss
rtt min/avg/max/mdev = 45.604/61.912/78.930/13.773 ms
</pre>

Aktuelle Version vom 18. September 2016, 06:02 Uhr

Hier folgt eine kurze Beschreibung über die Installation eiens VPN Offloader für Freifunk.

So eine richtig gute Beschreibung habe ich noch nicht gefunden; diese ist es auch nicht, soll es aber mal werden und kommt dann ins Freifunk wiki Rheinbach.

Im ersten Ansatz hangele ich mich an der Beschreibung von ffmuc entlang.


Was ist ein VPN-Offloader?

Ein VPN-Offloader ist ein leistungsstarker Rechner mit zwei Netzwerkkarten, der im Freifunknetz für die Nodes die VPN-Verbindung zu den Supernodes übernimmt. Die Nodes weren dadurch von der Verschlüsselung der VPN-Verbindung entlastet. In der Regel erreichen einfache Router nur eine Geschwindigkeit von etwa 10 MBit/s, weil die CPU die Daten nicht schnell genug verschlüsseln kann. Hier hilft ein schneller VPN-Offloader, der je nach CPU 80 Mit/s deutlich höherer Datenraten erzielt.

Eine Netzwerkkarte verbindet den VPN-Offloader mit dem Internet und den Supernodes, die andere Netzwerkkarte stellt die Verbindung zu den Freifunkroutern her. Grundsätlich ist es unerheblich, ob der VPN-Offloader dies Ethernet oder WLAN herstellt. Wichtig ist nur, dass die Freifunk-Router nicht mehr selbst die Verbindung über fastd zu den Supernodes herstellen.

Die Installation besteht aus drei Schritten:

  1. Einrichten des VPN-Tunnels
  2. Verbinden des VPN-Tunnel und der zweiten Netzwerkkarte für das MESH
  3. Konfigurieren der Router zur Nutzung des VPN-Offloader

Was brauchen wir?

Einen schnellen Rechner oder Router. Hier habe ich mich für einen ganzen Rechner entschieden. Als Betriebssystem nehme ich Debian 8.5 Jessy. Es geht sicher auch unter OpenSuSE, aber da ist das besorgen der aktuellen Software etwas aufwändiger, da es keine geeigneten Paketquellen als RPM gibt.

Als Software brauchen wir zusätzlich

Nehmen Sie am besten die zu Ihrem Freifunknetz passenden Versionen. Wie sich neuere Versionen mit den älteren Versionen vertragen, kann ich nicht sagen. Wie sie die passende Version finden, steht weiter unten. Die anderen Voraussetzungen wie wget, make, g++, tar etc. führe ich hier nicht auf.

Installation

fastd

Für fastd gibt es eine Paketquelle, die wir unseren Quellen in /etc/apt/sources.list mit der folgende Zeile hinzufügen:

deb http://repo.universe-factory.net/debian/ sid main

Die folgende Befehle fügen anschließend die GnuPG-Schlüssel der Quelle in die Paketverwaltung ein:

gpg --keyserver pgpkeys.mit.edu --recv-key 16EF3F64CB201D9C
gpg -a --export 16EF3F64CB201D9C | apt-key add -

Mit folgenden Befehl werden die für fastd benötigten Pakete installiert:

apt install apt-transport-https
apt update
apt install build-essential pkg-config libnl-3-dev linux-headers-amd64 fastd

Bei mir war ein apt-get install apt-transport-https erforderlich. Pakete die schon früher installiert wurden, müssen natürlich nicht erneut installiert werden.

batctl

Siehe Open-Mesh Wiki

batctl ist ein Konsolenwerkzeug um das Modul batman-adv zu steuern.

Um die für das Freifunknetz passende Version zu finden, melden Sie sich auf einem Freifunk-Router und geben batctl -v ein.

root@su-rhb-zingsheim-31-eg:~# batctl -v
batctl 2015.1 [batman-adv: 2015.1]

Anschließend installieren Sie batctl mit folgenden Befehlen, in denen Sie 2015.1 durch die Version Ihres Freifunk-Routers / Netzes ersetzen.

Achtung: Bis zur Version 2014.4.0 enthielt der Dateiname noch den Modification Level, der meist '0' war. Ab 2015.0 ist dieser Modification Level entfallen.

cd /usr/src/
wget http://downloads.open-mesh.org/batman/stable/sources/batctl/batctl-2015.1.tar.gz
tar xzf batctl-2015.1.tar.gz
cd batctl-2015.1
make
make install

Das heruntergeladene Archiv batctl-2015.1.tar.gz können Sie nach der Installation wieder löschen.

batman-adv

Siehe Open-Mesh Wiki

batman-adv sollte in der gleichen Version, wie batctl installiert werden.

Achtung: Bis zur Version 2014.4.0 enthielt der Dateiname noch den Modification Level, der meist '0' war. Ab 2015.0 ist dieser Modification Level entfallen.

batman-adv wird mit den folgenden Befehlen installiert und anschließend mit modprobe gestartet.

cd /usr/src/
wget http://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2015.1.tar.gz
tar xzf batman-adv-2015.1.tar.gz
cd batman-adv-2015.1
make
make install
modprobe batman-adv

Um batman-adv beim Start des Betriebssystems zu laden muss folgende Zeile in /etc/modules eingefügt werden:

batman-adv

Das heruntergeladene Archiv batman-adv-2015.1.tar.gz können Sie nach der Installation wieder löschen.

Konfiguration

Zuerst konfigurieren wir fastd für den Aufbau eines VPN-Tunnel zu den Supernodes im Internet.

fastd

fastd wird über die Datei fastd.conf und mehrere Dateien für die Gegenstellen (peers) konfiguriert. Es können beliebig viele Tunnel und Gegenstellen definiert werden.

Für den Freifunk Rheinbach, Rhein-Sieg-Kreis bzw der Domäne Wupper des Freifunk Rheinland habe ich einen Ordner ffrhb unter /etc/fastd angelegt, ihdem sich wiederum der Ordner peers Gegenstellen befindet. Diese Ordner werden mit folgendem Befehl angelegt.

mkdir -p /etc/fastd/ffrhb/peers

Tipp: Versuchen Sie den Verzeichnisnamen nicht durch ein '-' zwischen 'ff' und 'rhb' zu verschönern. systemctl mag dies nicht und macht aus dem '-' ein '/'.

Für die Verschlüsselung des Tunnels brauchen wir ein Schlüsselpaar, dass wir mit fastd und dem Befehl generate-key erzeugen:

root@x1:~# fastd --generate-key
2016-09-11 21:48:42 +0200 --- Info: Reading 32 bytes from /dev/random...
Secret: 60c62533b05274a4bb22d9688b72d942fc4c9d118432c261151a4ae815be4046
Public: 4b5d20139bfa98041842f3e146f7299793d0273367cd810b1a79f95e912cdd0d

Nun legen wir die Datei fastd.conf im Verzeichnis /etc/fastd/ffrhb mit folgendem Inhalt an (Werte gelten zur Zeit für FF-RHB).

# Log warnings and errors to stderr
log level warn;

# Log everything to syslog
log to syslog level warn;

# Set the interface name
interface "mesh-vpn";

# Support salsa2012+umac and null methods, prefer salsa2012+umac
method "salsa2012+umac";
method "null";

mode tap;

# Bind to a fixed port, IPv4 only
# Wird hier nicht benötigt.
# bind 0.0.0.0:53757;

# Secret key generated by `fastd --generate-key`
# 2016-09-11 21:48:42 +0200 --- Info: Reading 32 bytes from /dev/random...
# Secret: 60c62533b05274a4bb22d9688b72d942fc4c9d118432c261151a4ae815be4046
# Public: 4b5d20139bfa98041842f3e146f7299793d0273367cd810b1a79f95e912cdd0d

secret "60c62533b05274a4bb22d9688b72d942fc4c9d118432c261151a4ae815be4046";

secure handshakes yes;

# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)
# (see MTU selection documentation)
# Nehmen Sie hier die MTU aus der site.conf der Gluon Site Definitionen. 

mtu 1364; 

# Auch wenn Sie mehrere Tunnel definieren können, es reicht ein Peer.

peer limit 1;

# Include peers from the directory 'peers'

include peers from "/etc/fastd/ffrhb/peers";

# Wenn fastd gestartet ist, dann soll der Tunnel für das MESH-Netzwerk von batman-adv genutzt werden.

on up "
   ip link set up dev $INTERFACE
   batctl if add $INTERFACE
   ip link set up dev bat0
";

Ihren erzeugten Schlüssel müssen Sie an die Stelle des hier als Beispiel erzeugten Schlüssels eintragen. Zur Dokumentation kopiere ich das Ergebnis der Schlüsselerzeugung als Kommentar in die Datei. Der öffentlichen (public) Teil wird nicht gebraucht, da die Peers alle eingehenden Verbindungen akzeptieren und keine Authentisierung vornehmen, sondern alle Verbindungen akzeptieren. Für andere VPN-Verbindungen muss der public keys auf dem Server eingetragen werden.

Peers

Nun müssen wir noch die Peers in /etc/fastd/ffrhb/peers konfigurieren. Dazu bekommt jeder Peer seine eigene Konfigurationsdatei.

Hier die Datei mesh_vpn_backbone_peer_wupper0

key "e52daa654abcf5c20c5b7a74b5145f70a7491435c6ef334ae352e4f19c00e8f5";
remote "0.wupper.ffrl.de" port 53757;

Jede Datei besteht aus dem Schlüssel des Peers und seinem Namen mit der Angabe des Ports auf dem er auf eien Verbindung wartet.

Die Dateien befinden sich unter /tmp/fastd/fastd.mesh_vpn/peers%mesh_vpn_backbone/ auf dem Freifunkrouter, von dem Sie sie mit einfach kopieren können.

Starten des fastd

Mit folgendem Befehl kann nun der Dienst fastd gestartet werden.

systemctl start fastd@ffrhb.service

Mit enable richten sie den Dienst dauerhaft ein.

systemctl enable fastd@ffrhb.service

Jetzt muss nur noch das Netzwerk richtig konfiguriert werden.

Test der Installation

Wir haben nun den VPN-Tunnel zu einem oder mehreren Supernodes hergestellt. Dies können wir jetzt testen. Zuerst prüfen wir, ob fastd läuft.

root@x1:~# systemctl status fastd@ffrhb.service
root@x1:~# systemctl status fastd@ffrhb.service
  fastd@ffrhb.service - Fast and Secure Tunnelling Daemon (connection ffrhb)
  Loaded: loaded (/lib/systemd/system/fastd@.service; enabled)
  Active: active (running) since Mo 2016-09-12 18:28:07 CEST; 1min 55s ago
  Main PID: 3570 (fastd)
  CGroup: /system.slice/system-fastd.slice/fastd@ffrhb.service
          └─3570 /usr/bin/fastd --syslog-level info --syslog-ident fastd@ffrhb -c /etc/fastd/ffrhb/fastd.conf

Als Interface müsste nun mesh-vpn ...

root@x1:~# ifconfig mesh-vpn
mesh-vpn  Link encap:Ethernet  Hardware Adresse 4e:e2:ae:3e:fc:15  
          inet6-Adresse: fe80::4ce2:aeff:fe3e:fc15/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1364  Metrik:1
          RX packets:9638 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6984 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:500 
          RX bytes:1096628 (1.0 MiB)  TX bytes:978098 (955.1 KiB)

... und bat0 zur Verfügung stehen.


<pre>  
root@x1:~# ifconfig bat0
bat0      Link encap:Ethernet  Hardware Adresse ae:39:47:6b:27:da  
          BROADCAST MULTICAST  MTU:1500  Metrik:1
          RX packets:3252 errors:0 dropped:2903 overruns:0 frame:0
          TX packets:0 errors:0 dropped:5 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0 
          RX bytes:184784 (180.4 KiB)  TX bytes:0 (0.0 B)

Mit batctl o erhalten wir eine Liste der originators.

root@x1:~# batctl o
[B.A.T.M.A.N. adv 2015.1, MainIF/MAC: mesh-vpn/f6:e6:e6:fd:92:20 (bat0 BATMAN_IV)]
  Originator      last-seen (#/255)           Nexthop [outgoingIF]:   Potential nexthops ...
c6:ed:84:a3:9f:4c    1.452s   (  2) 04:57:a0:90:57:40 [  mesh-vpn]: 04:57:a0:90:57:40 (  2)
f6:f6:6d:40:72:fe    4.004s   (  2) 04:57:a0:90:57:40 [  mesh-vpn]: 04:57:a0:90:57:40 (  2)
46:dd:e7:c7:67:9c    0.524s   ( 11) 04:57:a0:90:57:40 [  mesh-vpn]: 04:57:a0:90:57:40 ( 11)
62:e7:27:9a:a8:8a    8.296s   ( 21) 04:57:a0:90:57:40 [  mesh-vpn]: 04:57:a0:90:57:40 ( 21)
a6:2e:b1:c8:91:b0    1.236s   (  2) 04:57:a0:90:57:40 [  mesh-vpn]: 04:57:a0:90:57:40 (  2)

...

Aus der Liste suchen wir eine MAC Adresse aus und starten einen Ping auf diese Adresse (Abbruch mit Strg-C):

root@x1:~# batctl p c6:ed:84:a3:9f:4c
PING c6:ed:84:a3:9f:4c (c6:ed:84:a3:9f:4c) 20(48) bytes of data
20 bytes from c6:ed:84:a3:9f:4c icmp_seq=1 ttl=48 time=45.60 ms
20 bytes from c6:ed:84:a3:9f:4c icmp_seq=2 ttl=48 time=51.48 ms
20 bytes from c6:ed:84:a3:9f:4c icmp_seq=3 ttl=48 time=78.93 ms
20 bytes from c6:ed:84:a3:9f:4c icmp_seq=4 ttl=48 time=71.63 ms
^C--- c6:ed:84:a3:9f:4c ping statistics ---
4 packets transmitted, 4 received, 0% packet loss
rtt min/avg/max/mdev = 45.604/61.912/78.930/13.773 ms