B.A.T.M.A.N.: Unterschied zwischen den Versionen

Aus Freifunk-Rheinbach Wiki
Zur Navigation springen Zur Suche springen
Zeile 92: Zeile 92:


on up "
on up "
  ip link set up dev $INTERFACE
  /etc/fastd/ffrhb/on-up.sh $INTERFACE
  batctl if add $INTERFACE
  ip link set up dev bat0
";
";
</pre>
 
Die Schnittstelle ''mesh-vpn'' muss B.A.T.M.A.N. als Interface hinzugefügt werden und benötigt eine IPv6 Adresss mit scope global. Dies geschieht mit folgenden Script, dass unter /etc/fastd/ffrhb/on-up.sh gespeichert wird. Die MTU der Netzwerkschnittstelle ''bat0'' muss auf die MTU der Freifunk Community gesetzt werden. Für Rheinbach (Domäne Wupper ist es zur Zeit 1364).
<pre>
#!/bin/sh
# Execute when fastd is up
# Autor: Thomas Arend
# (c) 2017 by Thomas Arend
# Date: 03.03.2017
INTERFACE=${1:-mesh-vpn}
# Start meshing on fastd tunnel
ip link set up dev $INTERFACE || echo Error: Interface $INTERFACE not set up
# Add tunnel interface to mesh
batctl if add $INTERFACE || echo Error: Interface $INTERFACE not added to batman
# Set mtu for bat0
# Change 1364 to your value in the site.conf for the FF firmware
ip link set up dev bat0 mtu 1364 || echo Error when setting MTU to 1364
#  Add ipv6 addr with scope global to bat0
NIP='fda0:747e:ab29:2241'
GIP=`ip addr show dev bat0 | grep 'inet6 fe80::.* scope link' | sed 's#.*inet6 fe80::##; s# .*$##'`
ip addr add ${NIP}:${GIP} dev bat0 scope global || echo Error: IPv6 ${NIP}:${GIP} not set


</pre>
</pre>

Version vom 3. März 2017, 16:06 Uhr

B.A.T.M.A.N. (Abkürzung für Better Approach To Mobile Adhoc Networking) ist ein Routingprotokoll für mobile Ad-hoc-Netze. Siehe WikiPedia. heri wird beschrieben, wie B.A.T.M.A.N. auf einen Debian System eingerichtet wird.

Die Verbindung zu den Servern im Internet erfolgt über einen Tunnel. Bei Freifunk Rheinbach wird der Tunnel mittels fastd aufgebaut. Router, die in WLAN Reichweite zueinander stehen, ein MESH-Netzwerk. Darüber hinaus können sich die Router auch über Kabel vermaschen. Auf diesen Verbindungen wird das Routingprotokoll B.A.T.M.A.N. verwendet.

Hier wird beschrieben, wie ein Rechner unter Debian direkt (ohne einen Router) mit den Servern im Internet verbunden wird.

Installation

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

Die folgenden Befehle und Scripte wurden unter Debian 8.7.1 entwickelt und getestet.

Das folgende Script installiert auf einem Debian 8 die notwendige Software - einschließlich fastd. Je nach System kann es notwendig sein zusätzliche Pakete zu installieren. Das folgende Script wurde auf einem frischen Debian 8.7.1 getestet, auf dem nur ein Chipkartenleser unter Moneyplex vorher zum Laufen gebracht wurde.


#!/bin/bash

VBAT="2016.5"

grep 'http://repo.universe-factory.net/debian/' /etc/apt/sources.list || echo  'deb http://repo.universe-factory.net/debian/ sid main' >> /etc/apt/sources.list

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

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

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

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

grep '^batman-adv' /etc/modules || echo -e '#B.A.T.M.A.N für Freifunk'\nbatman-adv' >> /etc/modules

mkdir -p /etc/fastd/ffrhb/peers

fastd konfigurieren

In das Verzeichnis /etc/fastd/ffrhb muss jetzt die folgende Datei fastd.conf kopiert werden:

# 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
bind 0.0.0.0:53757;

# Secret key generated by `fastd --generate-key`
secret "e0e07c1462748f4b0f36423c0ce5c4169e48354a07a3b908435f8ab128259c53";
# Secret: e0e07c1462748f4b0f36423c0ce5c4169e48354a07a3b908435f8ab128259c53
# Public: 72dc4c1aa15cfe4ae5d54caccd8efbd1af8848770843b26a58ed2fb8edb82d50

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)
mtu 1364;

peer limit 1;

# Include peers from the directory 'peers'
include peers from "/etc/fastd/ffrhb/peers";

## IP v6 Adresse muss ggf. nach ip link set up dev bat0 gesetzt werden mit:
## ip addr add dev bat0 fda0:747e:ab29:2241:.../64 scope global

on up "
  /etc/fastd/ffrhb/on-up.sh $INTERFACE
";

Die Schnittstelle mesh-vpn muss B.A.T.M.A.N. als Interface hinzugefügt werden und benötigt eine IPv6 Adresss mit scope global. Dies geschieht mit folgenden Script, dass unter /etc/fastd/ffrhb/on-up.sh gespeichert wird. Die MTU der Netzwerkschnittstelle bat0 muss auf die MTU der Freifunk Community gesetzt werden. Für Rheinbach (Domäne Wupper ist es zur Zeit 1364).

#!/bin/sh

# Execute when fastd is up
# Autor: Thomas Arend
# (c) 2017 by Thomas Arend
# Date: 03.03.2017

INTERFACE=${1:-mesh-vpn}

# Start meshing on fastd tunnel
ip link set up dev $INTERFACE || echo Error: Interface $INTERFACE not set up

# Add tunnel interface to mesh
batctl if add $INTERFACE || echo Error: Interface $INTERFACE not added to batman

# Set mtu for bat0
# Change 1364 to your value in the site.conf for the FF firmware

ip link set up dev bat0 mtu 1364 || echo Error when setting MTU to 1364

#  Add ipv6 addr with scope global to bat0
NIP='fda0:747e:ab29:2241'
GIP=`ip addr show dev bat0 | grep 'inet6 fe80::.* scope link' | sed 's#.*inet6 fe80::##; s# .*$##'`

ip addr add ${NIP}:${GIP} dev bat0 scope global || echo Error: IPv6 ${NIP}:${GIP} not set

In das Unterverzeichnis peers kommen die Dateien mesh_vpn_backbone_peer_wupper<n> mit den öffentlichen Schlüsseln der Server im Internet. <n> ist dabei die Numer des Servers (0-9).

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

Nun muss nur noch fastd gestartet werden mit:

service fastd start

Um fastd mit jedem Neustart automatisch zu starten, muss der folgende Befehl ausgeführt werden:

systemctl enable fastd

Test der Konfiguration

Ob alles richtig läuft, zeigen ifconfig, systemctl status fastd und batctl if bzw. batctl tg

root@x2:/etc/fastd/ffrhb/peers# ifconfig
bat0      Link encap:Ethernet  Hardware Adresse b2:f8:ce:2f:49:42  
          inet6-Adresse: fe80::b0f8:ceff:fe2f:4942/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:37266 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:24 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0 
          RX bytes:2281776 (2.1 MiB)  TX bytes:1026 (1.0 KiB)

mesh-vpn  Link encap:Ethernet  Hardware Adresse ce:1a:f0:74:c6:ff  
          inet6-Adresse: fe80::cc1a:f0ff:fe74:c6ff/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1364  Metrik:1
          RX packets:69111 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28101 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:500 
          RX bytes:9860004 (9.4 MiB)  TX bytes:5958484 (5.6 MiB)
root@x2:/etc/fastd/ffrhb/peers# systemctl -l status fastd
● fastd.service - LSB: Fast and Secure Tunneling Daemon
   Loaded: loaded (/etc/init.d/fastd)
   Active: active (running) since So 2017-02-26 17:52:59 CET; 31min ago
   CGroup: /system.slice/fastd.service
           └─3122 /usr/bin/fastd --syslog-level info --config /etc/fastd/ffrhb/fastd.conf

Feb 26 17:52:59 x2 fastd[3115]: Starting Fast and Secure Tunneling Daemon...  Autostarting fastd 'ffrhb':.
Feb 26 17:52:59 x2 systemd[1]: Started LSB: Fast and Secure Tunneling Daemon.
root@x2:/etc/fastd/ffrhb/peers# batctl if
mesh-vpn: active
root@x2:/etc/fastd/ffrhb/peers# batctl tg
[B.A.T.M.A.N. adv 2016.5, MainIF/MAC: mesh-vpn/ce:1a:f0:74:c6:ff (bat0/b2:f8:ce:2f:49:42 BATMAN_IV)]
   Client             VID Flags Last ttvn     Via        ttvn  (CRC       )
 * 2c:f0:ee:b3:e6:c2   -1 [.W..] ( 38) 66:60:a9:f5:70:63 ( 49) (0xef11ca93)
 * 14:cc:20:6f:46:00   -1 [....] ( 58) 16:d0:20:6f:46:00 ( 59) (0x84f2afcd)
 * a0:99:9b:2d:0e:49   -1 [.W..] (  0) 8a:93:63:cf:8b:63 (  0) (0xf96b1321)
 * 60:e3:27:9a:9e:12    0 [....] (169) f2:1d:56:5c:42:43 (174) (0xa4d616f6)
 * f4:f2:6d:ea:ec:34   -1 [....] (231) 86:9c:00:88:bf:b3 (231) (0xf17a3965)
 * 70:3e:ac:35:57:44   -1 [.W..] (137) 2e:4c:59:48:85:9b (144) (0x975fc536)

Netzwerkbrücke

Nun muss nur noch eine Netzwerkbrücke eingerichtet werden. Aber daran arbeite ich noch.

Netzwerkbrücke