Hier eine sehr kurz und mit absicht einfach gehaltene Anleitung wie man B.A.T.M.A.N. und fastd auf einen aktuellen Raspbian zum laufen bekommt.Darauf aufbauent ist auch auch ein Offloader möglich. Dazu ist entweder ein VLAN-fähiger Switch oder eine zusätzliche USB-Netzwerkkarte nötig.

Grundkonfiguration

sudo usermod -aGadm,staff pi
sudo reboot

sudo apt-get install cmake doxygen bison libcap-dev libsodium-dev libjson-c-dev batctl bridge-utils xz-utils wget pkg-config

fastd

cd /usr/local/src

wget --no-check-certificate https://git.universe-factory.net/libuecc/snapshot/libuecc-5.tar.gz

tar -xzf libuecc-5.tar.gz
cd libuecc-5/

cmake .
make
sudo make install
sudo ldconfig -v
{{{ cd /usr/local/src

wget --no-check-certificate https://projects.universe-factory.net/attachments/download/81/fastd-17.tar.xz tar -xf fastd-17.tar.xz cd fastd-17/ cmake . make sudo make install

sudo mkdir /etc/fastd/

}}}

Schlüssel generieren ...

fastd --generate-key

... und in folgender Konfiguration anpassen:

/etc/fastd/fastd.conf

log level debug;
log to syslog level warn;
interface "mesh-vpn";
method "salsa2012+umac";
#method "null+salsa2012+umac";
#method "null";
secret "FFF1415dd15eb858eac8104d8c98a5a384cd9ea1da7c5a23cd643b05734d6269";
#Public: FFF4a0ec3742f9e199d21191034c30499ac9b57b2f495a82ce8995ef6d3fa41c
mtu 1406;
mode tap;

status socket "/var/run/fastd.mesh_vpn.socket";

peer group "backbone" {
  peer limit 1;

  peer "gw1" {
    key "e087d1deefc6ba6f7fe4ba293d0358d6f8fb8a3eef53f4133d82b4faa9717c46";
    remote ipv4 "gw1.freifunk-gera-greiz.de" port 10181;
  }

  peer "gw2" {
    key "1026c1a0a79817084af1724571b7689ad94eb3f5934e3bd8c6041c3708554c6b";
    remote ipv4 "gw2.freifunk-gera-greiz.de" port 10181;
  }

  peer "gw3" {
    key "e5fe5ec0e7d7a1fb125a02c06b8cee8b06405752027e346d85d81ff48f350746";
    remote ipv4 "gw3.freifunk-gera-greiz.de" port 10181;
  }
}

on up "
  modprobe batman-adv
  ip link set up dev $INTERFACE
  batctl if add $INTERFACE
  sysctl net.ipv6.conf.bat0.disable_ipv6=1
  sysctl net.ipv6.conf.mesh-vpn.disable_ipv6=1

  ip l set bat0 up
  batctl gw client 45
  batctl orig_interval 5000
  batctl multicast_mode 0
  echo 15 > /sys/class/net/bat0/mesh/hop_penalty
  echo 1 >  /sys/class/net/bat0/mesh/bridge_loop_avoidance
  echo 1 >  /sys/class/net/$INTERFACE/batman_adv/no_rebroadcast

  ifup br-client
  brctl addif br-client bat0
  ";
on down "
  brctl delif br-client bat0

  ip link set down dev bat0
  ifdown br-client
";

B.A.T.M.A.N. und Interfaces

modinfo batman-adv

filename:       /lib/modules/4.1.7+/kernel/net/batman-adv/batman-adv.ko
version:        2015.0
description:    B.A.T.M.A.N. advanced
author:         Marek Lindner , Simon Wunderlich 
license:        GPL
srcversion:     E9D015FA50D13B3188D4869
depends:
intree:         Y
vermagic:       4.1.7+ preempt mod_unload modversions ARMv6


Es sollte mindestens die Version 2015.0 verwendet werden, ansonsten muss dieses Kernelmodul selbst übersetzt werden.

Optional falls batman zu alt ist:

cd /usr/local/src

sudo apt-get install linux-headers-$(uname --kernel-release) build-essential


wget https://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2016.3.tar.gz
tar -xzf batman-adv-2016.3.tar.gz
cd batman-adv-2016.3/
wget https://raw.githubusercontent.com/ffggrz/ff-overlay/master/net-misc/batman-adv/files/decrease-maximum-fragment-size-2016.3.patch
patch -p1 -i decrease-maximum-fragment-size-2016.3.patch
make
sudo make install
reboot


sudo apt-get install pkg-config libnl-genl-3-dev libnl-3-200 libnl-3-dev
wget https://downloads.open-mesh.org/batman/releases/batman-adv-2016.3/batctl-2016.3.tar.gz
tar -xzf batctl-2016.3.tar.gz
cd batctl-2016.3/
make
sudo make install

Hier bitte eigene IP anpassen und nicht vergessen im github eintragen!

/etc/network/interfaces

auto br-client
iface br-client inet static
  bridge-stp no
  bridge-fd 0
  bridge-hello 10
  bridge_ports none

  address 10.181.0.123
  netmask 255.255.192.0
  dns-nameservers 10.181.0.12
  dns-search ffggrz

  post-up start-stop-daemon -b --start --exec /usr/local/bin/fastd -- --config /etc/fastd/fastd.conf;
  post-down start-stop-daemon --stop --exec /usr/local/bin/fastd;


iface br-client inet6 static
  address fdb5:78b:64cc::123
  netmask 64

Damit der Raspberry Pi nicht an das neuen Interfaces den dhcp-Client startet brauchen wir folgende zusätzliche Zeile:

/etc/dhcpcd.conf

denyinterfaces br-client bat0 mesh-vpn

Und neustarten:

sudo service dhcpcd restart

Test

Zum Test kann der fastd manuell gestartet werden:

sudo fastd --config /etc/fastd/fastd.conf

ALFRED

cd /usr/local/src

wget http://downloads.open-mesh.org/batman/releases/batman-adv-2015.1/alfred-2015.1.tar.gz
tar -xzf alfred-2015.1.tar.gz
cd alfred-2015.1/
make CONFIG_ALFRED_GPSD=n
sudo make CONFIG_ALFRED_GPSD=n install

Zum "on up" in der fastd.conf kommt noch am Schluss folgendes dazu:

/sbin/start-stop-daemon -b --start --exec /usr/local/sbin/batadv-vis -- -si bat0
/sbin/start-stop-daemon -b --start --exec /usr/local/sbin/alfred -- -i br-client -b bat0

ALFRED-Announce:

sudo apt-get install ethtool python3-pip python3-netifaces lsb-release
sudo pip3 install py-cpuinfo

cd /usr/local/src
git clone https://github.com/ffggrz/ffnord-alfred-announce

Die "config.json" anpassen !

crontab:

* * * * * root /usr/local/src/ffnord-alfred-announce/announce.sh -u /var/run/alfred.sock

Hinweis

Es dauert mindestens 1 Minute bis der Client im Mesh-Netzwerk verfügbar ist.Zur Geschwindigkeit muss gesagt werden dass es nicht besonders schnell ist. Im Vergleich zu OpenVPN ist kaum ein Unterschied zu messen.