<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://kbu.freifunk.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Christof</id>
	<title>Freifunk Köln, Bonn und Umgebung - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://kbu.freifunk.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Christof"/>
	<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Spezial:Beitr%C3%A4ge/Christof"/>
	<updated>2026-04-11T21:58:33Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2838</id>
		<title>Supernode</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2838"/>
		<updated>2014-10-14T22:42:02Z</updated>

		<summary type="html">&lt;p&gt;Christof: /* fastd.conf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
[[https://en.wikipedia.org/wiki/Supernode_%28networking%29 wikipedia-article]]&lt;br /&gt;
&lt;br /&gt;
Benötigte Software&lt;br /&gt;
&lt;br /&gt;
1) [[https://projects.universe-factory.net/projects/fastd fastd]] mesh-node-vpn&lt;br /&gt;
&lt;br /&gt;
2) [[https://github.com/ff-kbu/fastd-service vpn-key-upload]] todo: remove overhead (apache,ruby,sinatra ...), [https://en.wikipedia.org/wiki/KISS_principle kiss principle]]&lt;br /&gt;
not documented in here (todo)&lt;br /&gt;
&lt;br /&gt;
3) [[http://www.open-mesh.org/projects/open-mesh/wiki batman-adv]]&lt;br /&gt;
&lt;br /&gt;
4) [[http://www.tinc-vpn.org/ tinc]] mesh-backbone-vpn&lt;br /&gt;
&lt;br /&gt;
5) OS: debian wheezy (or whatever you like)&lt;br /&gt;
&lt;br /&gt;
Du benötigst ausserdem: &amp;lt;br /&amp;gt;&lt;br /&gt;
* einen fastd-private-key &lt;br /&gt;
* eine IPv4/IPv6 Adresse und ein Subnetz&lt;br /&gt;
* eine IPv4 Adresse für das Backbone-Netz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
In der /etc/sysctl.conf muss folgendes gesetzt sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
net.ipv4.ip_forward=1&lt;br /&gt;
net.ipv4.ip_no_pmtu_disc=1&lt;br /&gt;
net.ipv4.route.flush=1&lt;br /&gt;
net.ipv6.conf.all.forwarding=1&lt;br /&gt;
net.ipv6.conf.all.autoconf=0&lt;br /&gt;
net.ipv6.conf.all.accept_ra=0&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die /etc/sysctl.conf neu einlesen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysctl -p&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;deb http://repo.universe-factory.net/debian/ sid main&amp;quot; &amp;gt;&amp;gt;/etc/apt/sources.list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GPG-Key importieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key  16EF3F64CB201D9C&lt;br /&gt;
 gpg -a --export 16EF3F64CB201D9C | apt-key add -&lt;br /&gt;
 apt-get update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batman-adv ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install batman-adv-dkms&lt;br /&gt;
echo &amp;quot;batman-adv&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== fastd ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 apt-get install fastd curl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== fastd.conf ====&lt;br /&gt;
&amp;quot;[YOUR SECRET KEY HERE]&amp;quot; Sollte dabei durch den fastd-secret-key ersetzt werden (erfragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
# Log warnings and errors to stderr&lt;br /&gt;
#log level warn;&lt;br /&gt;
log level error;&lt;br /&gt;
&lt;br /&gt;
# Log everything to a log file&lt;br /&gt;
#log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level debug;&lt;br /&gt;
log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level warn;&lt;br /&gt;
&lt;br /&gt;
# Set the interface name&lt;br /&gt;
interface &amp;quot;mesh-vpn&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20&lt;br /&gt;
method &amp;quot;salsa2012+gmac&amp;quot;;&lt;br /&gt;
method &amp;quot;null&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Bind to a fixed port, IPv4 only&lt;br /&gt;
bind 0.0.0.0:10000;&lt;br /&gt;
&lt;br /&gt;
# Secret key generated by 'fastd --generate-key'&lt;br /&gt;
secret &amp;quot;[YOUR SECRET KEY HERE]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)&lt;br /&gt;
# (see MTU selection documentation)&lt;br /&gt;
mtu 1426;&lt;br /&gt;
&lt;br /&gt;
# Include peers from the directory 'peers'&lt;br /&gt;
include peers from &amp;quot;peers&amp;quot;;&lt;br /&gt;
include peers from &amp;quot;backbone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on up &amp;quot;./fastd-up&amp;quot;;&lt;br /&gt;
# on down &amp;quot;./fastd-down&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on establish &amp;quot;&lt;br /&gt;
        NODE_ID=\${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=\$NODE_ID -d vpn_sw=fastd -d vpn_status=up -d ip=\$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
on disestablish &amp;quot;&lt;br /&gt;
        NODE_ID=\${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=\$NODE_ID -d vpn_sw=fastd -d vpn_status=down -d ip=\$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweise: &lt;br /&gt;
* Username / Password stehen im Keypass. &lt;br /&gt;
* Viewpoint (hier: fastd2) anpassen&lt;br /&gt;
* Grundsätzlich wird die Node-ID nicht escpaed. Shell-code injections ist aber nicht möglich, da mon_serv nur node_ids der Form $mac_$key zulässt. &lt;br /&gt;
* Die Calls auf der Script sind synchron - Daher &amp;quot;&amp;amp;&amp;quot;. fastd blockiert solange das Script nicht terminiert ist. (Zumindest Stand 04/2014)&lt;br /&gt;
Ordnerstruktur anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/backbone&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/peers&lt;br /&gt;
chown www-data /etc/fastd/mesh-vpn/peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Backbone ====&lt;br /&gt;
Backbone Keys einrichten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/fastd/mesh-vpn# ls backbone/&lt;br /&gt;
fastd1	fastd2	fastd3	fastd4	fastd5	fastd6	fastd7	fastd8&lt;br /&gt;
$:/etc/fastd/mesh-vpn# cat backbone/*&lt;br /&gt;
key &amp;quot;4f856d95bd596ac7724edca73a19e6e9d142b374df27166bb1a78e58785efc59&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;e1916b66c4f8a795e217877cf72607d952e796463c7024dd9a6a47ae2929bc10&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd2.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;d56181dfe9b5ac7cfe68a94c0ce406322a9924286a751673da0dcb28ad5218b0&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd3.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;9b3f65f99963343e2785c8c4fad65e70b73ee7e1205d63bd84f3e2decb53e621&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd4.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;6e4546121d16e7189715aef8ceb78ab58d59462720969318445f97b4301374d1&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd5.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;2a2c69dbb3b9fd90d7eb8e2f70be70b472d811cd4f3743ad9f5002d14b5c94cd&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd6.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;68de6815a89270c8eaf7832deedb8da098aad2ae5793cd2cd55dec3541ad28f2&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd7.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;b41a9714b1178ce428b15af0b6055cc204b39af2088ef3b371d8c36219eedd1e&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd8.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/ff-kbu/fff/tree/v0.3-generic/files/lib/freifunk/mesh-vpn/backbone fastd-backbone]] for more&lt;br /&gt;
&lt;br /&gt;
==== fastd-up ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#/bin/sh&lt;br /&gt;
/sbin/ip link set dev mesh-vpn up&lt;br /&gt;
/usr/sbin/batctl if add mesh-vpn&lt;br /&gt;
/usr/sbin/batctl gw_mode server&lt;br /&gt;
/sbin/ifconfig bat0 [DEINE IPv4 Addresse hier] netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ifconfig bat0:0 172.27.0.2 netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ip rule add from 172.27.0.0/18 table ffkbu&lt;br /&gt;
/sbin/ip route add 172.27.0.0/18 dev bat0 table ffkbu&lt;br /&gt;
/sbin/ip route flush cache&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fastd-up ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/fastd/mesh-vpn/fastd-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UDP-Queue Größe ===&lt;br /&gt;
Durch Broadcasts können können auf Supernodes kurzzeitig hohe Lastspitzen enstehen. In der aktuellen batman-adv-Version wird jedes Broadcast-Paket zudem 3x auf jedem Link versendet.&lt;br /&gt;
Die vergleichweise hohe Datenrate von 100MBit/s zwischen Supernodes bewirkt darüber hinaus, dass broadcast-Pakete mit 100MBit/s eingehen können, während sie gleichzeitig an alle Nodes gesendet werden müssen.&lt;br /&gt;
&lt;br /&gt;
Linux-Distributionen sehen per Default Queue-Größen im Bereich von 128 KB vor (http://www.cyberciti.biz/faq/linux-tcp-tuning/). Supernodes sind somit nicht in der Lage entsprechende Lastspitzen zu puffern und während Idle-Times zu versenden. Läuft die UDP-Queue über, so loggt fastd:&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
Jeder Log-Eintrag entspricht einem Paket, dass nicht enqueued werden konnte und damit verworfen wurde. Die Queue-Größen können via systctl angepasst werden (http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php). Auf fastd2 wird zur Zeit verwendet:&lt;br /&gt;
 #/etc/sysctl.conf&lt;br /&gt;
 net.core.rmem_max=83886080&lt;br /&gt;
 net.core.wmem_max=83886080&lt;br /&gt;
 net.core.rmem_default=83886080&lt;br /&gt;
 net.core.wmem_default=83886080&lt;br /&gt;
&lt;br /&gt;
Das System verfügt dadurch über 80MB Speicher für Queues. Per default stehen ebenfalls 80MB zur Verfügung. Die konfigurierten 80MB reichen aus, um die 100MBit/s Verbindung über mehrere Sekunden auszulasten und Lastspitzen abzufangen.&lt;br /&gt;
&lt;br /&gt;
== Backbone Netz (tinc) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install tinc bridge-utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/tinc/backbone&lt;br /&gt;
echo &amp;quot;backbone&amp;quot; &amp;gt;&amp;gt; /etc/tinc/nets.boot  # Dies sagt tinc, dass es das Netz &amp;quot;backbone&amp;quot; starten soll&lt;br /&gt;
cd /etc/tinc/backbone&lt;br /&gt;
# Public keys der anderen Teilnehmer:&lt;br /&gt;
git clone https://github.com/ff-kbu/bbkeys&lt;br /&gt;
ln -s bbkeys/ hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt noch des eigene Public/Private Keypaar. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Keys sollten in /etc/tinc/backbone gespeichert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Den Public-Key in den Namen des Supernodes umbenennen und nach bbkeys/ kopieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tincd -K&lt;br /&gt;
cp rsa_key.pub bbkeys/[supernodename]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bevor jetzt der pub-key gepushed werden kann, muss tinc noch gesagt werden, welche Adressen über diesen Node zu routen sind. &amp;lt;br /&amp;gt;&lt;br /&gt;
Also im .pub key:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subnet=172.27.255.X/32&lt;br /&gt;
Subnet=172.27.Y.0/21&lt;br /&gt;
Subnet=fdd3:5d16:b5dd:3::X/128&lt;br /&gt;
Subnet=2001:67c:20a0:b10Z::/64&lt;br /&gt;
&lt;br /&gt;
-----BEGIN RSA PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Und schliesslich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd bbkeys; git push;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
Name=[supernodename]&lt;br /&gt;
Device=/dev/net/tun&lt;br /&gt;
Mode=router&lt;br /&gt;
Compression=9&lt;br /&gt;
ConnectTo=paula&lt;br /&gt;
ConnectTo=paul&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc-up ====&lt;br /&gt;
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ifconfig \$INTERFACE 172.27.255.[Backbone IPv4 Adresse hier] netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
ip route add 172.27.255.0/24 dev backbone table ffkbu&lt;br /&gt;
ip route add default dev backbone table ffkbu&lt;br /&gt;
ip -6 addr add fdd3:5d16:b5dd:3::X/64 dev \$INTERFACE&lt;br /&gt;
ip -6 addr add 2001:67c:20a0:b10Y::1/128 dev \$INTERFACE&lt;br /&gt;
ip -6 route add default via fdd3:5d16:b5dd:3::3&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch diese Datei muss ausführbar gemacht werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/tinc/backbone/tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte der Ordner etwa so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/tinc/backbone# ls &lt;br /&gt;
bbkeys&lt;br /&gt;
hosts -&amp;gt; bbkeys&lt;br /&gt;
rsa_key.priv&lt;br /&gt;
rsa_key.pub&lt;br /&gt;
tinc.conf&lt;br /&gt;
tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
we need to set up policy based routing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;200 ffkbu&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
fastd-up und tinc-up erledigen den rest: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip rule ls&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip rule ls&lt;br /&gt;
0:      from all lookup local &lt;br /&gt;
32765:  from 172.27.0.0/18 lookup ffkbu &lt;br /&gt;
32766:  from all lookup main &lt;br /&gt;
32767:  from all lookup default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
default dev backbone  scope link &lt;br /&gt;
172.27.0.0/18 dev bat0  scope link &lt;br /&gt;
172.27.255.0/24 dev backbone  scope link &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv4 DHCP ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dhcp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/dhcp/dhcpd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;mesh.kbu.freifunk.net&amp;quot;;&lt;br /&gt;
option domain-name-servers 85.214.20.141, 213.73.91.35;&lt;br /&gt;
&lt;br /&gt;
default-lease-time 60;&lt;br /&gt;
max-lease-time 720;&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
&lt;br /&gt;
subnet 172.27.0.0 netmask 255.255.192.0 {&lt;br /&gt;
	range 172.27.X.10 172.27.Y.255;&lt;br /&gt;
	option routers 172.27.X.1;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install radvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/radvd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
interface bat0 {&lt;br /&gt;
	AdvSendAdvert on;&lt;br /&gt;
	AdvHomeAgentFlag off;&lt;br /&gt;
	MinRtrAdvInterval 10;&lt;br /&gt;
	MaxRtrAdvInterval 30;&lt;br /&gt;
	AdvOtherConfigFlag on;&lt;br /&gt;
	AdvSourceLLAddress off;&lt;br /&gt;
	AdvLinkMTU 1350; #1442 - fastd - batman-adv - See wiki for details&lt;br /&gt;
	prefix 2001:67c:20a0:b10Y::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
	prefix fdd3:5d16:b5dd::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/radvd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=fastd-service=&lt;br /&gt;
Achtung, Pfade und Hostnamen anpassen. Das ist hier exemplarisch &lt;br /&gt;
 apt-get install apache2 ruby-sinatra libapache2-mod-passenger sudo psmisc git ruby-dev&lt;br /&gt;
 mkdir -p /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
 cd /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
 git clone https://github.com/freifunk-ffm/fastd-service.git&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm /etc/apache2/sites-enabled/000-default&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/apache2/sites-enabled/000-fastd1.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerAdmin info@EMAIL&lt;br /&gt;
      DocumentRoot /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&lt;br /&gt;
      &amp;lt;Directory /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&amp;gt;&lt;br /&gt;
          Allow from all&lt;br /&gt;
          Options -MultiViews&lt;br /&gt;
      &amp;lt;/Directory&amp;gt;&lt;br /&gt;
      ErrorLog /srv/www/fastd1.ffm.freifunk.net/logs/error.log&lt;br /&gt;
      CustomLog /srv/www/fastd1.ffm.freifunk.net/logs/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassung der conf.yml:&lt;br /&gt;
 register_url: http://USER:PASSWORT@register.bb.ffm.freifunk.net&lt;br /&gt;
 crash_dump_path: /var/log/ath9k-crash&lt;br /&gt;
 fastd_peer_dir: /etc/fastd/mesh-vpn/peers&lt;br /&gt;
 fastd_reload_cmd: sudo ./fastd_hup&lt;br /&gt;
&lt;br /&gt;
 gem install netaddr json sinatra sinatra-contrib rack rails rake &lt;br /&gt;
 chown -R www-data /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
&lt;br /&gt;
per visudo die folgende Zeile hinzufügen (Pfad anpassen)&lt;br /&gt;
 www-data ALL = NOPASSWD: /srv/www/fastd1.ffm.freifunk.net/fastd-service/fastd_hup&lt;br /&gt;
&lt;br /&gt;
Anmerkung:&lt;br /&gt;
Es kann sein, dass man in fastd_service.rb folgende Zeile auskommentieren muss: &lt;br /&gt;
 register Sinatra::MultiRoute&lt;br /&gt;
&lt;br /&gt;
=[[Anycast_DNS]]=&lt;br /&gt;
{{:Anycast_DNS}}&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2837</id>
		<title>Supernode</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2837"/>
		<updated>2014-10-14T22:40:02Z</updated>

		<summary type="html">&lt;p&gt;Christof: /* fastd.conf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
[[https://en.wikipedia.org/wiki/Supernode_%28networking%29 wikipedia-article]]&lt;br /&gt;
&lt;br /&gt;
Benötigte Software&lt;br /&gt;
&lt;br /&gt;
1) [[https://projects.universe-factory.net/projects/fastd fastd]] mesh-node-vpn&lt;br /&gt;
&lt;br /&gt;
2) [[https://github.com/ff-kbu/fastd-service vpn-key-upload]] todo: remove overhead (apache,ruby,sinatra ...), [https://en.wikipedia.org/wiki/KISS_principle kiss principle]]&lt;br /&gt;
not documented in here (todo)&lt;br /&gt;
&lt;br /&gt;
3) [[http://www.open-mesh.org/projects/open-mesh/wiki batman-adv]]&lt;br /&gt;
&lt;br /&gt;
4) [[http://www.tinc-vpn.org/ tinc]] mesh-backbone-vpn&lt;br /&gt;
&lt;br /&gt;
5) OS: debian wheezy (or whatever you like)&lt;br /&gt;
&lt;br /&gt;
Du benötigst ausserdem: &amp;lt;br /&amp;gt;&lt;br /&gt;
* einen fastd-private-key &lt;br /&gt;
* eine IPv4/IPv6 Adresse und ein Subnetz&lt;br /&gt;
* eine IPv4 Adresse für das Backbone-Netz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
In der /etc/sysctl.conf muss folgendes gesetzt sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
net.ipv4.ip_forward=1&lt;br /&gt;
net.ipv4.ip_no_pmtu_disc=1&lt;br /&gt;
net.ipv4.route.flush=1&lt;br /&gt;
net.ipv6.conf.all.forwarding=1&lt;br /&gt;
net.ipv6.conf.all.autoconf=0&lt;br /&gt;
net.ipv6.conf.all.accept_ra=0&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die /etc/sysctl.conf neu einlesen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysctl -p&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;deb http://repo.universe-factory.net/debian/ sid main&amp;quot; &amp;gt;&amp;gt;/etc/apt/sources.list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GPG-Key importieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key  16EF3F64CB201D9C&lt;br /&gt;
 gpg -a --export 16EF3F64CB201D9C | apt-key add -&lt;br /&gt;
 apt-get update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batman-adv ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install batman-adv-dkms&lt;br /&gt;
echo &amp;quot;batman-adv&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== fastd ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 apt-get install fastd curl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== fastd.conf ====&lt;br /&gt;
&amp;quot;[YOUR SECRET KEY HERE]&amp;quot; Sollte dabei durch den fastd-secret-key ersetzt werden (erfragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
# Log warnings and errors to stderr&lt;br /&gt;
#log level warn;&lt;br /&gt;
log level error;&lt;br /&gt;
&lt;br /&gt;
# Log everything to a log file&lt;br /&gt;
#log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level debug;&lt;br /&gt;
log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level warn;&lt;br /&gt;
&lt;br /&gt;
# Set the interface name&lt;br /&gt;
interface &amp;quot;mesh-vpn&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20&lt;br /&gt;
method &amp;quot;salsa2012+gmac&amp;quot;;&lt;br /&gt;
method &amp;quot;null&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Bind to a fixed port, IPv4 only&lt;br /&gt;
bind 0.0.0.0:10000;&lt;br /&gt;
&lt;br /&gt;
# Secret key generated by 'fastd --generate-key'&lt;br /&gt;
secret &amp;quot;[YOUR SECRET KEY HERE]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)&lt;br /&gt;
# (see MTU selection documentation)&lt;br /&gt;
mtu 1426;&lt;br /&gt;
&lt;br /&gt;
# Include peers from the directory 'peers'&lt;br /&gt;
include peers from &amp;quot;peers&amp;quot;;&lt;br /&gt;
include peers from &amp;quot;backbone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on up &amp;quot;./fastd-up&amp;quot;;&lt;br /&gt;
# on down &amp;quot;./fastd-down&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on establish &amp;quot;&lt;br /&gt;
        NODE_ID=\${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=up -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
on disestablish &amp;quot;&lt;br /&gt;
        NODE_ID=\${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=down -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweise: &lt;br /&gt;
* Username / Password stehen im Keypass. &lt;br /&gt;
* Viewpoint (hier: fastd2) anpassen&lt;br /&gt;
* Grundsätzlich wird die Node-ID nicht escpaed. Shell-code injections ist aber nicht möglich, da mon_serv nur node_ids der Form $mac_$key zulässt. &lt;br /&gt;
* Die Calls auf der Script sind synchron - Daher &amp;quot;&amp;amp;&amp;quot;. fastd blockiert solange das Script nicht terminiert ist. (Zumindest Stand 04/2014)&lt;br /&gt;
Ordnerstruktur anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/backbone&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/peers&lt;br /&gt;
chown www-data /etc/fastd/mesh-vpn/peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Backbone ====&lt;br /&gt;
Backbone Keys einrichten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/fastd/mesh-vpn# ls backbone/&lt;br /&gt;
fastd1	fastd2	fastd3	fastd4	fastd5	fastd6	fastd7	fastd8&lt;br /&gt;
$:/etc/fastd/mesh-vpn# cat backbone/*&lt;br /&gt;
key &amp;quot;4f856d95bd596ac7724edca73a19e6e9d142b374df27166bb1a78e58785efc59&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;e1916b66c4f8a795e217877cf72607d952e796463c7024dd9a6a47ae2929bc10&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd2.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;d56181dfe9b5ac7cfe68a94c0ce406322a9924286a751673da0dcb28ad5218b0&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd3.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;9b3f65f99963343e2785c8c4fad65e70b73ee7e1205d63bd84f3e2decb53e621&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd4.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;6e4546121d16e7189715aef8ceb78ab58d59462720969318445f97b4301374d1&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd5.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;2a2c69dbb3b9fd90d7eb8e2f70be70b472d811cd4f3743ad9f5002d14b5c94cd&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd6.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;68de6815a89270c8eaf7832deedb8da098aad2ae5793cd2cd55dec3541ad28f2&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd7.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;b41a9714b1178ce428b15af0b6055cc204b39af2088ef3b371d8c36219eedd1e&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd8.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/ff-kbu/fff/tree/v0.3-generic/files/lib/freifunk/mesh-vpn/backbone fastd-backbone]] for more&lt;br /&gt;
&lt;br /&gt;
==== fastd-up ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#/bin/sh&lt;br /&gt;
/sbin/ip link set dev mesh-vpn up&lt;br /&gt;
/usr/sbin/batctl if add mesh-vpn&lt;br /&gt;
/usr/sbin/batctl gw_mode server&lt;br /&gt;
/sbin/ifconfig bat0 [DEINE IPv4 Addresse hier] netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ifconfig bat0:0 172.27.0.2 netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ip rule add from 172.27.0.0/18 table ffkbu&lt;br /&gt;
/sbin/ip route add 172.27.0.0/18 dev bat0 table ffkbu&lt;br /&gt;
/sbin/ip route flush cache&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fastd-up ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/fastd/mesh-vpn/fastd-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UDP-Queue Größe ===&lt;br /&gt;
Durch Broadcasts können können auf Supernodes kurzzeitig hohe Lastspitzen enstehen. In der aktuellen batman-adv-Version wird jedes Broadcast-Paket zudem 3x auf jedem Link versendet.&lt;br /&gt;
Die vergleichweise hohe Datenrate von 100MBit/s zwischen Supernodes bewirkt darüber hinaus, dass broadcast-Pakete mit 100MBit/s eingehen können, während sie gleichzeitig an alle Nodes gesendet werden müssen.&lt;br /&gt;
&lt;br /&gt;
Linux-Distributionen sehen per Default Queue-Größen im Bereich von 128 KB vor (http://www.cyberciti.biz/faq/linux-tcp-tuning/). Supernodes sind somit nicht in der Lage entsprechende Lastspitzen zu puffern und während Idle-Times zu versenden. Läuft die UDP-Queue über, so loggt fastd:&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
Jeder Log-Eintrag entspricht einem Paket, dass nicht enqueued werden konnte und damit verworfen wurde. Die Queue-Größen können via systctl angepasst werden (http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php). Auf fastd2 wird zur Zeit verwendet:&lt;br /&gt;
 #/etc/sysctl.conf&lt;br /&gt;
 net.core.rmem_max=83886080&lt;br /&gt;
 net.core.wmem_max=83886080&lt;br /&gt;
 net.core.rmem_default=83886080&lt;br /&gt;
 net.core.wmem_default=83886080&lt;br /&gt;
&lt;br /&gt;
Das System verfügt dadurch über 80MB Speicher für Queues. Per default stehen ebenfalls 80MB zur Verfügung. Die konfigurierten 80MB reichen aus, um die 100MBit/s Verbindung über mehrere Sekunden auszulasten und Lastspitzen abzufangen.&lt;br /&gt;
&lt;br /&gt;
== Backbone Netz (tinc) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install tinc bridge-utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/tinc/backbone&lt;br /&gt;
echo &amp;quot;backbone&amp;quot; &amp;gt;&amp;gt; /etc/tinc/nets.boot  # Dies sagt tinc, dass es das Netz &amp;quot;backbone&amp;quot; starten soll&lt;br /&gt;
cd /etc/tinc/backbone&lt;br /&gt;
# Public keys der anderen Teilnehmer:&lt;br /&gt;
git clone https://github.com/ff-kbu/bbkeys&lt;br /&gt;
ln -s bbkeys/ hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt noch des eigene Public/Private Keypaar. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Keys sollten in /etc/tinc/backbone gespeichert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Den Public-Key in den Namen des Supernodes umbenennen und nach bbkeys/ kopieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tincd -K&lt;br /&gt;
cp rsa_key.pub bbkeys/[supernodename]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bevor jetzt der pub-key gepushed werden kann, muss tinc noch gesagt werden, welche Adressen über diesen Node zu routen sind. &amp;lt;br /&amp;gt;&lt;br /&gt;
Also im .pub key:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subnet=172.27.255.X/32&lt;br /&gt;
Subnet=172.27.Y.0/21&lt;br /&gt;
Subnet=fdd3:5d16:b5dd:3::X/128&lt;br /&gt;
Subnet=2001:67c:20a0:b10Z::/64&lt;br /&gt;
&lt;br /&gt;
-----BEGIN RSA PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Und schliesslich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd bbkeys; git push;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
Name=[supernodename]&lt;br /&gt;
Device=/dev/net/tun&lt;br /&gt;
Mode=router&lt;br /&gt;
Compression=9&lt;br /&gt;
ConnectTo=paula&lt;br /&gt;
ConnectTo=paul&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc-up ====&lt;br /&gt;
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ifconfig \$INTERFACE 172.27.255.[Backbone IPv4 Adresse hier] netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
ip route add 172.27.255.0/24 dev backbone table ffkbu&lt;br /&gt;
ip route add default dev backbone table ffkbu&lt;br /&gt;
ip -6 addr add fdd3:5d16:b5dd:3::X/64 dev \$INTERFACE&lt;br /&gt;
ip -6 addr add 2001:67c:20a0:b10Y::1/128 dev \$INTERFACE&lt;br /&gt;
ip -6 route add default via fdd3:5d16:b5dd:3::3&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch diese Datei muss ausführbar gemacht werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/tinc/backbone/tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte der Ordner etwa so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/tinc/backbone# ls &lt;br /&gt;
bbkeys&lt;br /&gt;
hosts -&amp;gt; bbkeys&lt;br /&gt;
rsa_key.priv&lt;br /&gt;
rsa_key.pub&lt;br /&gt;
tinc.conf&lt;br /&gt;
tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
we need to set up policy based routing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;200 ffkbu&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
fastd-up und tinc-up erledigen den rest: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip rule ls&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip rule ls&lt;br /&gt;
0:      from all lookup local &lt;br /&gt;
32765:  from 172.27.0.0/18 lookup ffkbu &lt;br /&gt;
32766:  from all lookup main &lt;br /&gt;
32767:  from all lookup default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
default dev backbone  scope link &lt;br /&gt;
172.27.0.0/18 dev bat0  scope link &lt;br /&gt;
172.27.255.0/24 dev backbone  scope link &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv4 DHCP ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dhcp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/dhcp/dhcpd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;mesh.kbu.freifunk.net&amp;quot;;&lt;br /&gt;
option domain-name-servers 85.214.20.141, 213.73.91.35;&lt;br /&gt;
&lt;br /&gt;
default-lease-time 60;&lt;br /&gt;
max-lease-time 720;&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
&lt;br /&gt;
subnet 172.27.0.0 netmask 255.255.192.0 {&lt;br /&gt;
	range 172.27.X.10 172.27.Y.255;&lt;br /&gt;
	option routers 172.27.X.1;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install radvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/radvd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
interface bat0 {&lt;br /&gt;
	AdvSendAdvert on;&lt;br /&gt;
	AdvHomeAgentFlag off;&lt;br /&gt;
	MinRtrAdvInterval 10;&lt;br /&gt;
	MaxRtrAdvInterval 30;&lt;br /&gt;
	AdvOtherConfigFlag on;&lt;br /&gt;
	AdvSourceLLAddress off;&lt;br /&gt;
	AdvLinkMTU 1350; #1442 - fastd - batman-adv - See wiki for details&lt;br /&gt;
	prefix 2001:67c:20a0:b10Y::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
	prefix fdd3:5d16:b5dd::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/radvd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=fastd-service=&lt;br /&gt;
Achtung, Pfade und Hostnamen anpassen. Das ist hier exemplarisch &lt;br /&gt;
 apt-get install apache2 ruby-sinatra libapache2-mod-passenger sudo psmisc git ruby-dev&lt;br /&gt;
 mkdir -p /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
 cd /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
 git clone https://github.com/freifunk-ffm/fastd-service.git&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm /etc/apache2/sites-enabled/000-default&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/apache2/sites-enabled/000-fastd1.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerAdmin info@EMAIL&lt;br /&gt;
      DocumentRoot /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&lt;br /&gt;
      &amp;lt;Directory /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&amp;gt;&lt;br /&gt;
          Allow from all&lt;br /&gt;
          Options -MultiViews&lt;br /&gt;
      &amp;lt;/Directory&amp;gt;&lt;br /&gt;
      ErrorLog /srv/www/fastd1.ffm.freifunk.net/logs/error.log&lt;br /&gt;
      CustomLog /srv/www/fastd1.ffm.freifunk.net/logs/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassung der conf.yml:&lt;br /&gt;
 register_url: http://USER:PASSWORT@register.bb.ffm.freifunk.net&lt;br /&gt;
 crash_dump_path: /var/log/ath9k-crash&lt;br /&gt;
 fastd_peer_dir: /etc/fastd/mesh-vpn/peers&lt;br /&gt;
 fastd_reload_cmd: sudo ./fastd_hup&lt;br /&gt;
&lt;br /&gt;
 gem install netaddr json sinatra sinatra-contrib rack rails rake &lt;br /&gt;
 chown -R www-data /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
&lt;br /&gt;
per visudo die folgende Zeile hinzufügen (Pfad anpassen)&lt;br /&gt;
 www-data ALL = NOPASSWD: /srv/www/fastd1.ffm.freifunk.net/fastd-service/fastd_hup&lt;br /&gt;
&lt;br /&gt;
Anmerkung:&lt;br /&gt;
Es kann sein, dass man in fastd_service.rb folgende Zeile auskommentieren muss: &lt;br /&gt;
 register Sinatra::MultiRoute&lt;br /&gt;
&lt;br /&gt;
=[[Anycast_DNS]]=&lt;br /&gt;
{{:Anycast_DNS}}&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2809</id>
		<title>Supernode</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2809"/>
		<updated>2014-10-11T14:04:20Z</updated>

		<summary type="html">&lt;p&gt;Christof: /* fastd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
[[https://en.wikipedia.org/wiki/Supernode_%28networking%29 wikipedia-article]]&lt;br /&gt;
&lt;br /&gt;
Benötigte Software&lt;br /&gt;
&lt;br /&gt;
1) [[https://projects.universe-factory.net/projects/fastd fastd]] mesh-node-vpn&lt;br /&gt;
&lt;br /&gt;
2) [[https://github.com/ff-kbu/fastd-service vpn-key-upload]] todo: remove overhead (apache,ruby,sinatra ...), [https://en.wikipedia.org/wiki/KISS_principle kiss principle]]&lt;br /&gt;
not documented in here (todo)&lt;br /&gt;
&lt;br /&gt;
3) [[http://www.open-mesh.org/projects/open-mesh/wiki batman-adv]]&lt;br /&gt;
&lt;br /&gt;
4) [[http://www.tinc-vpn.org/ tinc]] mesh-backbone-vpn&lt;br /&gt;
&lt;br /&gt;
5) OS: debian wheezy (or whatever you like)&lt;br /&gt;
&lt;br /&gt;
Du benötigst ausserdem: &amp;lt;br /&amp;gt;&lt;br /&gt;
* einen fastd-private-key &lt;br /&gt;
* eine IPv4/IPv6 Adresse und ein Subnetz&lt;br /&gt;
* eine IPv4 Adresse für das Backbone-Netz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
In der /etc/sysctl.conf muss folgendes gesetzt sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
net.ipv4.ip_forward=1&lt;br /&gt;
net.ipv4.ip_no_pmtu_disc=1&lt;br /&gt;
net.ipv4.route.flush=1&lt;br /&gt;
net.ipv6.conf.all.forwarding=1&lt;br /&gt;
net.ipv6.conf.all.autoconf=0&lt;br /&gt;
net.ipv6.conf.all.accept_ra=0&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die /etc/sysctl.conf neu einlesen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysctl -p&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;deb http://repo.universe-factory.net/debian/ sid main&amp;quot; &amp;gt;&amp;gt;/etc/apt/sources.list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GPG-Key importieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key  16EF3F64CB201D9C&lt;br /&gt;
 gpg -a --export 16EF3F64CB201D9C | apt-key add -&lt;br /&gt;
 apt-get update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batman-adv ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install batman-adv-dkms&lt;br /&gt;
echo &amp;quot;batman-adv&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== fastd ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 apt-get install fastd curl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== fastd.conf ====&lt;br /&gt;
&amp;quot;[YOUR SECRET KEY HERE]&amp;quot; Sollte dabei durch den fastd-secret-key ersetzt werden (erfragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
# Log warnings and errors to stderr&lt;br /&gt;
#log level warn;&lt;br /&gt;
log level error;&lt;br /&gt;
&lt;br /&gt;
# Log everything to a log file&lt;br /&gt;
#log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level debug;&lt;br /&gt;
log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level warn;&lt;br /&gt;
&lt;br /&gt;
# Set the interface name&lt;br /&gt;
interface &amp;quot;mesh-vpn&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20&lt;br /&gt;
method &amp;quot;salsa2012+gmac&amp;quot;;&lt;br /&gt;
method &amp;quot;null&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Bind to a fixed port, IPv4 only&lt;br /&gt;
bind 0.0.0.0:10000;&lt;br /&gt;
&lt;br /&gt;
# Secret key generated by 'fastd --generate-key'&lt;br /&gt;
secret &amp;quot;[YOUR SECRET KEY HERE]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)&lt;br /&gt;
# (see MTU selection documentation)&lt;br /&gt;
mtu 1426;&lt;br /&gt;
&lt;br /&gt;
# Include peers from the directory 'peers'&lt;br /&gt;
include peers from &amp;quot;peers&amp;quot;;&lt;br /&gt;
include peers from &amp;quot;backbone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on up &amp;quot;./fastd-up&amp;quot;;&lt;br /&gt;
# on down &amp;quot;./fastd-down&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on establish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=up -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
on disestablish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=down -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweise: &lt;br /&gt;
* Username / Password stehen im Keypass. &lt;br /&gt;
* Viewpoint (hier: fastd2) anpassen&lt;br /&gt;
* Grundsätzlich wird die Node-ID nicht escpaed. Shell-code injections ist aber nicht möglich, da mon_serv nur node_ids der Form $mac_$key zulässt. &lt;br /&gt;
* Die Calls auf der Script sind synchron - Daher &amp;quot;&amp;amp;&amp;quot;. fastd blockiert solange das Script nicht terminiert ist. (Zumindest Stand 04/2014)&lt;br /&gt;
Ordnerstruktur anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/backbone&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/peers&lt;br /&gt;
chown www-data /etc/fastd/mesh-vpn/peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Backbone ====&lt;br /&gt;
Backbone Keys einrichten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/fastd/mesh-vpn# ls backbone/&lt;br /&gt;
fastd1	fastd2	fastd3	fastd4	fastd5	fastd6	fastd7	fastd8&lt;br /&gt;
$:/etc/fastd/mesh-vpn# cat backbone/*&lt;br /&gt;
key &amp;quot;4f856d95bd596ac7724edca73a19e6e9d142b374df27166bb1a78e58785efc59&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;e1916b66c4f8a795e217877cf72607d952e796463c7024dd9a6a47ae2929bc10&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd2.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;d56181dfe9b5ac7cfe68a94c0ce406322a9924286a751673da0dcb28ad5218b0&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd3.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;9b3f65f99963343e2785c8c4fad65e70b73ee7e1205d63bd84f3e2decb53e621&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd4.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;6e4546121d16e7189715aef8ceb78ab58d59462720969318445f97b4301374d1&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd5.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;2a2c69dbb3b9fd90d7eb8e2f70be70b472d811cd4f3743ad9f5002d14b5c94cd&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd6.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;68de6815a89270c8eaf7832deedb8da098aad2ae5793cd2cd55dec3541ad28f2&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd7.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;b41a9714b1178ce428b15af0b6055cc204b39af2088ef3b371d8c36219eedd1e&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd8.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/ff-kbu/fff/tree/v0.3-generic/files/lib/freifunk/mesh-vpn/backbone fastd-backbone]] for more&lt;br /&gt;
&lt;br /&gt;
==== fastd-up ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#/bin/sh&lt;br /&gt;
/sbin/ip link set dev mesh-vpn up&lt;br /&gt;
/usr/sbin/batctl if add mesh-vpn&lt;br /&gt;
/usr/sbin/batctl gw_mode server&lt;br /&gt;
/sbin/ifconfig bat0 [DEINE IPv4 Addresse hier] netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ifconfig bat0:0 172.27.0.2 netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ip rule add from 172.27.0.0/18 table ffkbu&lt;br /&gt;
/sbin/ip route add 172.27.0.0/18 dev bat0 table ffkbu&lt;br /&gt;
/sbin/ip route flush cache&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fastd-up ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/fastd/mesh-vpn/fastd-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UDP-Queue Größe ===&lt;br /&gt;
Durch Broadcasts können können auf Supernodes kurzzeitig hohe Lastspitzen enstehen. In der aktuellen batman-adv-Version wird jedes Broadcast-Paket zudem 3x auf jedem Link versendet.&lt;br /&gt;
Die vergleichweise hohe Datenrate von 100MBit/s zwischen Supernodes bewirkt darüber hinaus, dass broadcast-Pakete mit 100MBit/s eingehen können, während sie gleichzeitig an alle Nodes gesendet werden müssen.&lt;br /&gt;
&lt;br /&gt;
Linux-Distributionen sehen per Default Queue-Größen im Bereich von 128 KB vor (http://www.cyberciti.biz/faq/linux-tcp-tuning/). Supernodes sind somit nicht in der Lage entsprechende Lastspitzen zu puffern und während Idle-Times zu versenden. Läuft die UDP-Queue über, so loggt fastd:&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
Jeder Log-Eintrag entspricht einem Paket, dass nicht enqueued werden konnte und damit verworfen wurde. Die Queue-Größen können via systctl angepasst werden (http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php). Auf fastd2 wird zur Zeit verwendet:&lt;br /&gt;
 #/etc/sysctl.conf&lt;br /&gt;
 net.core.rmem_max=83886080&lt;br /&gt;
 net.core.wmem_max=83886080&lt;br /&gt;
 net.core.rmem_default=83886080&lt;br /&gt;
 net.core.wmem_default=83886080&lt;br /&gt;
&lt;br /&gt;
Das System verfügt dadurch über 80MB Speicher für Queues. Per default stehen ebenfalls 80MB zur Verfügung. Die konfigurierten 80MB reichen aus, um die 100MBit/s Verbindung über mehrere Sekunden auszulasten und Lastspitzen abzufangen.&lt;br /&gt;
&lt;br /&gt;
== Backbone Netz (tinc) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install tinc bridge-utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/tinc/backbone&lt;br /&gt;
echo &amp;quot;backbone&amp;quot; &amp;gt;&amp;gt; /etc/tinc/nets.boot  # Dies sagt tinc, dass es das Netz &amp;quot;backbone&amp;quot; starten soll&lt;br /&gt;
cd /etc/tinc/backbone&lt;br /&gt;
# Public keys der anderen Teilnehmer:&lt;br /&gt;
git clone https://github.com/ff-kbu/bbkeys&lt;br /&gt;
ln -s bbkeys/ hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt noch des eigene Public/Private Keypaar. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Keys sollten in /etc/tinc/backbone gespeichert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Den Public-Key in den Namen des Supernodes umbenennen und nach bbkeys/ kopieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tincd -K&lt;br /&gt;
cp rsa_key.pub bbkeys/[supernodename]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bevor jetzt der pub-key gepushed werden kann, muss tinc noch gesagt werden, welche Adressen über diesen Node zu routen sind. &amp;lt;br /&amp;gt;&lt;br /&gt;
Also im .pub key:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subnet=172.27.255.X/32&lt;br /&gt;
Subnet=172.27.Y.0/21&lt;br /&gt;
Subnet=fdd3:5d16:b5dd:3::X/128&lt;br /&gt;
Subnet=2001:67c:20a0:b10Z::/64&lt;br /&gt;
&lt;br /&gt;
-----BEGIN RSA PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Und schliesslich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd bbkeys; git push;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
Name=[supernodename]&lt;br /&gt;
Device=/dev/net/tun&lt;br /&gt;
Mode=router&lt;br /&gt;
Compression=9&lt;br /&gt;
ConnectTo=paula&lt;br /&gt;
ConnectTo=paul&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc-up ====&lt;br /&gt;
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ifconfig \$INTERFACE 172.27.255.[Backbone IPv4 Adresse hier] netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
ip route add 172.27.255.0/24 dev backbone table ffkbu&lt;br /&gt;
ip route add default dev backbone table ffkbu&lt;br /&gt;
ip -6 addr add fdd3:5d16:b5dd:3::X/64 dev \$INTERFACE&lt;br /&gt;
ip -6 addr add 2001:67c:20a0:b10Y::1/128 dev \$INTERFACE&lt;br /&gt;
ip -6 route add default via fdd3:5d16:b5dd:3::3&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch diese Datei muss ausführbar gemacht werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/tinc/backbone/tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte der Ordner etwa so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/tinc/backbone# ls &lt;br /&gt;
bbkeys&lt;br /&gt;
hosts -&amp;gt; bbkeys&lt;br /&gt;
rsa_key.priv&lt;br /&gt;
rsa_key.pub&lt;br /&gt;
tinc.conf&lt;br /&gt;
tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
we need to set up policy based routing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;200 ffkbu&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
fastd-up und tinc-up erledigen den rest: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip rule ls&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip rule ls&lt;br /&gt;
0:      from all lookup local &lt;br /&gt;
32765:  from 172.27.0.0/18 lookup ffkbu &lt;br /&gt;
32766:  from all lookup main &lt;br /&gt;
32767:  from all lookup default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
default dev backbone  scope link &lt;br /&gt;
172.27.0.0/18 dev bat0  scope link &lt;br /&gt;
172.27.255.0/24 dev backbone  scope link &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv4 DHCP ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dhcp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/dhcp/dhcpd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;mesh.kbu.freifunk.net&amp;quot;;&lt;br /&gt;
option domain-name-servers 85.214.20.141, 213.73.91.35;&lt;br /&gt;
&lt;br /&gt;
default-lease-time 60;&lt;br /&gt;
max-lease-time 720;&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
&lt;br /&gt;
subnet 172.27.0.0 netmask 255.255.192.0 {&lt;br /&gt;
	range 172.27.X.10 172.27.Y.255;&lt;br /&gt;
	option routers 172.27.X.1;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install radvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/radvd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
interface bat0 {&lt;br /&gt;
	AdvSendAdvert on;&lt;br /&gt;
	AdvHomeAgentFlag off;&lt;br /&gt;
	MinRtrAdvInterval 10;&lt;br /&gt;
	MaxRtrAdvInterval 30;&lt;br /&gt;
	AdvOtherConfigFlag on;&lt;br /&gt;
	AdvSourceLLAddress off;&lt;br /&gt;
	AdvLinkMTU 1350; #1442 - fastd - batman-adv - See wiki for details&lt;br /&gt;
	prefix 2001:67c:20a0:b10Y::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
	prefix fdd3:5d16:b5dd::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/radvd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=fastd-service=&lt;br /&gt;
Achtung, Pfade und Hostnamen anpassen. Das ist hier exemplarisch &lt;br /&gt;
 apt-get install apache2 ruby-sinatra libapache2-mod-passenger sudo psmisc git ruby-dev&lt;br /&gt;
 mkdir -p /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
 cd /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
 git clone https://github.com/freifunk-ffm/fastd-service.git&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm /etc/apache2/sites-enabled/000-default&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/apache2/sites-enabled/000-fastd1.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerAdmin info@EMAIL&lt;br /&gt;
      DocumentRoot /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&lt;br /&gt;
      &amp;lt;Directory /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&amp;gt;&lt;br /&gt;
          Allow from all&lt;br /&gt;
          Options -MultiViews&lt;br /&gt;
      &amp;lt;/Directory&amp;gt;&lt;br /&gt;
      ErrorLog /srv/www/fastd1.ffm.freifunk.net/logs/error.log&lt;br /&gt;
      CustomLog /srv/www/fastd1.ffm.freifunk.net/logs/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassung der conf.yml:&lt;br /&gt;
 register_url: http://USER:PASSWORT@register.bb.ffm.freifunk.net&lt;br /&gt;
 crash_dump_path: /var/log/ath9k-crash&lt;br /&gt;
 fastd_peer_dir: /etc/fastd/mesh-vpn/peers&lt;br /&gt;
 fastd_reload_cmd: sudo ./fastd_hup&lt;br /&gt;
&lt;br /&gt;
 gem install netaddr json sinatra sinatra-contrib rack rails rake &lt;br /&gt;
 chown -R www-data /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
&lt;br /&gt;
per visudo die folgende Zeile hinzufügen (Pfad anpassen)&lt;br /&gt;
 www-data ALL = NOPASSWD: /srv/www/fastd1.ffm.freifunk.net/fastd-service/fastd_hup&lt;br /&gt;
&lt;br /&gt;
Anmerkung:&lt;br /&gt;
Es kann sein, dass man in fastd_service.rb folgende Zeile auskommentieren muss: &lt;br /&gt;
 register Sinatra::MultiRoute&lt;br /&gt;
&lt;br /&gt;
=[[Anycast_DNS]]=&lt;br /&gt;
{{:Anycast_DNS}}&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2767</id>
		<title>Supernode</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2767"/>
		<updated>2014-09-29T21:35:35Z</updated>

		<summary type="html">&lt;p&gt;Christof: /* fastd-service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
[[https://en.wikipedia.org/wiki/Supernode_%28networking%29 wikipedia-article]]&lt;br /&gt;
&lt;br /&gt;
Benötigte Software&lt;br /&gt;
&lt;br /&gt;
1) [[https://projects.universe-factory.net/projects/fastd fastd]] mesh-node-vpn&lt;br /&gt;
&lt;br /&gt;
2) [[https://github.com/ff-kbu/fastd-service vpn-key-upload]] todo: remove overhead (apache,ruby,sinatra ...), [https://en.wikipedia.org/wiki/KISS_principle kiss principle]]&lt;br /&gt;
not documented in here (todo)&lt;br /&gt;
&lt;br /&gt;
3) [[http://www.open-mesh.org/projects/open-mesh/wiki batman-adv]]&lt;br /&gt;
&lt;br /&gt;
4) [[http://www.tinc-vpn.org/ tinc]] mesh-backbone-vpn&lt;br /&gt;
&lt;br /&gt;
5) OS: debian wheezy (or whatever you like)&lt;br /&gt;
&lt;br /&gt;
Du benötigst ausserdem: &amp;lt;br /&amp;gt;&lt;br /&gt;
* einen fastd-private-key &lt;br /&gt;
* eine IPv4/IPv6 Adresse und ein Subnetz&lt;br /&gt;
* eine IPv4 Adresse für das Backbone-Netz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
In der /etc/sysctl.conf muss folgendes gesetzt sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
net.ipv4.ip_forward=1&lt;br /&gt;
net.ipv4.ip_no_pmtu_disc=1&lt;br /&gt;
net.ipv4.route.flush=1&lt;br /&gt;
net.ipv6.conf.all.forwarding=1&lt;br /&gt;
net.ipv6.conf.all.autoconf=0&lt;br /&gt;
net.ipv6.conf.all.accept_ra=0&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die /etc/sysctl.conf neu einlesen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysctl -p&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;deb http://repo.universe-factory.net/debian/ sid main&amp;quot; &amp;gt;&amp;gt;/etc/apt/sources.list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GPG-Key importieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key  16EF3F64CB201D9C&lt;br /&gt;
 gpg -a --export 16EF3F64CB201D9C | apt-key add -&lt;br /&gt;
 apt-get update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batman-adv ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install batman-adv-dkms&lt;br /&gt;
echo &amp;quot;batman-adv&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== fastd ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 apt-get install fastd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== fastd.conf ====&lt;br /&gt;
&amp;quot;[YOUR SECRET KEY HERE]&amp;quot; Sollte dabei durch den fastd-secret-key ersetzt werden (erfragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
# Log warnings and errors to stderr&lt;br /&gt;
#log level warn;&lt;br /&gt;
log level error;&lt;br /&gt;
&lt;br /&gt;
# Log everything to a log file&lt;br /&gt;
#log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level debug;&lt;br /&gt;
log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level warn;&lt;br /&gt;
&lt;br /&gt;
# Set the interface name&lt;br /&gt;
interface &amp;quot;mesh-vpn&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20&lt;br /&gt;
method &amp;quot;salsa2012+gmac&amp;quot;;&lt;br /&gt;
method &amp;quot;null&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Bind to a fixed port, IPv4 only&lt;br /&gt;
bind 0.0.0.0:10000;&lt;br /&gt;
&lt;br /&gt;
# Secret key generated by 'fastd --generate-key'&lt;br /&gt;
secret &amp;quot;[YOUR SECRET KEY HERE]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)&lt;br /&gt;
# (see MTU selection documentation)&lt;br /&gt;
mtu 1426;&lt;br /&gt;
&lt;br /&gt;
# Include peers from the directory 'peers'&lt;br /&gt;
include peers from &amp;quot;peers&amp;quot;;&lt;br /&gt;
include peers from &amp;quot;backbone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on up &amp;quot;./fastd-up&amp;quot;;&lt;br /&gt;
# on down &amp;quot;./fastd-down&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on establish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=up -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
on disestablish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=down -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweise: &lt;br /&gt;
* Username / Password stehen im Keypass. &lt;br /&gt;
* Viewpoint (hier: fastd2) anpassen&lt;br /&gt;
* Grundsätzlich wird die Node-ID nicht escpaed. Shell-code injections ist aber nicht möglich, da mon_serv nur node_ids der Form $mac_$key zulässt. &lt;br /&gt;
* Die Calls auf der Script sind synchron - Daher &amp;quot;&amp;amp;&amp;quot;. fastd blockiert solange das Script nicht terminiert ist. (Zumindest Stand 04/2014)&lt;br /&gt;
Ordnerstruktur anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/backbone&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/peers&lt;br /&gt;
chown www-data /etc/fastd/mesh-vpn/peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Backbone ====&lt;br /&gt;
Backbone Keys einrichten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/fastd/mesh-vpn# ls backbone/&lt;br /&gt;
fastd1	fastd2	fastd3	fastd4	fastd5	fastd6	fastd7	fastd8&lt;br /&gt;
$:/etc/fastd/mesh-vpn# cat backbone/*&lt;br /&gt;
key &amp;quot;4f856d95bd596ac7724edca73a19e6e9d142b374df27166bb1a78e58785efc59&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;e1916b66c4f8a795e217877cf72607d952e796463c7024dd9a6a47ae2929bc10&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd2.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;d56181dfe9b5ac7cfe68a94c0ce406322a9924286a751673da0dcb28ad5218b0&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd3.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;9b3f65f99963343e2785c8c4fad65e70b73ee7e1205d63bd84f3e2decb53e621&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd4.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;6e4546121d16e7189715aef8ceb78ab58d59462720969318445f97b4301374d1&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd5.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;2a2c69dbb3b9fd90d7eb8e2f70be70b472d811cd4f3743ad9f5002d14b5c94cd&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd6.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;68de6815a89270c8eaf7832deedb8da098aad2ae5793cd2cd55dec3541ad28f2&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd7.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;b41a9714b1178ce428b15af0b6055cc204b39af2088ef3b371d8c36219eedd1e&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd8.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/ff-kbu/fff/tree/v0.3-generic/files/lib/freifunk/mesh-vpn/backbone fastd-backbone]] for more&lt;br /&gt;
&lt;br /&gt;
==== fastd-up ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#/bin/sh&lt;br /&gt;
/sbin/ip link set dev mesh-vpn up&lt;br /&gt;
/usr/sbin/batctl if add mesh-vpn&lt;br /&gt;
/usr/sbin/batctl gw_mode server&lt;br /&gt;
/sbin/ifconfig bat0 [DEINE IPv4 Addresse hier] netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ifconfig bat0:0 172.27.0.2 netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ip rule add from 172.27.0.0/18 table ffkbu&lt;br /&gt;
/sbin/ip route add 172.27.0.0/18 dev bat0 table ffkbu&lt;br /&gt;
/sbin/ip route flush cache&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fastd-up ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/fastd/mesh-vpn/fastd-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UDP-Queue Größe ===&lt;br /&gt;
Durch Broadcasts können können auf Supernodes kurzzeitig hohe Lastspitzen enstehen. In der aktuellen batman-adv-Version wird jedes Broadcast-Paket zudem 3x auf jedem Link versendet.&lt;br /&gt;
Die vergleichweise hohe Datenrate von 100MBit/s zwischen Supernodes bewirkt darüber hinaus, dass broadcast-Pakete mit 100MBit/s eingehen können, während sie gleichzeitig an alle Nodes gesendet werden müssen.&lt;br /&gt;
&lt;br /&gt;
Linux-Distributionen sehen per Default Queue-Größen im Bereich von 128 KB vor (http://www.cyberciti.biz/faq/linux-tcp-tuning/). Supernodes sind somit nicht in der Lage entsprechende Lastspitzen zu puffern und während Idle-Times zu versenden. Läuft die UDP-Queue über, so loggt fastd:&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
Jeder Log-Eintrag entspricht einem Paket, dass nicht enqueued werden konnte und damit verworfen wurde. Die Queue-Größen können via systctl angepasst werden (http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php). Auf fastd2 wird zur Zeit verwendet:&lt;br /&gt;
 #/etc/sysctl.conf&lt;br /&gt;
 net.core.rmem_max=83886080&lt;br /&gt;
 net.core.wmem_max=83886080&lt;br /&gt;
 net.core.rmem_default=83886080&lt;br /&gt;
 net.core.wmem_default=83886080&lt;br /&gt;
&lt;br /&gt;
Das System verfügt dadurch über 80MB Speicher für Queues. Per default stehen ebenfalls 80MB zur Verfügung. Die konfigurierten 80MB reichen aus, um die 100MBit/s Verbindung über mehrere Sekunden auszulasten und Lastspitzen abzufangen.&lt;br /&gt;
&lt;br /&gt;
== Backbone Netz (tinc) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install tinc bridge-utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/tinc/backbone&lt;br /&gt;
echo &amp;quot;backbone&amp;quot; &amp;gt;&amp;gt; /etc/tinc/nets.boot  # Dies sagt tinc, dass es das Netz &amp;quot;backbone&amp;quot; starten soll&lt;br /&gt;
cd /etc/tinc/backbone&lt;br /&gt;
# Public keys der anderen Teilnehmer:&lt;br /&gt;
git clone https://github.com/ff-kbu/bbkeys&lt;br /&gt;
ln -s bbkeys/ hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt noch des eigene Public/Private Keypaar. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Keys sollten in /etc/tinc/backbone gespeichert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Den Public-Key in den Namen des Supernodes umbenennen und nach bbkeys/ kopieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tincd -K&lt;br /&gt;
cp rsa_key.pub bbkeys/[supernodename]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bevor jetzt der pub-key gepushed werden kann, muss tinc noch gesagt werden, welche Adressen über diesen Node zu routen sind. &amp;lt;br /&amp;gt;&lt;br /&gt;
Also im .pub key:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subnet=172.27.255.X/32&lt;br /&gt;
Subnet=172.27.Y.0/21&lt;br /&gt;
Subnet=fdd3:5d16:b5dd:3::X/128&lt;br /&gt;
Subnet=2001:67c:20a0:b10Z::/64&lt;br /&gt;
&lt;br /&gt;
-----BEGIN RSA PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Und schliesslich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd bbkeys; git push;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
Name=[supernodename]&lt;br /&gt;
Device=/dev/net/tun&lt;br /&gt;
Mode=router&lt;br /&gt;
Compression=9&lt;br /&gt;
ConnectTo=paula&lt;br /&gt;
ConnectTo=paul&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc-up ====&lt;br /&gt;
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ifconfig \$INTERFACE 172.27.255.[Backbone IPv4 Adresse hier] netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
ip route add 172.27.255.0/24 dev backbone table ffkbu&lt;br /&gt;
ip route add default dev backbone table ffkbu&lt;br /&gt;
ip -6 addr add fdd3:5d16:b5dd:3::X/64 dev \$INTERFACE&lt;br /&gt;
ip -6 addr add 2001:67c:20a0:b10Y::1/128 dev \$INTERFACE&lt;br /&gt;
ip -6 route add default via fdd3:5d16:b5dd:3::3&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch diese Datei muss ausführbar gemacht werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/tinc/backbone/tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte der Ordner etwa so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/tinc/backbone# ls &lt;br /&gt;
bbkeys&lt;br /&gt;
hosts -&amp;gt; bbkeys&lt;br /&gt;
rsa_key.priv&lt;br /&gt;
rsa_key.pub&lt;br /&gt;
tinc.conf&lt;br /&gt;
tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
we need to set up policy based routing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;200 ffkbu&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
fastd-up und tinc-up erledigen den rest: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip rule ls&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip rule ls&lt;br /&gt;
0:      from all lookup local &lt;br /&gt;
32765:  from 172.27.0.0/18 lookup ffkbu &lt;br /&gt;
32766:  from all lookup main &lt;br /&gt;
32767:  from all lookup default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
default dev backbone  scope link &lt;br /&gt;
172.27.0.0/18 dev bat0  scope link &lt;br /&gt;
172.27.255.0/24 dev backbone  scope link &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv4 DHCP ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dhcp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/dhcp/dhcpd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;mesh.kbu.freifunk.net&amp;quot;;&lt;br /&gt;
option domain-name-servers 85.214.20.141, 213.73.91.35;&lt;br /&gt;
&lt;br /&gt;
default-lease-time 60;&lt;br /&gt;
max-lease-time 720;&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
&lt;br /&gt;
subnet 172.27.0.0 netmask 255.255.192.0 {&lt;br /&gt;
	range 172.27.X.10 172.27.Y.255;&lt;br /&gt;
	option routers 172.27.X.1;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install radvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/radvd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
interface bat0 {&lt;br /&gt;
	AdvSendAdvert on;&lt;br /&gt;
	AdvHomeAgentFlag off;&lt;br /&gt;
	MinRtrAdvInterval 10;&lt;br /&gt;
	MaxRtrAdvInterval 30;&lt;br /&gt;
	AdvOtherConfigFlag on;&lt;br /&gt;
	AdvSourceLLAddress off;&lt;br /&gt;
	AdvLinkMTU 1350; #1442 - fastd - batman-adv - See wiki for details&lt;br /&gt;
	prefix 2001:67c:20a0:b10Y::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
	prefix fdd3:5d16:b5dd::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/radvd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=fastd-service=&lt;br /&gt;
Achtung, Pfade und Hostnamen anpassen. Das ist hier exemplarisch &lt;br /&gt;
 apt-get install apache2 ruby-sinatra libapache2-mod-passenger sudo psmisc git ruby-dev&lt;br /&gt;
 mkdir -p /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
 cd /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
 git clone https://github.com/freifunk-ffm/fastd-service.git&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm /etc/apache2/sites-enabled/000-default&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/apache2/sites-enabled/000-fastd1.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerAdmin info@EMAIL&lt;br /&gt;
      DocumentRoot /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&lt;br /&gt;
      &amp;lt;Directory /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&amp;gt;&lt;br /&gt;
          Allow from all&lt;br /&gt;
          Options -MultiViews&lt;br /&gt;
      &amp;lt;/Directory&amp;gt;&lt;br /&gt;
      ErrorLog /srv/www/fastd1.ffm.freifunk.net/logs/error.log&lt;br /&gt;
      CustomLog /srv/www/fastd1.ffm.freifunk.net/logs/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassung der conf.yml:&lt;br /&gt;
 register_url: http://USER:PASSWORT@register.bb.ffm.freifunk.net&lt;br /&gt;
 crash_dump_path: /var/log/ath9k-crash&lt;br /&gt;
 fastd_peer_dir: /etc/fastd/mesh-vpn/peers&lt;br /&gt;
 fastd_reload_cmd: sudo ./fastd_hup&lt;br /&gt;
&lt;br /&gt;
 gem install netaddr json sinatra sinatra-contrib rack rails rake &lt;br /&gt;
 chown -R www-data /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
&lt;br /&gt;
per visudo die folgende Zeile hinzufügen (Pfad anpassen)&lt;br /&gt;
 www-data ALL = NOPASSWD: /srv/www/fastd1.ffm.freifunk.net/fastd-service/fastd_hup&lt;br /&gt;
&lt;br /&gt;
Anmerkung:&lt;br /&gt;
Es kann sein, dass man in fastd_service.rb folgende Zeile auskommentieren muss: &lt;br /&gt;
 register Sinatra::MultiRoute&lt;br /&gt;
&lt;br /&gt;
=[[Anycast_DNS]]=&lt;br /&gt;
{{:Anycast_DNS}}&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2754</id>
		<title>Supernode</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2754"/>
		<updated>2014-09-07T10:27:09Z</updated>

		<summary type="html">&lt;p&gt;Christof: /* fastd-service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
[[https://en.wikipedia.org/wiki/Supernode_%28networking%29 wikipedia-article]]&lt;br /&gt;
&lt;br /&gt;
Benötigte Software&lt;br /&gt;
&lt;br /&gt;
1) [[https://projects.universe-factory.net/projects/fastd fastd]] mesh-node-vpn&lt;br /&gt;
&lt;br /&gt;
2) [[https://github.com/ff-kbu/fastd-service vpn-key-upload]] todo: remove overhead (apache,ruby,sinatra ...), [https://en.wikipedia.org/wiki/KISS_principle kiss principle]]&lt;br /&gt;
not documented in here (todo)&lt;br /&gt;
&lt;br /&gt;
3) [[http://www.open-mesh.org/projects/open-mesh/wiki batman-adv]]&lt;br /&gt;
&lt;br /&gt;
4) [[http://www.tinc-vpn.org/ tinc]] mesh-backbone-vpn&lt;br /&gt;
&lt;br /&gt;
5) OS: debian wheezy (or whatever you like)&lt;br /&gt;
&lt;br /&gt;
Du benötigst ausserdem: &amp;lt;br /&amp;gt;&lt;br /&gt;
* einen fastd-private-key &lt;br /&gt;
* eine IPv4/IPv6 Adresse und ein Subnetz&lt;br /&gt;
* eine IPv4 Adresse für das Backbone-Netz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
In der /etc/sysctl.conf muss folgendes gesetzt sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
net.ipv4.ip_forward=1&lt;br /&gt;
net.ipv4.ip_no_pmtu_disc=1&lt;br /&gt;
net.ipv4.route.flush=1&lt;br /&gt;
net.ipv6.conf.all.forwarding=1&lt;br /&gt;
net.ipv6.conf.all.autoconf=0&lt;br /&gt;
net.ipv6.conf.all.accept_ra=0&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die /etc/sysctl.conf neu einlesen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysctl -p&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;deb http://repo.universe-factory.net/debian/ sid main&amp;quot; &amp;gt;&amp;gt;/etc/apt/sources.list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GPG-Key importieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key  16EF3F64CB201D9C&lt;br /&gt;
 gpg -a --export 16EF3F64CB201D9C | apt-key add -&lt;br /&gt;
 apt-get update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batman-adv ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install batman-adv-dkms&lt;br /&gt;
echo &amp;quot;batman-adv&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== fastd ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 apt-get install fastd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== fastd.conf ====&lt;br /&gt;
&amp;quot;[YOUR SECRET KEY HERE]&amp;quot; Sollte dabei durch den fastd-secret-key ersetzt werden (erfragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
# Log warnings and errors to stderr&lt;br /&gt;
#log level warn;&lt;br /&gt;
log level error;&lt;br /&gt;
&lt;br /&gt;
# Log everything to a log file&lt;br /&gt;
#log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level debug;&lt;br /&gt;
log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level warn;&lt;br /&gt;
&lt;br /&gt;
# Set the interface name&lt;br /&gt;
interface &amp;quot;mesh-vpn&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20&lt;br /&gt;
method &amp;quot;salsa2012+gmac&amp;quot;;&lt;br /&gt;
method &amp;quot;null&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Bind to a fixed port, IPv4 only&lt;br /&gt;
bind 0.0.0.0:10000;&lt;br /&gt;
&lt;br /&gt;
# Secret key generated by 'fastd --generate-key'&lt;br /&gt;
secret &amp;quot;[YOUR SECRET KEY HERE]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)&lt;br /&gt;
# (see MTU selection documentation)&lt;br /&gt;
mtu 1426;&lt;br /&gt;
&lt;br /&gt;
# Include peers from the directory 'peers'&lt;br /&gt;
include peers from &amp;quot;peers&amp;quot;;&lt;br /&gt;
include peers from &amp;quot;backbone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on up &amp;quot;./fastd-up&amp;quot;;&lt;br /&gt;
# on down &amp;quot;./fastd-down&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on establish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=up -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
on disestablish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=down -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweise: &lt;br /&gt;
* Username / Password stehen im Keypass. &lt;br /&gt;
* Viewpoint (hier: fastd2) anpassen&lt;br /&gt;
* Grundsätzlich wird die Node-ID nicht escpaed. Shell-code injections ist aber nicht möglich, da mon_serv nur node_ids der Form $mac_$key zulässt. &lt;br /&gt;
* Die Calls auf der Script sind synchron - Daher &amp;quot;&amp;amp;&amp;quot;. fastd blockiert solange das Script nicht terminiert ist. (Zumindest Stand 04/2014)&lt;br /&gt;
Ordnerstruktur anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/backbone&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/peers&lt;br /&gt;
chown www-data /etc/fastd/mesh-vpn/peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Backbone ====&lt;br /&gt;
Backbone Keys einrichten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/fastd/mesh-vpn# ls backbone/&lt;br /&gt;
fastd1	fastd2	fastd3	fastd4	fastd5	fastd6	fastd7	fastd8&lt;br /&gt;
$:/etc/fastd/mesh-vpn# cat backbone/*&lt;br /&gt;
key &amp;quot;4f856d95bd596ac7724edca73a19e6e9d142b374df27166bb1a78e58785efc59&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;e1916b66c4f8a795e217877cf72607d952e796463c7024dd9a6a47ae2929bc10&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd2.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;d56181dfe9b5ac7cfe68a94c0ce406322a9924286a751673da0dcb28ad5218b0&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd3.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;9b3f65f99963343e2785c8c4fad65e70b73ee7e1205d63bd84f3e2decb53e621&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd4.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;6e4546121d16e7189715aef8ceb78ab58d59462720969318445f97b4301374d1&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd5.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;2a2c69dbb3b9fd90d7eb8e2f70be70b472d811cd4f3743ad9f5002d14b5c94cd&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd6.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;68de6815a89270c8eaf7832deedb8da098aad2ae5793cd2cd55dec3541ad28f2&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd7.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;b41a9714b1178ce428b15af0b6055cc204b39af2088ef3b371d8c36219eedd1e&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd8.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/ff-kbu/fff/tree/v0.3-generic/files/lib/freifunk/mesh-vpn/backbone fastd-backbone]] for more&lt;br /&gt;
&lt;br /&gt;
==== fastd-up ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#/bin/sh&lt;br /&gt;
/sbin/ip link set dev mesh-vpn up&lt;br /&gt;
/usr/sbin/batctl if add mesh-vpn&lt;br /&gt;
/usr/sbin/batctl gw_mode server&lt;br /&gt;
/sbin/ifconfig bat0 [DEINE IPv4 Addresse hier] netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ifconfig bat0:0 172.27.0.2 netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ip rule add from 172.27.0.0/18 table ffkbu&lt;br /&gt;
/sbin/ip route add 172.27.0.0/18 dev bat0 table ffkbu&lt;br /&gt;
/sbin/ip route flush cache&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fastd-up ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/fastd/mesh-vpn/fastd-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UDP-Queue Größe ===&lt;br /&gt;
Durch Broadcasts können können auf Supernodes kurzzeitig hohe Lastspitzen enstehen. In der aktuellen batman-adv-Version wird jedes Broadcast-Paket zudem 3x auf jedem Link versendet.&lt;br /&gt;
Die vergleichweise hohe Datenrate von 100MBit/s zwischen Supernodes bewirkt darüber hinaus, dass broadcast-Pakete mit 100MBit/s eingehen können, während sie gleichzeitig an alle Nodes gesendet werden müssen.&lt;br /&gt;
&lt;br /&gt;
Linux-Distributionen sehen per Default Queue-Größen im Bereich von 128 KB vor (http://www.cyberciti.biz/faq/linux-tcp-tuning/). Supernodes sind somit nicht in der Lage entsprechende Lastspitzen zu puffern und während Idle-Times zu versenden. Läuft die UDP-Queue über, so loggt fastd:&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
Jeder Log-Eintrag entspricht einem Paket, dass nicht enqueued werden konnte und damit verworfen wurde. Die Queue-Größen können via systctl angepasst werden (http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php). Auf fastd2 wird zur Zeit verwendet:&lt;br /&gt;
 #/etc/sysctl.conf&lt;br /&gt;
 net.core.rmem_max=83886080&lt;br /&gt;
 net.core.wmem_max=83886080&lt;br /&gt;
 net.core.rmem_default=83886080&lt;br /&gt;
 net.core.wmem_default=83886080&lt;br /&gt;
&lt;br /&gt;
Das System verfügt dadurch über 80MB Speicher für Queues. Per default stehen ebenfalls 80MB zur Verfügung. Die konfigurierten 80MB reichen aus, um die 100MBit/s Verbindung über mehrere Sekunden auszulasten und Lastspitzen abzufangen.&lt;br /&gt;
&lt;br /&gt;
== Backbone Netz (tinc) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install tinc bridge-utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/tinc/backbone&lt;br /&gt;
echo &amp;quot;backbone&amp;quot; &amp;gt;&amp;gt; /etc/tinc/nets.boot  # Dies sagt tinc, dass es das Netz &amp;quot;backbone&amp;quot; starten soll&lt;br /&gt;
cd /etc/tinc/backbone&lt;br /&gt;
# Public keys der anderen Teilnehmer:&lt;br /&gt;
git clone https://github.com/ff-kbu/bbkeys&lt;br /&gt;
ln -s bbkeys/ hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt noch des eigene Public/Private Keypaar. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Keys sollten in /etc/tinc/backbone gespeichert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Den Public-Key in den Namen des Supernodes umbenennen und nach bbkeys/ kopieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tincd -K&lt;br /&gt;
cp rsa_key.pub bbkeys/[supernodename]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bevor jetzt der pub-key gepushed werden kann, muss tinc noch gesagt werden, welche Adressen über diesen Node zu routen sind. &amp;lt;br /&amp;gt;&lt;br /&gt;
Also im .pub key:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subnet=172.27.255.X/32&lt;br /&gt;
Subnet=172.27.Y.0/21&lt;br /&gt;
Subnet=fdd3:5d16:b5dd:3::X/128&lt;br /&gt;
Subnet=2001:67c:20a0:b10Z::/64&lt;br /&gt;
&lt;br /&gt;
-----BEGIN RSA PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Und schliesslich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd bbkeys; git push;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
Name=[supernodename]&lt;br /&gt;
Device=/dev/net/tun&lt;br /&gt;
Mode=router&lt;br /&gt;
Compression=9&lt;br /&gt;
ConnectTo=paula&lt;br /&gt;
ConnectTo=paul&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc-up ====&lt;br /&gt;
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ifconfig \$INTERFACE 172.27.255.[Backbone IPv4 Adresse hier] netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
ip route add 172.27.255.0/24 dev backbone table ffkbu&lt;br /&gt;
ip route add default dev backbone table ffkbu&lt;br /&gt;
ip -6 addr add fdd3:5d16:b5dd:3::X/64 dev \$INTERFACE&lt;br /&gt;
ip -6 addr add 2001:67c:20a0:b10Y::1/128 dev \$INTERFACE&lt;br /&gt;
ip -6 route add default via fdd3:5d16:b5dd:3::3&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch diese Datei muss ausführbar gemacht werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/tinc/backbone/tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte der Ordner etwa so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/tinc/backbone# ls &lt;br /&gt;
bbkeys&lt;br /&gt;
hosts -&amp;gt; bbkeys&lt;br /&gt;
rsa_key.priv&lt;br /&gt;
rsa_key.pub&lt;br /&gt;
tinc.conf&lt;br /&gt;
tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
we need to set up policy based routing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;200 ffkbu&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
fastd-up und tinc-up erledigen den rest: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip rule ls&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip rule ls&lt;br /&gt;
0:      from all lookup local &lt;br /&gt;
32765:  from 172.27.0.0/18 lookup ffkbu &lt;br /&gt;
32766:  from all lookup main &lt;br /&gt;
32767:  from all lookup default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
default dev backbone  scope link &lt;br /&gt;
172.27.0.0/18 dev bat0  scope link &lt;br /&gt;
172.27.255.0/24 dev backbone  scope link &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv4 DHCP ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dhcp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/dhcp/dhcpd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;mesh.kbu.freifunk.net&amp;quot;;&lt;br /&gt;
option domain-name-servers 85.214.20.141, 213.73.91.35;&lt;br /&gt;
&lt;br /&gt;
default-lease-time 60;&lt;br /&gt;
max-lease-time 720;&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
&lt;br /&gt;
subnet 172.27.0.0 netmask 255.255.192.0 {&lt;br /&gt;
	range 172.27.X.10 172.27.Y.255;&lt;br /&gt;
	option routers 172.27.X.1;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install radvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/radvd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
interface bat0 {&lt;br /&gt;
	AdvSendAdvert on;&lt;br /&gt;
	AdvHomeAgentFlag off;&lt;br /&gt;
	MinRtrAdvInterval 10;&lt;br /&gt;
	MaxRtrAdvInterval 30;&lt;br /&gt;
	AdvOtherConfigFlag on;&lt;br /&gt;
	AdvSourceLLAddress off;&lt;br /&gt;
	AdvLinkMTU 1350; #1442 - fastd - batman-adv - See wiki for details&lt;br /&gt;
	prefix 2001:67c:20a0:b10Y::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
	prefix fdd3:5d16:b5dd::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/radvd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=fastd-service=&lt;br /&gt;
Achtung, Pfade und Hostnamen anpassen. Das ist hier exemplarisch &lt;br /&gt;
 apt-get install apache2 ruby-sinatra libapache2-mod-passenger sudo psmisc git&lt;br /&gt;
 mkdir -p /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
 cd /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
 git clone https://github.com/freifunk-ffm/fastd-service.git&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm /etc/apache2/sites-enabled/000-default&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/apache2/sites-enabled/000-fastd1.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerAdmin info@EMAIL&lt;br /&gt;
      DocumentRoot /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&lt;br /&gt;
      &amp;lt;Directory /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&amp;gt;&lt;br /&gt;
          Allow from all&lt;br /&gt;
          Options -MultiViews&lt;br /&gt;
      &amp;lt;/Directory&amp;gt;&lt;br /&gt;
      ErrorLog /srv/www/fastd1.ffm.freifunk.net/logs/error.log&lt;br /&gt;
      CustomLog /srv/www/fastd1.ffm.freifunk.net/logs/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassung der conf.yml:&lt;br /&gt;
 register_url: http://USER:PASSWORT@register.bb.ffm.freifunk.net&lt;br /&gt;
 crash_dump_path: /var/log/ath9k-crash&lt;br /&gt;
 fastd_peer_dir: /etc/fastd/mesh-vpn/peers&lt;br /&gt;
 fastd_reload_cmd: sudo ./fastd_hup&lt;br /&gt;
&lt;br /&gt;
 gem install netaddr json sinatra sinatra-contrib rack rails rake &lt;br /&gt;
 chown -R www-data /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
&lt;br /&gt;
per visudo die folgende Zeile hinzufügen (Pfad anpassen)&lt;br /&gt;
 www-data ALL = NOPASSWD: /srv/www/fastd1.ffm.freifunk.net/fastd-service/fastd_hup&lt;br /&gt;
&lt;br /&gt;
Anmerkung:&lt;br /&gt;
Es kann sein, dass man in fastd_service.rb folgende Zeile auskommentieren muss: &lt;br /&gt;
 register Sinatra::MultiRoute&lt;br /&gt;
&lt;br /&gt;
=[[Anycast_DNS]]=&lt;br /&gt;
{{:Anycast_DNS}}&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2753</id>
		<title>Supernode</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2753"/>
		<updated>2014-09-07T10:22:01Z</updated>

		<summary type="html">&lt;p&gt;Christof: /* fastd.conf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
[[https://en.wikipedia.org/wiki/Supernode_%28networking%29 wikipedia-article]]&lt;br /&gt;
&lt;br /&gt;
Benötigte Software&lt;br /&gt;
&lt;br /&gt;
1) [[https://projects.universe-factory.net/projects/fastd fastd]] mesh-node-vpn&lt;br /&gt;
&lt;br /&gt;
2) [[https://github.com/ff-kbu/fastd-service vpn-key-upload]] todo: remove overhead (apache,ruby,sinatra ...), [https://en.wikipedia.org/wiki/KISS_principle kiss principle]]&lt;br /&gt;
not documented in here (todo)&lt;br /&gt;
&lt;br /&gt;
3) [[http://www.open-mesh.org/projects/open-mesh/wiki batman-adv]]&lt;br /&gt;
&lt;br /&gt;
4) [[http://www.tinc-vpn.org/ tinc]] mesh-backbone-vpn&lt;br /&gt;
&lt;br /&gt;
5) OS: debian wheezy (or whatever you like)&lt;br /&gt;
&lt;br /&gt;
Du benötigst ausserdem: &amp;lt;br /&amp;gt;&lt;br /&gt;
* einen fastd-private-key &lt;br /&gt;
* eine IPv4/IPv6 Adresse und ein Subnetz&lt;br /&gt;
* eine IPv4 Adresse für das Backbone-Netz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
In der /etc/sysctl.conf muss folgendes gesetzt sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
net.ipv4.ip_forward=1&lt;br /&gt;
net.ipv4.ip_no_pmtu_disc=1&lt;br /&gt;
net.ipv4.route.flush=1&lt;br /&gt;
net.ipv6.conf.all.forwarding=1&lt;br /&gt;
net.ipv6.conf.all.autoconf=0&lt;br /&gt;
net.ipv6.conf.all.accept_ra=0&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die /etc/sysctl.conf neu einlesen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysctl -p&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;deb http://repo.universe-factory.net/debian/ sid main&amp;quot; &amp;gt;&amp;gt;/etc/apt/sources.list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GPG-Key importieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key  16EF3F64CB201D9C&lt;br /&gt;
 gpg -a --export 16EF3F64CB201D9C | apt-key add -&lt;br /&gt;
 apt-get update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batman-adv ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install batman-adv-dkms&lt;br /&gt;
echo &amp;quot;batman-adv&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== fastd ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 apt-get install fastd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== fastd.conf ====&lt;br /&gt;
&amp;quot;[YOUR SECRET KEY HERE]&amp;quot; Sollte dabei durch den fastd-secret-key ersetzt werden (erfragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
# Log warnings and errors to stderr&lt;br /&gt;
#log level warn;&lt;br /&gt;
log level error;&lt;br /&gt;
&lt;br /&gt;
# Log everything to a log file&lt;br /&gt;
#log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level debug;&lt;br /&gt;
log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level warn;&lt;br /&gt;
&lt;br /&gt;
# Set the interface name&lt;br /&gt;
interface &amp;quot;mesh-vpn&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20&lt;br /&gt;
method &amp;quot;salsa2012+gmac&amp;quot;;&lt;br /&gt;
method &amp;quot;null&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Bind to a fixed port, IPv4 only&lt;br /&gt;
bind 0.0.0.0:10000;&lt;br /&gt;
&lt;br /&gt;
# Secret key generated by 'fastd --generate-key'&lt;br /&gt;
secret &amp;quot;[YOUR SECRET KEY HERE]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)&lt;br /&gt;
# (see MTU selection documentation)&lt;br /&gt;
mtu 1426;&lt;br /&gt;
&lt;br /&gt;
# Include peers from the directory 'peers'&lt;br /&gt;
include peers from &amp;quot;peers&amp;quot;;&lt;br /&gt;
include peers from &amp;quot;backbone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on up &amp;quot;./fastd-up&amp;quot;;&lt;br /&gt;
# on down &amp;quot;./fastd-down&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on establish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=up -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
on disestablish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=down -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweise: &lt;br /&gt;
* Username / Password stehen im Keypass. &lt;br /&gt;
* Viewpoint (hier: fastd2) anpassen&lt;br /&gt;
* Grundsätzlich wird die Node-ID nicht escpaed. Shell-code injections ist aber nicht möglich, da mon_serv nur node_ids der Form $mac_$key zulässt. &lt;br /&gt;
* Die Calls auf der Script sind synchron - Daher &amp;quot;&amp;amp;&amp;quot;. fastd blockiert solange das Script nicht terminiert ist. (Zumindest Stand 04/2014)&lt;br /&gt;
Ordnerstruktur anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/backbone&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/peers&lt;br /&gt;
chown www-data /etc/fastd/mesh-vpn/peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Backbone ====&lt;br /&gt;
Backbone Keys einrichten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/fastd/mesh-vpn# ls backbone/&lt;br /&gt;
fastd1	fastd2	fastd3	fastd4	fastd5	fastd6	fastd7	fastd8&lt;br /&gt;
$:/etc/fastd/mesh-vpn# cat backbone/*&lt;br /&gt;
key &amp;quot;4f856d95bd596ac7724edca73a19e6e9d142b374df27166bb1a78e58785efc59&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;e1916b66c4f8a795e217877cf72607d952e796463c7024dd9a6a47ae2929bc10&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd2.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;d56181dfe9b5ac7cfe68a94c0ce406322a9924286a751673da0dcb28ad5218b0&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd3.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;9b3f65f99963343e2785c8c4fad65e70b73ee7e1205d63bd84f3e2decb53e621&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd4.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;6e4546121d16e7189715aef8ceb78ab58d59462720969318445f97b4301374d1&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd5.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;2a2c69dbb3b9fd90d7eb8e2f70be70b472d811cd4f3743ad9f5002d14b5c94cd&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd6.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;68de6815a89270c8eaf7832deedb8da098aad2ae5793cd2cd55dec3541ad28f2&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd7.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;b41a9714b1178ce428b15af0b6055cc204b39af2088ef3b371d8c36219eedd1e&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd8.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/ff-kbu/fff/tree/v0.3-generic/files/lib/freifunk/mesh-vpn/backbone fastd-backbone]] for more&lt;br /&gt;
&lt;br /&gt;
==== fastd-up ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#/bin/sh&lt;br /&gt;
/sbin/ip link set dev mesh-vpn up&lt;br /&gt;
/usr/sbin/batctl if add mesh-vpn&lt;br /&gt;
/usr/sbin/batctl gw_mode server&lt;br /&gt;
/sbin/ifconfig bat0 [DEINE IPv4 Addresse hier] netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ifconfig bat0:0 172.27.0.2 netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ip rule add from 172.27.0.0/18 table ffkbu&lt;br /&gt;
/sbin/ip route add 172.27.0.0/18 dev bat0 table ffkbu&lt;br /&gt;
/sbin/ip route flush cache&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fastd-up ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/fastd/mesh-vpn/fastd-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UDP-Queue Größe ===&lt;br /&gt;
Durch Broadcasts können können auf Supernodes kurzzeitig hohe Lastspitzen enstehen. In der aktuellen batman-adv-Version wird jedes Broadcast-Paket zudem 3x auf jedem Link versendet.&lt;br /&gt;
Die vergleichweise hohe Datenrate von 100MBit/s zwischen Supernodes bewirkt darüber hinaus, dass broadcast-Pakete mit 100MBit/s eingehen können, während sie gleichzeitig an alle Nodes gesendet werden müssen.&lt;br /&gt;
&lt;br /&gt;
Linux-Distributionen sehen per Default Queue-Größen im Bereich von 128 KB vor (http://www.cyberciti.biz/faq/linux-tcp-tuning/). Supernodes sind somit nicht in der Lage entsprechende Lastspitzen zu puffern und während Idle-Times zu versenden. Läuft die UDP-Queue über, so loggt fastd:&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
Jeder Log-Eintrag entspricht einem Paket, dass nicht enqueued werden konnte und damit verworfen wurde. Die Queue-Größen können via systctl angepasst werden (http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php). Auf fastd2 wird zur Zeit verwendet:&lt;br /&gt;
 #/etc/sysctl.conf&lt;br /&gt;
 net.core.rmem_max=83886080&lt;br /&gt;
 net.core.wmem_max=83886080&lt;br /&gt;
 net.core.rmem_default=83886080&lt;br /&gt;
 net.core.wmem_default=83886080&lt;br /&gt;
&lt;br /&gt;
Das System verfügt dadurch über 80MB Speicher für Queues. Per default stehen ebenfalls 80MB zur Verfügung. Die konfigurierten 80MB reichen aus, um die 100MBit/s Verbindung über mehrere Sekunden auszulasten und Lastspitzen abzufangen.&lt;br /&gt;
&lt;br /&gt;
== Backbone Netz (tinc) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install tinc bridge-utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/tinc/backbone&lt;br /&gt;
echo &amp;quot;backbone&amp;quot; &amp;gt;&amp;gt; /etc/tinc/nets.boot  # Dies sagt tinc, dass es das Netz &amp;quot;backbone&amp;quot; starten soll&lt;br /&gt;
cd /etc/tinc/backbone&lt;br /&gt;
# Public keys der anderen Teilnehmer:&lt;br /&gt;
git clone https://github.com/ff-kbu/bbkeys&lt;br /&gt;
ln -s bbkeys/ hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt noch des eigene Public/Private Keypaar. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Keys sollten in /etc/tinc/backbone gespeichert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Den Public-Key in den Namen des Supernodes umbenennen und nach bbkeys/ kopieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tincd -K&lt;br /&gt;
cp rsa_key.pub bbkeys/[supernodename]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bevor jetzt der pub-key gepushed werden kann, muss tinc noch gesagt werden, welche Adressen über diesen Node zu routen sind. &amp;lt;br /&amp;gt;&lt;br /&gt;
Also im .pub key:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subnet=172.27.255.X/32&lt;br /&gt;
Subnet=172.27.Y.0/21&lt;br /&gt;
Subnet=fdd3:5d16:b5dd:3::X/128&lt;br /&gt;
Subnet=2001:67c:20a0:b10Z::/64&lt;br /&gt;
&lt;br /&gt;
-----BEGIN RSA PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Und schliesslich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd bbkeys; git push;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
Name=[supernodename]&lt;br /&gt;
Device=/dev/net/tun&lt;br /&gt;
Mode=router&lt;br /&gt;
Compression=9&lt;br /&gt;
ConnectTo=paula&lt;br /&gt;
ConnectTo=paul&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc-up ====&lt;br /&gt;
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ifconfig \$INTERFACE 172.27.255.[Backbone IPv4 Adresse hier] netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
ip route add 172.27.255.0/24 dev backbone table ffkbu&lt;br /&gt;
ip route add default dev backbone table ffkbu&lt;br /&gt;
ip -6 addr add fdd3:5d16:b5dd:3::X/64 dev \$INTERFACE&lt;br /&gt;
ip -6 addr add 2001:67c:20a0:b10Y::1/128 dev \$INTERFACE&lt;br /&gt;
ip -6 route add default via fdd3:5d16:b5dd:3::3&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch diese Datei muss ausführbar gemacht werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/tinc/backbone/tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte der Ordner etwa so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/tinc/backbone# ls &lt;br /&gt;
bbkeys&lt;br /&gt;
hosts -&amp;gt; bbkeys&lt;br /&gt;
rsa_key.priv&lt;br /&gt;
rsa_key.pub&lt;br /&gt;
tinc.conf&lt;br /&gt;
tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
we need to set up policy based routing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;200 ffkbu&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
fastd-up und tinc-up erledigen den rest: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip rule ls&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip rule ls&lt;br /&gt;
0:      from all lookup local &lt;br /&gt;
32765:  from 172.27.0.0/18 lookup ffkbu &lt;br /&gt;
32766:  from all lookup main &lt;br /&gt;
32767:  from all lookup default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
default dev backbone  scope link &lt;br /&gt;
172.27.0.0/18 dev bat0  scope link &lt;br /&gt;
172.27.255.0/24 dev backbone  scope link &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv4 DHCP ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dhcp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/dhcp/dhcpd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;mesh.kbu.freifunk.net&amp;quot;;&lt;br /&gt;
option domain-name-servers 85.214.20.141, 213.73.91.35;&lt;br /&gt;
&lt;br /&gt;
default-lease-time 60;&lt;br /&gt;
max-lease-time 720;&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
&lt;br /&gt;
subnet 172.27.0.0 netmask 255.255.192.0 {&lt;br /&gt;
	range 172.27.X.10 172.27.Y.255;&lt;br /&gt;
	option routers 172.27.X.1;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install radvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/radvd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
interface bat0 {&lt;br /&gt;
	AdvSendAdvert on;&lt;br /&gt;
	AdvHomeAgentFlag off;&lt;br /&gt;
	MinRtrAdvInterval 10;&lt;br /&gt;
	MaxRtrAdvInterval 30;&lt;br /&gt;
	AdvOtherConfigFlag on;&lt;br /&gt;
	AdvSourceLLAddress off;&lt;br /&gt;
	AdvLinkMTU 1350; #1442 - fastd - batman-adv - See wiki for details&lt;br /&gt;
	prefix 2001:67c:20a0:b10Y::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
	prefix fdd3:5d16:b5dd::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/radvd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=fastd-service=&lt;br /&gt;
Achtung, Pfade und Hostnamen anpassen. Das ist hier exemplarisch &lt;br /&gt;
 apt-get install apache2 ruby-sinatra libapache2-mod-passenger sudo psmisc git&lt;br /&gt;
 mkdir -p /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
 cd /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
 git clone https://github.com/freifunk-ffm/fastd-service.git&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/apache2/sites-enabled/000-fastd1.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerAdmin info@EMAIL&lt;br /&gt;
      DocumentRoot /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&lt;br /&gt;
      &amp;lt;Directory /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&amp;gt;&lt;br /&gt;
          Allow from all&lt;br /&gt;
          Options -MultiViews&lt;br /&gt;
      &amp;lt;/Directory&amp;gt;&lt;br /&gt;
      ErrorLog /srv/www/fastd1.ffm.freifunk.net/logs/error.log&lt;br /&gt;
      CustomLog /srv/www/fastd1.ffm.freifunk.net/logs/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassung der conf.yml:&lt;br /&gt;
 register_url: http://USER:PASSWORT@register.bb.ffm.freifunk.net&lt;br /&gt;
 crash_dump_path: /var/log/ath9k-crash&lt;br /&gt;
 fastd_peer_dir: /etc/fastd/mesh-vpn/peers&lt;br /&gt;
 fastd_reload_cmd: sudo ./fastd_hup&lt;br /&gt;
&lt;br /&gt;
 gem install netaddr json sinatra sinatra-contrib rack rails rake &lt;br /&gt;
 chown -R www-data /srv/www/fastd1.ffm.freifunk.net&lt;br /&gt;
&lt;br /&gt;
per visudo die folgende Zeile hinzufügen (Pfad anpassen)&lt;br /&gt;
 www-data ALL = NOPASSWD: /srv/www/fastd1.ffm.freifunk.net/fastd-service/fastd_hup&lt;br /&gt;
&lt;br /&gt;
Anmerkung:&lt;br /&gt;
Es kann sein, dass man in fastd_service.rb folgende Zeile auskommentieren muss: &lt;br /&gt;
 register Sinatra::MultiRoute&lt;br /&gt;
&lt;br /&gt;
=[[Anycast_DNS]]=&lt;br /&gt;
{{:Anycast_DNS}}&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2726</id>
		<title>Supernode</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2726"/>
		<updated>2014-08-18T21:30:56Z</updated>

		<summary type="html">&lt;p&gt;Christof: /* fastd-service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
[[https://en.wikipedia.org/wiki/Supernode_%28networking%29 wikipedia-article]]&lt;br /&gt;
&lt;br /&gt;
Benötigte Software&lt;br /&gt;
&lt;br /&gt;
1) [[https://projects.universe-factory.net/projects/fastd fastd]] mesh-node-vpn&lt;br /&gt;
&lt;br /&gt;
2) [[https://github.com/ff-kbu/fastd-service vpn-key-upload]] todo: remove overhead (apache,ruby,sinatra ...), [https://en.wikipedia.org/wiki/KISS_principle kiss principle]]&lt;br /&gt;
not documented in here (todo)&lt;br /&gt;
&lt;br /&gt;
3) [[http://www.open-mesh.org/projects/open-mesh/wiki batman-adv]]&lt;br /&gt;
&lt;br /&gt;
4) [[http://www.tinc-vpn.org/ tinc]] mesh-backbone-vpn&lt;br /&gt;
&lt;br /&gt;
5) OS: debian wheezy (or whatever you like)&lt;br /&gt;
&lt;br /&gt;
Du benötigst ausserdem: &amp;lt;br /&amp;gt;&lt;br /&gt;
* einen fastd-private-key &lt;br /&gt;
* eine IPv4/IPv6 Adresse und ein Subnetz&lt;br /&gt;
* eine IPv4 Adresse für das Backbone-Netz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
In der /etc/sysctl.conf muss folgendes gesetzt sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
net.ipv4.ip_forward=1&lt;br /&gt;
net.ipv4.ip_no_pmtu_disc=1&lt;br /&gt;
net.ipv4.route.flush=1&lt;br /&gt;
net.ipv6.conf.all.forwarding=1&lt;br /&gt;
net.ipv6.conf.all.autoconf=0&lt;br /&gt;
net.ipv6.conf.all.accept_ra=0&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die /etc/sysctl.conf neu einlesen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysctl -p&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;deb http://repo.universe-factory.net/debian/ sid main&amp;quot; &amp;gt;&amp;gt;/etc/apt/sources.list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GPG-Key importieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key  16EF3F64CB201D9C&lt;br /&gt;
 gpg -a --export 16EF3F64CB201D9C | apt-key add -&lt;br /&gt;
 apt-get update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batman-adv ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install batman-adv-dkms&lt;br /&gt;
echo &amp;quot;batman-adv&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== fastd ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 apt-get install fastd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== fastd.conf ====&lt;br /&gt;
&amp;quot;[YOUR SECRET KEY HERE]&amp;quot; Sollte dabei durch den fastd-secret-key ersetzt werden (erfragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
# Log warnings and errors to stderr&lt;br /&gt;
#log level warn;&lt;br /&gt;
log level error;&lt;br /&gt;
&lt;br /&gt;
# Log everything to a log file&lt;br /&gt;
#log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level debug;&lt;br /&gt;
log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level warn;&lt;br /&gt;
&lt;br /&gt;
# Set the interface name&lt;br /&gt;
interface &amp;quot;mesh-vpn&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20&lt;br /&gt;
method &amp;quot;salsa2012+gmac&amp;quot;;&lt;br /&gt;
method &amp;quot;null&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Bind to a fixed port, IPv4 only&lt;br /&gt;
bind 0.0.0.0:10000;&lt;br /&gt;
&lt;br /&gt;
# Secret key generated by 'fastd --generate-key'&lt;br /&gt;
secret &amp;quot;[YOUR SECRET KEY HERE]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)&lt;br /&gt;
# (see MTU selection documentation)&lt;br /&gt;
mtu 1426;&lt;br /&gt;
&lt;br /&gt;
# Include peers from the directory 'peers'&lt;br /&gt;
include peers from &amp;quot;peers&amp;quot;;&lt;br /&gt;
include peers from &amp;quot;backbone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on up &amp;quot;./fastd-up&amp;quot;;&lt;br /&gt;
# on down &amp;quot;./fastd-down&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on establish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=up -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
on disestablish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=down -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweise: &lt;br /&gt;
* Username / Password stehen im Keypass. &lt;br /&gt;
* Viewpoint (hier: fastd2) anpassen&lt;br /&gt;
* Grundsätzlich wird die Node-ID nicht escpaed. Shell-code injections ist aber nicht möglich, da mon_serv nur node_ids der Form $mac_$key zulässt. &lt;br /&gt;
* Die Calls auf der Script sind synchron - Daher &amp;quot;&amp;amp;&amp;quot;. fastd blockiert solange das Script nicht terminiert ist. (Zumindest Stand 04/2014)&lt;br /&gt;
Ordnerstruktur anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/backbone&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Backbone ====&lt;br /&gt;
Backbone Keys einrichten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/fastd/mesh-vpn# ls backbone/&lt;br /&gt;
fastd1	fastd2	fastd3	fastd4	fastd5	fastd6	fastd7	fastd8&lt;br /&gt;
$:/etc/fastd/mesh-vpn# cat backbone/*&lt;br /&gt;
key &amp;quot;4f856d95bd596ac7724edca73a19e6e9d142b374df27166bb1a78e58785efc59&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;e1916b66c4f8a795e217877cf72607d952e796463c7024dd9a6a47ae2929bc10&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd2.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;d56181dfe9b5ac7cfe68a94c0ce406322a9924286a751673da0dcb28ad5218b0&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd3.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;9b3f65f99963343e2785c8c4fad65e70b73ee7e1205d63bd84f3e2decb53e621&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd4.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;6e4546121d16e7189715aef8ceb78ab58d59462720969318445f97b4301374d1&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd5.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;2a2c69dbb3b9fd90d7eb8e2f70be70b472d811cd4f3743ad9f5002d14b5c94cd&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd6.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;68de6815a89270c8eaf7832deedb8da098aad2ae5793cd2cd55dec3541ad28f2&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd7.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;b41a9714b1178ce428b15af0b6055cc204b39af2088ef3b371d8c36219eedd1e&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd8.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/ff-kbu/fff/tree/v0.3-generic/files/lib/freifunk/mesh-vpn/backbone fastd-backbone]] for more&lt;br /&gt;
&lt;br /&gt;
==== fastd-up ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#/bin/sh&lt;br /&gt;
/sbin/ip link set dev mesh-vpn up&lt;br /&gt;
/usr/sbin/batctl if add mesh-vpn&lt;br /&gt;
/usr/sbin/batctl gw_mode server&lt;br /&gt;
/sbin/ifconfig bat0 [DEINE IPv4 Addresse hier] netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ifconfig bat0:0 172.27.0.2 netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ip rule add from 172.27.0.0/18 table ffkbu&lt;br /&gt;
/sbin/ip route add 172.27.0.0/18 dev bat0 table ffkbu&lt;br /&gt;
/sbin/ip route flush cache&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fastd-up ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/fastd/mesh-vpn/fastd-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UDP-Queue Größe ===&lt;br /&gt;
Durch Broadcasts können können auf Supernodes kurzzeitig hohe Lastspitzen enstehen. In der aktuellen batman-adv-Version wird jedes Broadcast-Paket zudem 3x auf jedem Link versendet.&lt;br /&gt;
Die vergleichweise hohe Datenrate von 100MBit/s zwischen Supernodes bewirkt darüber hinaus, dass broadcast-Pakete mit 100MBit/s eingehen können, während sie gleichzeitig an alle Nodes gesendet werden müssen.&lt;br /&gt;
&lt;br /&gt;
Linux-Distributionen sehen per Default Queue-Größen im Bereich von 128 KB vor (http://www.cyberciti.biz/faq/linux-tcp-tuning/). Supernodes sind somit nicht in der Lage entsprechende Lastspitzen zu puffern und während Idle-Times zu versenden. Läuft die UDP-Queue über, so loggt fastd:&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
Jeder Log-Eintrag entspricht einem Paket, dass nicht enqueued werden konnte und damit verworfen wurde. Die Queue-Größen können via systctl angepasst werden (http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php). Auf fastd2 wird zur Zeit verwendet:&lt;br /&gt;
 #/etc/sysctl.conf&lt;br /&gt;
 net.core.rmem_max=83886080&lt;br /&gt;
 net.core.wmem_max=83886080&lt;br /&gt;
 net.core.rmem_default=83886080&lt;br /&gt;
 net.core.wmem_default=83886080&lt;br /&gt;
&lt;br /&gt;
Das System verfügt dadurch über 80MB Speicher für Queues. Per default stehen ebenfalls 80MB zur Verfügung. Die konfigurierten 80MB reichen aus, um die 100MBit/s Verbindung über mehrere Sekunden auszulasten und Lastspitzen abzufangen.&lt;br /&gt;
&lt;br /&gt;
== Backbone Netz (tinc) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install tinc bridge-utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/tinc/backbone&lt;br /&gt;
echo &amp;quot;backbone&amp;quot; &amp;gt;&amp;gt; /etc/tinc/nets.boot  # Dies sagt tinc, dass es das Netz &amp;quot;backbone&amp;quot; starten soll&lt;br /&gt;
cd /etc/tinc/backbone&lt;br /&gt;
# Public keys der anderen Teilnehmer:&lt;br /&gt;
git clone https://github.com/ff-kbu/bbkeys&lt;br /&gt;
ln -s bbkeys/ hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt noch des eigene Public/Private Keypaar. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Keys sollten in /etc/tinc/backbone gespeichert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Den Public-Key in den Namen des Supernodes umbenennen und nach bbkeys/ kopieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tincd -K&lt;br /&gt;
cp rsa_key.pub bbkeys/[supernodename]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bevor jetzt der pub-key gepushed werden kann, muss tinc noch gesagt werden, welche Adressen über diesen Node zu routen sind. &amp;lt;br /&amp;gt;&lt;br /&gt;
Also im .pub key:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subnet=172.27.255.X/32&lt;br /&gt;
Subnet=172.27.Y.0/21&lt;br /&gt;
Subnet=fdd3:5d16:b5dd:3::X/128&lt;br /&gt;
Subnet=2001:67c:20a0:b10Z::/64&lt;br /&gt;
&lt;br /&gt;
-----BEGIN RSA PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Und schliesslich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd bbkeys; git push;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
Name=[supernodename]&lt;br /&gt;
Device=/dev/net/tun&lt;br /&gt;
Mode=router&lt;br /&gt;
Compression=9&lt;br /&gt;
ConnectTo=paula&lt;br /&gt;
ConnectTo=paul&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc-up ====&lt;br /&gt;
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ifconfig \$INTERFACE 172.27.255.[Backbone IPv4 Adresse hier] netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
ip route add 172.27.255.0/24 dev backbone table ffkbu&lt;br /&gt;
ip route add default dev backbone table ffkbu&lt;br /&gt;
ip -6 addr add fdd3:5d16:b5dd:3::X/64 dev \$INTERFACE&lt;br /&gt;
ip -6 addr add 2001:67c:20a0:b10Y::1/128 dev \$INTERFACE&lt;br /&gt;
ip -6 route add default via fdd3:5d16:b5dd:3::3&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch diese Datei muss ausführbar gemacht werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/tinc/backbone/tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte der Ordner etwa so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/tinc/backbone# ls &lt;br /&gt;
bbkeys&lt;br /&gt;
hosts -&amp;gt; bbkeys&lt;br /&gt;
rsa_key.priv&lt;br /&gt;
rsa_key.pub&lt;br /&gt;
tinc.conf&lt;br /&gt;
tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
we need to set up policy based routing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;200 ffkbu&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
fastd-up und tinc-up erledigen den rest: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip rule ls&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip rule ls&lt;br /&gt;
0:      from all lookup local &lt;br /&gt;
32765:  from 172.27.0.0/18 lookup ffkbu &lt;br /&gt;
32766:  from all lookup main &lt;br /&gt;
32767:  from all lookup default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
default dev backbone  scope link &lt;br /&gt;
172.27.0.0/18 dev bat0  scope link &lt;br /&gt;
172.27.255.0/24 dev backbone  scope link &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv4 DHCP ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dhcp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/dhcp/dhcpd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;mesh.kbu.freifunk.net&amp;quot;;&lt;br /&gt;
option domain-name-servers 85.214.20.141, 213.73.91.35;&lt;br /&gt;
&lt;br /&gt;
default-lease-time 60;&lt;br /&gt;
max-lease-time 720;&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
&lt;br /&gt;
subnet 172.27.0.0 netmask 255.255.192.0 {&lt;br /&gt;
	range 172.27.X.10 172.27.Y.255;&lt;br /&gt;
	option routers 172.27.X.1;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install radvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/radvd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
interface bat0 {&lt;br /&gt;
	AdvSendAdvert on;&lt;br /&gt;
	AdvHomeAgentFlag off;&lt;br /&gt;
	MinRtrAdvInterval 10;&lt;br /&gt;
	MaxRtrAdvInterval 30;&lt;br /&gt;
	AdvOtherConfigFlag on;&lt;br /&gt;
	AdvSourceLLAddress off;&lt;br /&gt;
	AdvLinkMTU 1350; #1442 - fastd - batman-adv - See wiki for details&lt;br /&gt;
	prefix 2001:67c:20a0:b10Y::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
	prefix fdd3:5d16:b5dd::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/radvd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=fastd-service=&lt;br /&gt;
Achtung, Pfade und Hostnamen anpassen. Das ist hier exemplarisch &lt;br /&gt;
 apt-get install apache2 ruby-sinatra libapache2-mod-passenger sudo psmisc git&lt;br /&gt;
 mkdir -p /srv/fastd1.ffm.freifunk.net&lt;br /&gt;
 cd /srv/fastd1.ffm.freifunk.net&lt;br /&gt;
 git clone https://github.com/freifunk-ffm/fastd-service.git&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/apache2/sites-enabled/000-fastd1.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerAdmin info@EMAIL&lt;br /&gt;
      DocumentRoot /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&lt;br /&gt;
      &amp;lt;Directory /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&amp;gt;&lt;br /&gt;
          Allow from all&lt;br /&gt;
          Options -MultiViews&lt;br /&gt;
      &amp;lt;/Directory&amp;gt;&lt;br /&gt;
      ErrorLog /srv/www/fastd1.ffm.freifunk.net/logs/error.log&lt;br /&gt;
      CustomLog /srv/www/fastd1.ffm.freifunk.net/logs/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassung der conf.yml:&lt;br /&gt;
 register_url: http://USER:PASSWORT@register.bb.ffm.freifunk.net&lt;br /&gt;
 crash_dump_path: /var/log/ath9k-crash&lt;br /&gt;
 fastd_peer_dir: /etc/fastd/mesh-vpn/peers&lt;br /&gt;
 fastd_reload_cmd: sudo ./fastd_hup&lt;br /&gt;
&lt;br /&gt;
 gem install netaddr json sinatra sinatra-contrib rack rails rake &lt;br /&gt;
 chown -R www-data /srv/fastd1.ffm.freifunk.net&lt;br /&gt;
&lt;br /&gt;
per visudo die folgende Zeile hinzufügen (Pfad anpassen)&lt;br /&gt;
 www-data ALL = NOPASSWD: /srv/www/fastd1.ffm.freifunk.net/fastd-service/fastd_hup&lt;br /&gt;
&lt;br /&gt;
Anmerkung:&lt;br /&gt;
Es kann sein, dass man in fastd_service.rb folgende Zeile auskommentieren muss: &lt;br /&gt;
 register Sinatra::MultiRoute&lt;br /&gt;
&lt;br /&gt;
=[[Anycast_DNS]]=&lt;br /&gt;
{{:Anycast_DNS}}&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2725</id>
		<title>Supernode</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2725"/>
		<updated>2014-08-18T21:12:01Z</updated>

		<summary type="html">&lt;p&gt;Christof: /* fastd-service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
[[https://en.wikipedia.org/wiki/Supernode_%28networking%29 wikipedia-article]]&lt;br /&gt;
&lt;br /&gt;
Benötigte Software&lt;br /&gt;
&lt;br /&gt;
1) [[https://projects.universe-factory.net/projects/fastd fastd]] mesh-node-vpn&lt;br /&gt;
&lt;br /&gt;
2) [[https://github.com/ff-kbu/fastd-service vpn-key-upload]] todo: remove overhead (apache,ruby,sinatra ...), [https://en.wikipedia.org/wiki/KISS_principle kiss principle]]&lt;br /&gt;
not documented in here (todo)&lt;br /&gt;
&lt;br /&gt;
3) [[http://www.open-mesh.org/projects/open-mesh/wiki batman-adv]]&lt;br /&gt;
&lt;br /&gt;
4) [[http://www.tinc-vpn.org/ tinc]] mesh-backbone-vpn&lt;br /&gt;
&lt;br /&gt;
5) OS: debian wheezy (or whatever you like)&lt;br /&gt;
&lt;br /&gt;
Du benötigst ausserdem: &amp;lt;br /&amp;gt;&lt;br /&gt;
* einen fastd-private-key &lt;br /&gt;
* eine IPv4/IPv6 Adresse und ein Subnetz&lt;br /&gt;
* eine IPv4 Adresse für das Backbone-Netz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
In der /etc/sysctl.conf muss folgendes gesetzt sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
net.ipv4.ip_forward=1&lt;br /&gt;
net.ipv4.ip_no_pmtu_disc=1&lt;br /&gt;
net.ipv4.route.flush=1&lt;br /&gt;
net.ipv6.conf.all.forwarding=1&lt;br /&gt;
net.ipv6.conf.all.autoconf=0&lt;br /&gt;
net.ipv6.conf.all.accept_ra=0&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die /etc/sysctl.conf neu einlesen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysctl -p&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;deb http://repo.universe-factory.net/debian/ sid main&amp;quot; &amp;gt;&amp;gt;/etc/apt/sources.list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GPG-Key importieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key  16EF3F64CB201D9C&lt;br /&gt;
 gpg -a --export 16EF3F64CB201D9C | apt-key add -&lt;br /&gt;
 apt-get update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batman-adv ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install batman-adv-dkms&lt;br /&gt;
echo &amp;quot;batman-adv&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== fastd ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 apt-get install fastd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== fastd.conf ====&lt;br /&gt;
&amp;quot;[YOUR SECRET KEY HERE]&amp;quot; Sollte dabei durch den fastd-secret-key ersetzt werden (erfragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
# Log warnings and errors to stderr&lt;br /&gt;
#log level warn;&lt;br /&gt;
log level error;&lt;br /&gt;
&lt;br /&gt;
# Log everything to a log file&lt;br /&gt;
#log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level debug;&lt;br /&gt;
log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level warn;&lt;br /&gt;
&lt;br /&gt;
# Set the interface name&lt;br /&gt;
interface &amp;quot;mesh-vpn&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20&lt;br /&gt;
method &amp;quot;salsa2012+gmac&amp;quot;;&lt;br /&gt;
method &amp;quot;null&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Bind to a fixed port, IPv4 only&lt;br /&gt;
bind 0.0.0.0:10000;&lt;br /&gt;
&lt;br /&gt;
# Secret key generated by 'fastd --generate-key'&lt;br /&gt;
secret &amp;quot;[YOUR SECRET KEY HERE]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)&lt;br /&gt;
# (see MTU selection documentation)&lt;br /&gt;
mtu 1426;&lt;br /&gt;
&lt;br /&gt;
# Include peers from the directory 'peers'&lt;br /&gt;
include peers from &amp;quot;peers&amp;quot;;&lt;br /&gt;
include peers from &amp;quot;backbone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on up &amp;quot;./fastd-up&amp;quot;;&lt;br /&gt;
# on down &amp;quot;./fastd-down&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on establish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=up -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
on disestablish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=down -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweise: &lt;br /&gt;
* Username / Password stehen im Keypass. &lt;br /&gt;
* Viewpoint (hier: fastd2) anpassen&lt;br /&gt;
* Grundsätzlich wird die Node-ID nicht escpaed. Shell-code injections ist aber nicht möglich, da mon_serv nur node_ids der Form $mac_$key zulässt. &lt;br /&gt;
* Die Calls auf der Script sind synchron - Daher &amp;quot;&amp;amp;&amp;quot;. fastd blockiert solange das Script nicht terminiert ist. (Zumindest Stand 04/2014)&lt;br /&gt;
Ordnerstruktur anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/backbone&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Backbone ====&lt;br /&gt;
Backbone Keys einrichten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/fastd/mesh-vpn# ls backbone/&lt;br /&gt;
fastd1	fastd2	fastd3	fastd4	fastd5	fastd6	fastd7	fastd8&lt;br /&gt;
$:/etc/fastd/mesh-vpn# cat backbone/*&lt;br /&gt;
key &amp;quot;4f856d95bd596ac7724edca73a19e6e9d142b374df27166bb1a78e58785efc59&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;e1916b66c4f8a795e217877cf72607d952e796463c7024dd9a6a47ae2929bc10&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd2.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;d56181dfe9b5ac7cfe68a94c0ce406322a9924286a751673da0dcb28ad5218b0&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd3.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;9b3f65f99963343e2785c8c4fad65e70b73ee7e1205d63bd84f3e2decb53e621&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd4.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;6e4546121d16e7189715aef8ceb78ab58d59462720969318445f97b4301374d1&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd5.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;2a2c69dbb3b9fd90d7eb8e2f70be70b472d811cd4f3743ad9f5002d14b5c94cd&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd6.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;68de6815a89270c8eaf7832deedb8da098aad2ae5793cd2cd55dec3541ad28f2&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd7.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;b41a9714b1178ce428b15af0b6055cc204b39af2088ef3b371d8c36219eedd1e&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd8.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/ff-kbu/fff/tree/v0.3-generic/files/lib/freifunk/mesh-vpn/backbone fastd-backbone]] for more&lt;br /&gt;
&lt;br /&gt;
==== fastd-up ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#/bin/sh&lt;br /&gt;
/sbin/ip link set dev mesh-vpn up&lt;br /&gt;
/usr/sbin/batctl if add mesh-vpn&lt;br /&gt;
/usr/sbin/batctl gw_mode server&lt;br /&gt;
/sbin/ifconfig bat0 [DEINE IPv4 Addresse hier] netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ifconfig bat0:0 172.27.0.2 netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ip rule add from 172.27.0.0/18 table ffkbu&lt;br /&gt;
/sbin/ip route add 172.27.0.0/18 dev bat0 table ffkbu&lt;br /&gt;
/sbin/ip route flush cache&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fastd-up ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/fastd/mesh-vpn/fastd-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UDP-Queue Größe ===&lt;br /&gt;
Durch Broadcasts können können auf Supernodes kurzzeitig hohe Lastspitzen enstehen. In der aktuellen batman-adv-Version wird jedes Broadcast-Paket zudem 3x auf jedem Link versendet.&lt;br /&gt;
Die vergleichweise hohe Datenrate von 100MBit/s zwischen Supernodes bewirkt darüber hinaus, dass broadcast-Pakete mit 100MBit/s eingehen können, während sie gleichzeitig an alle Nodes gesendet werden müssen.&lt;br /&gt;
&lt;br /&gt;
Linux-Distributionen sehen per Default Queue-Größen im Bereich von 128 KB vor (http://www.cyberciti.biz/faq/linux-tcp-tuning/). Supernodes sind somit nicht in der Lage entsprechende Lastspitzen zu puffern und während Idle-Times zu versenden. Läuft die UDP-Queue über, so loggt fastd:&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
Jeder Log-Eintrag entspricht einem Paket, dass nicht enqueued werden konnte und damit verworfen wurde. Die Queue-Größen können via systctl angepasst werden (http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php). Auf fastd2 wird zur Zeit verwendet:&lt;br /&gt;
 #/etc/sysctl.conf&lt;br /&gt;
 net.core.rmem_max=83886080&lt;br /&gt;
 net.core.wmem_max=83886080&lt;br /&gt;
 net.core.rmem_default=83886080&lt;br /&gt;
 net.core.wmem_default=83886080&lt;br /&gt;
&lt;br /&gt;
Das System verfügt dadurch über 80MB Speicher für Queues. Per default stehen ebenfalls 80MB zur Verfügung. Die konfigurierten 80MB reichen aus, um die 100MBit/s Verbindung über mehrere Sekunden auszulasten und Lastspitzen abzufangen.&lt;br /&gt;
&lt;br /&gt;
== Backbone Netz (tinc) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install tinc bridge-utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/tinc/backbone&lt;br /&gt;
echo &amp;quot;backbone&amp;quot; &amp;gt;&amp;gt; /etc/tinc/nets.boot  # Dies sagt tinc, dass es das Netz &amp;quot;backbone&amp;quot; starten soll&lt;br /&gt;
cd /etc/tinc/backbone&lt;br /&gt;
# Public keys der anderen Teilnehmer:&lt;br /&gt;
git clone https://github.com/ff-kbu/bbkeys&lt;br /&gt;
ln -s bbkeys/ hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt noch des eigene Public/Private Keypaar. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Keys sollten in /etc/tinc/backbone gespeichert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Den Public-Key in den Namen des Supernodes umbenennen und nach bbkeys/ kopieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tincd -K&lt;br /&gt;
cp rsa_key.pub bbkeys/[supernodename]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bevor jetzt der pub-key gepushed werden kann, muss tinc noch gesagt werden, welche Adressen über diesen Node zu routen sind. &amp;lt;br /&amp;gt;&lt;br /&gt;
Also im .pub key:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subnet=172.27.255.X/32&lt;br /&gt;
Subnet=172.27.Y.0/21&lt;br /&gt;
Subnet=fdd3:5d16:b5dd:3::X/128&lt;br /&gt;
Subnet=2001:67c:20a0:b10Z::/64&lt;br /&gt;
&lt;br /&gt;
-----BEGIN RSA PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Und schliesslich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd bbkeys; git push;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
Name=[supernodename]&lt;br /&gt;
Device=/dev/net/tun&lt;br /&gt;
Mode=router&lt;br /&gt;
Compression=9&lt;br /&gt;
ConnectTo=paula&lt;br /&gt;
ConnectTo=paul&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc-up ====&lt;br /&gt;
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ifconfig \$INTERFACE 172.27.255.[Backbone IPv4 Adresse hier] netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
ip route add 172.27.255.0/24 dev backbone table ffkbu&lt;br /&gt;
ip route add default dev backbone table ffkbu&lt;br /&gt;
ip -6 addr add fdd3:5d16:b5dd:3::X/64 dev \$INTERFACE&lt;br /&gt;
ip -6 addr add 2001:67c:20a0:b10Y::1/128 dev \$INTERFACE&lt;br /&gt;
ip -6 route add default via fdd3:5d16:b5dd:3::3&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch diese Datei muss ausführbar gemacht werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/tinc/backbone/tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte der Ordner etwa so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/tinc/backbone# ls &lt;br /&gt;
bbkeys&lt;br /&gt;
hosts -&amp;gt; bbkeys&lt;br /&gt;
rsa_key.priv&lt;br /&gt;
rsa_key.pub&lt;br /&gt;
tinc.conf&lt;br /&gt;
tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
we need to set up policy based routing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;200 ffkbu&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
fastd-up und tinc-up erledigen den rest: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip rule ls&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip rule ls&lt;br /&gt;
0:      from all lookup local &lt;br /&gt;
32765:  from 172.27.0.0/18 lookup ffkbu &lt;br /&gt;
32766:  from all lookup main &lt;br /&gt;
32767:  from all lookup default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
default dev backbone  scope link &lt;br /&gt;
172.27.0.0/18 dev bat0  scope link &lt;br /&gt;
172.27.255.0/24 dev backbone  scope link &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv4 DHCP ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dhcp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/dhcp/dhcpd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;mesh.kbu.freifunk.net&amp;quot;;&lt;br /&gt;
option domain-name-servers 85.214.20.141, 213.73.91.35;&lt;br /&gt;
&lt;br /&gt;
default-lease-time 60;&lt;br /&gt;
max-lease-time 720;&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
&lt;br /&gt;
subnet 172.27.0.0 netmask 255.255.192.0 {&lt;br /&gt;
	range 172.27.X.10 172.27.Y.255;&lt;br /&gt;
	option routers 172.27.X.1;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install radvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/radvd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
interface bat0 {&lt;br /&gt;
	AdvSendAdvert on;&lt;br /&gt;
	AdvHomeAgentFlag off;&lt;br /&gt;
	MinRtrAdvInterval 10;&lt;br /&gt;
	MaxRtrAdvInterval 30;&lt;br /&gt;
	AdvOtherConfigFlag on;&lt;br /&gt;
	AdvSourceLLAddress off;&lt;br /&gt;
	AdvLinkMTU 1350; #1442 - fastd - batman-adv - See wiki for details&lt;br /&gt;
	prefix 2001:67c:20a0:b10Y::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
	prefix fdd3:5d16:b5dd::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/radvd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=fastd-service=&lt;br /&gt;
Achtung, Pfade und Hostnamen anpassen. Das ist hier exemplarisch &lt;br /&gt;
 apt-get install apache2 ruby-sinatra libapache2-mod-passenger sudo psmisc git&lt;br /&gt;
 mkdir -p /srv/fastd1.ffm.freifunk.net&lt;br /&gt;
 cd /srv/fastd1.ffm.freifunk.net&lt;br /&gt;
 git clone https://github.com/freifunk-ffm/fastd-service.git&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/apache2/sites-enabled/000-fastd1.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerAdmin info@EMAIL&lt;br /&gt;
      DocumentRoot /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&lt;br /&gt;
      &amp;lt;Directory /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&amp;gt;&lt;br /&gt;
          Allow from all&lt;br /&gt;
          Options -MultiViews&lt;br /&gt;
      &amp;lt;/Directory&amp;gt;&lt;br /&gt;
      ErrorLog /srv/www/fastd1.ffm.freifunk.net/logs/error.log&lt;br /&gt;
      CustomLog /srv/www/fastd1.ffm.freifunk.net/logs/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassung der conf.yml:&lt;br /&gt;
 register_url: http://USER:PASSWORT@register.bb.ffm.freifunk.net&lt;br /&gt;
 crash_dump_path: /var/log/ath9k-crash&lt;br /&gt;
 fastd_peer_dir: /etc/fastd/mesh-vpn/peers&lt;br /&gt;
 fastd_reload_cmd: sudo ./fastd_hup&lt;br /&gt;
&lt;br /&gt;
 gem install netaddr json sinatra sinatra-contrib rack rails rake &lt;br /&gt;
 chown -R www-data /srv/fastd1.ffm.freifunk.net&lt;br /&gt;
&lt;br /&gt;
Anmerkung:&lt;br /&gt;
Es kann sein, dass man infastd_service.rb folgende Zeile auskommentieren muss: &lt;br /&gt;
 register Sinatra::MultiRoute&lt;br /&gt;
&lt;br /&gt;
=[[Anycast_DNS]]=&lt;br /&gt;
{{:Anycast_DNS}}&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2724</id>
		<title>Supernode</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2724"/>
		<updated>2014-08-15T17:10:27Z</updated>

		<summary type="html">&lt;p&gt;Christof: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
[[https://en.wikipedia.org/wiki/Supernode_%28networking%29 wikipedia-article]]&lt;br /&gt;
&lt;br /&gt;
Benötigte Software&lt;br /&gt;
&lt;br /&gt;
1) [[https://projects.universe-factory.net/projects/fastd fastd]] mesh-node-vpn&lt;br /&gt;
&lt;br /&gt;
2) [[https://github.com/ff-kbu/fastd-service vpn-key-upload]] todo: remove overhead (apache,ruby,sinatra ...), [https://en.wikipedia.org/wiki/KISS_principle kiss principle]]&lt;br /&gt;
not documented in here (todo)&lt;br /&gt;
&lt;br /&gt;
3) [[http://www.open-mesh.org/projects/open-mesh/wiki batman-adv]]&lt;br /&gt;
&lt;br /&gt;
4) [[http://www.tinc-vpn.org/ tinc]] mesh-backbone-vpn&lt;br /&gt;
&lt;br /&gt;
5) OS: debian wheezy (or whatever you like)&lt;br /&gt;
&lt;br /&gt;
Du benötigst ausserdem: &amp;lt;br /&amp;gt;&lt;br /&gt;
* einen fastd-private-key &lt;br /&gt;
* eine IPv4/IPv6 Adresse und ein Subnetz&lt;br /&gt;
* eine IPv4 Adresse für das Backbone-Netz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
In der /etc/sysctl.conf muss folgendes gesetzt sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
net.ipv4.ip_forward=1&lt;br /&gt;
net.ipv4.ip_no_pmtu_disc=1&lt;br /&gt;
net.ipv4.route.flush=1&lt;br /&gt;
net.ipv6.conf.all.forwarding=1&lt;br /&gt;
net.ipv6.conf.all.autoconf=0&lt;br /&gt;
net.ipv6.conf.all.accept_ra=0&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die /etc/sysctl.conf neu einlesen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysctl -p&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;deb http://repo.universe-factory.net/debian/ sid main&amp;quot; &amp;gt;&amp;gt;/etc/apt/sources.list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GPG-Key importieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key  16EF3F64CB201D9C&lt;br /&gt;
 gpg -a --export 16EF3F64CB201D9C | apt-key add -&lt;br /&gt;
 apt-get update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batman-adv ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install batman-adv-dkms&lt;br /&gt;
echo &amp;quot;batman-adv&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== fastd ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 apt-get install fastd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== fastd.conf ====&lt;br /&gt;
&amp;quot;[YOUR SECRET KEY HERE]&amp;quot; Sollte dabei durch den fastd-secret-key ersetzt werden (erfragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
# Log warnings and errors to stderr&lt;br /&gt;
#log level warn;&lt;br /&gt;
log level error;&lt;br /&gt;
&lt;br /&gt;
# Log everything to a log file&lt;br /&gt;
#log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level debug;&lt;br /&gt;
log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level warn;&lt;br /&gt;
&lt;br /&gt;
# Set the interface name&lt;br /&gt;
interface &amp;quot;mesh-vpn&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20&lt;br /&gt;
method &amp;quot;salsa2012+gmac&amp;quot;;&lt;br /&gt;
method &amp;quot;null&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Bind to a fixed port, IPv4 only&lt;br /&gt;
bind 0.0.0.0:10000;&lt;br /&gt;
&lt;br /&gt;
# Secret key generated by 'fastd --generate-key'&lt;br /&gt;
secret &amp;quot;[YOUR SECRET KEY HERE]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)&lt;br /&gt;
# (see MTU selection documentation)&lt;br /&gt;
mtu 1426;&lt;br /&gt;
&lt;br /&gt;
# Include peers from the directory 'peers'&lt;br /&gt;
include peers from &amp;quot;peers&amp;quot;;&lt;br /&gt;
include peers from &amp;quot;backbone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on up &amp;quot;./fastd-up&amp;quot;;&lt;br /&gt;
# on down &amp;quot;./fastd-down&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on establish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=up -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
on disestablish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=down -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweise: &lt;br /&gt;
* Username / Password stehen im Keypass. &lt;br /&gt;
* Viewpoint (hier: fastd2) anpassen&lt;br /&gt;
* Grundsätzlich wird die Node-ID nicht escpaed. Shell-code injections ist aber nicht möglich, da mon_serv nur node_ids der Form $mac_$key zulässt. &lt;br /&gt;
* Die Calls auf der Script sind synchron - Daher &amp;quot;&amp;amp;&amp;quot;. fastd blockiert solange das Script nicht terminiert ist. (Zumindest Stand 04/2014)&lt;br /&gt;
Ordnerstruktur anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/backbone&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Backbone ====&lt;br /&gt;
Backbone Keys einrichten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/fastd/mesh-vpn# ls backbone/&lt;br /&gt;
fastd1	fastd2	fastd3	fastd4	fastd5	fastd6	fastd7	fastd8&lt;br /&gt;
$:/etc/fastd/mesh-vpn# cat backbone/*&lt;br /&gt;
key &amp;quot;4f856d95bd596ac7724edca73a19e6e9d142b374df27166bb1a78e58785efc59&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;e1916b66c4f8a795e217877cf72607d952e796463c7024dd9a6a47ae2929bc10&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd2.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;d56181dfe9b5ac7cfe68a94c0ce406322a9924286a751673da0dcb28ad5218b0&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd3.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;9b3f65f99963343e2785c8c4fad65e70b73ee7e1205d63bd84f3e2decb53e621&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd4.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;6e4546121d16e7189715aef8ceb78ab58d59462720969318445f97b4301374d1&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd5.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;2a2c69dbb3b9fd90d7eb8e2f70be70b472d811cd4f3743ad9f5002d14b5c94cd&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd6.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;68de6815a89270c8eaf7832deedb8da098aad2ae5793cd2cd55dec3541ad28f2&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd7.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;b41a9714b1178ce428b15af0b6055cc204b39af2088ef3b371d8c36219eedd1e&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd8.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/ff-kbu/fff/tree/v0.3-generic/files/lib/freifunk/mesh-vpn/backbone fastd-backbone]] for more&lt;br /&gt;
&lt;br /&gt;
==== fastd-up ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#/bin/sh&lt;br /&gt;
/sbin/ip link set dev mesh-vpn up&lt;br /&gt;
/usr/sbin/batctl if add mesh-vpn&lt;br /&gt;
/usr/sbin/batctl gw_mode server&lt;br /&gt;
/sbin/ifconfig bat0 [DEINE IPv4 Addresse hier] netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ifconfig bat0:0 172.27.0.2 netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ip rule add from 172.27.0.0/18 table ffkbu&lt;br /&gt;
/sbin/ip route add 172.27.0.0/18 dev bat0 table ffkbu&lt;br /&gt;
/sbin/ip route flush cache&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fastd-up ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/fastd/mesh-vpn/fastd-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UDP-Queue Größe ===&lt;br /&gt;
Durch Broadcasts können können auf Supernodes kurzzeitig hohe Lastspitzen enstehen. In der aktuellen batman-adv-Version wird jedes Broadcast-Paket zudem 3x auf jedem Link versendet.&lt;br /&gt;
Die vergleichweise hohe Datenrate von 100MBit/s zwischen Supernodes bewirkt darüber hinaus, dass broadcast-Pakete mit 100MBit/s eingehen können, während sie gleichzeitig an alle Nodes gesendet werden müssen.&lt;br /&gt;
&lt;br /&gt;
Linux-Distributionen sehen per Default Queue-Größen im Bereich von 128 KB vor (http://www.cyberciti.biz/faq/linux-tcp-tuning/). Supernodes sind somit nicht in der Lage entsprechende Lastspitzen zu puffern und während Idle-Times zu versenden. Läuft die UDP-Queue über, so loggt fastd:&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
Jeder Log-Eintrag entspricht einem Paket, dass nicht enqueued werden konnte und damit verworfen wurde. Die Queue-Größen können via systctl angepasst werden (http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php). Auf fastd2 wird zur Zeit verwendet:&lt;br /&gt;
 #/etc/sysctl.conf&lt;br /&gt;
 net.core.rmem_max=83886080&lt;br /&gt;
 net.core.wmem_max=83886080&lt;br /&gt;
 net.core.rmem_default=83886080&lt;br /&gt;
 net.core.wmem_default=83886080&lt;br /&gt;
&lt;br /&gt;
Das System verfügt dadurch über 80MB Speicher für Queues. Per default stehen ebenfalls 80MB zur Verfügung. Die konfigurierten 80MB reichen aus, um die 100MBit/s Verbindung über mehrere Sekunden auszulasten und Lastspitzen abzufangen.&lt;br /&gt;
&lt;br /&gt;
== Backbone Netz (tinc) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install tinc bridge-utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/tinc/backbone&lt;br /&gt;
echo &amp;quot;backbone&amp;quot; &amp;gt;&amp;gt; /etc/tinc/nets.boot  # Dies sagt tinc, dass es das Netz &amp;quot;backbone&amp;quot; starten soll&lt;br /&gt;
cd /etc/tinc/backbone&lt;br /&gt;
# Public keys der anderen Teilnehmer:&lt;br /&gt;
git clone https://github.com/ff-kbu/bbkeys&lt;br /&gt;
ln -s bbkeys/ hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt noch des eigene Public/Private Keypaar. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Keys sollten in /etc/tinc/backbone gespeichert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Den Public-Key in den Namen des Supernodes umbenennen und nach bbkeys/ kopieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tincd -K&lt;br /&gt;
cp rsa_key.pub bbkeys/[supernodename]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bevor jetzt der pub-key gepushed werden kann, muss tinc noch gesagt werden, welche Adressen über diesen Node zu routen sind. &amp;lt;br /&amp;gt;&lt;br /&gt;
Also im .pub key:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subnet=172.27.255.X/32&lt;br /&gt;
Subnet=172.27.Y.0/21&lt;br /&gt;
Subnet=fdd3:5d16:b5dd:3::X/128&lt;br /&gt;
Subnet=2001:67c:20a0:b10Z::/64&lt;br /&gt;
&lt;br /&gt;
-----BEGIN RSA PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Und schliesslich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd bbkeys; git push;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
Name=[supernodename]&lt;br /&gt;
Device=/dev/net/tun&lt;br /&gt;
Mode=router&lt;br /&gt;
Compression=9&lt;br /&gt;
ConnectTo=paula&lt;br /&gt;
ConnectTo=paul&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc-up ====&lt;br /&gt;
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ifconfig \$INTERFACE 172.27.255.[Backbone IPv4 Adresse hier] netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
ip route add 172.27.255.0/24 dev backbone table ffkbu&lt;br /&gt;
ip route add default dev backbone table ffkbu&lt;br /&gt;
ip -6 addr add fdd3:5d16:b5dd:3::X/64 dev \$INTERFACE&lt;br /&gt;
ip -6 addr add 2001:67c:20a0:b10Y::1/128 dev \$INTERFACE&lt;br /&gt;
ip -6 route add default via fdd3:5d16:b5dd:3::3&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch diese Datei muss ausführbar gemacht werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/tinc/backbone/tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte der Ordner etwa so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/tinc/backbone# ls &lt;br /&gt;
bbkeys&lt;br /&gt;
hosts -&amp;gt; bbkeys&lt;br /&gt;
rsa_key.priv&lt;br /&gt;
rsa_key.pub&lt;br /&gt;
tinc.conf&lt;br /&gt;
tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
we need to set up policy based routing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;200 ffkbu&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
fastd-up und tinc-up erledigen den rest: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip rule ls&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip rule ls&lt;br /&gt;
0:      from all lookup local &lt;br /&gt;
32765:  from 172.27.0.0/18 lookup ffkbu &lt;br /&gt;
32766:  from all lookup main &lt;br /&gt;
32767:  from all lookup default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
default dev backbone  scope link &lt;br /&gt;
172.27.0.0/18 dev bat0  scope link &lt;br /&gt;
172.27.255.0/24 dev backbone  scope link &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv4 DHCP ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dhcp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/dhcp/dhcpd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;mesh.kbu.freifunk.net&amp;quot;;&lt;br /&gt;
option domain-name-servers 85.214.20.141, 213.73.91.35;&lt;br /&gt;
&lt;br /&gt;
default-lease-time 60;&lt;br /&gt;
max-lease-time 720;&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
&lt;br /&gt;
subnet 172.27.0.0 netmask 255.255.192.0 {&lt;br /&gt;
	range 172.27.X.10 172.27.Y.255;&lt;br /&gt;
	option routers 172.27.X.1;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install radvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/radvd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
interface bat0 {&lt;br /&gt;
	AdvSendAdvert on;&lt;br /&gt;
	AdvHomeAgentFlag off;&lt;br /&gt;
	MinRtrAdvInterval 10;&lt;br /&gt;
	MaxRtrAdvInterval 30;&lt;br /&gt;
	AdvOtherConfigFlag on;&lt;br /&gt;
	AdvSourceLLAddress off;&lt;br /&gt;
	AdvLinkMTU 1350; #1442 - fastd - batman-adv - See wiki for details&lt;br /&gt;
	prefix 2001:67c:20a0:b10Y::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
	prefix fdd3:5d16:b5dd::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/radvd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=fastd-service=&lt;br /&gt;
Achtung, Pfade und Hostnamen anpassen. Das ist hier exemplarisch &lt;br /&gt;
 apt-get install apache2 ruby-sinatra libapache2-mod-passenger sudo psmisc git&lt;br /&gt;
 mkdir -p /srv/fastd1.ffm.freifunk.net&lt;br /&gt;
 cd /srv/fastd1.ffm.freifunk.net&lt;br /&gt;
 git clone https://github.com/freifunk-ffm/fastd-service.git&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/apache2/sites-enabled/000-fastd1.conf&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerAdmin info@EMAIL&lt;br /&gt;
      DocumentRoot /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&lt;br /&gt;
      &amp;lt;Directory /srv/www/fastd1.ffm.freifunk.net/fastd-service/public&amp;gt;&lt;br /&gt;
          Allow from all&lt;br /&gt;
          Options -MultiViews&lt;br /&gt;
      &amp;lt;/Directory&amp;gt;&lt;br /&gt;
      ErrorLog /srv/www/fastd1.ffm.freifunk.net/logs/error.log&lt;br /&gt;
      CustomLog /srv/www/fastd1.ffm.freifunk.net/logs/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassung der conf.yml:&lt;br /&gt;
 register_url: http://USER:PASSWORT@register.bb.ffm.freifunk.net&lt;br /&gt;
 crash_dump_path: /var/log/ath9k-crash&lt;br /&gt;
 fastd_peer_dir: /etc/fastd/mesh-vpn/peers&lt;br /&gt;
 fastd_reload_cmd: sudo ./fastd_hup&lt;br /&gt;
&lt;br /&gt;
 gem install netaddr json sinatra sinatra-contrib rack rails rake &lt;br /&gt;
 chown -R www-data /srv/fastd1.ffm.freifunk.net&lt;br /&gt;
&lt;br /&gt;
Anmerkung:&lt;br /&gt;
Es kann sein, dass man infastd_service.rb folgende Zeile auskommentieren muss: &lt;br /&gt;
 register Sinatra::MultiRoute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=[[Anycast_DNS]]=&lt;br /&gt;
{{:Anycast_DNS}}&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2723</id>
		<title>Supernode</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2723"/>
		<updated>2014-08-12T23:23:26Z</updated>

		<summary type="html">&lt;p&gt;Christof: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
[[https://en.wikipedia.org/wiki/Supernode_%28networking%29 wikipedia-article]]&lt;br /&gt;
&lt;br /&gt;
Benötigte Software&lt;br /&gt;
&lt;br /&gt;
1) [[https://projects.universe-factory.net/projects/fastd fastd]] mesh-node-vpn&lt;br /&gt;
&lt;br /&gt;
2) [[https://github.com/ff-kbu/fastd-service vpn-key-upload]] todo: remove overhead (apache,ruby,sinatra ...), [https://en.wikipedia.org/wiki/KISS_principle kiss principle]]&lt;br /&gt;
not documented in here (todo)&lt;br /&gt;
&lt;br /&gt;
3) [[http://www.open-mesh.org/projects/open-mesh/wiki batman-adv]]&lt;br /&gt;
&lt;br /&gt;
4) [[http://www.tinc-vpn.org/ tinc]] mesh-backbone-vpn&lt;br /&gt;
&lt;br /&gt;
5) OS: debian wheezy (or whatever you like)&lt;br /&gt;
&lt;br /&gt;
Du benötigst ausserdem: &amp;lt;br /&amp;gt;&lt;br /&gt;
* einen fastd-private-key &lt;br /&gt;
* eine IPv4/IPv6 Adresse und ein Subnetz&lt;br /&gt;
* eine IPv4 Adresse für das Backbone-Netz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
In der /etc/sysctl.conf muss folgendes gesetzt sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
net.ipv4.ip_forward=1&lt;br /&gt;
net.ipv4.ip_no_pmtu_disc=1&lt;br /&gt;
net.ipv4.route.flush=1&lt;br /&gt;
net.ipv6.conf.all.forwarding=1&lt;br /&gt;
net.ipv6.conf.all.autoconf=0&lt;br /&gt;
net.ipv6.conf.all.accept_ra=0&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die /etc/sysctl.conf neu einlesen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysctl -p&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;deb http://repo.universe-factory.net/debian/ sid main&amp;quot; &amp;gt;&amp;gt;/etc/apt/sources.list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GPG-Key importieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key  16EF3F64CB201D9C&lt;br /&gt;
 gpg -a --export 16EF3F64CB201D9C | apt-key add -&lt;br /&gt;
 apt-get update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batman-adv ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install batman-adv-dkms&lt;br /&gt;
echo &amp;quot;batman-adv&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== fastd ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 apt-get install fastd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== fastd.conf ====&lt;br /&gt;
&amp;quot;[YOUR SECRET KEY HERE]&amp;quot; Sollte dabei durch den fastd-secret-key ersetzt werden (erfragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
# Log warnings and errors to stderr&lt;br /&gt;
#log level warn;&lt;br /&gt;
log level error;&lt;br /&gt;
&lt;br /&gt;
# Log everything to a log file&lt;br /&gt;
#log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level debug;&lt;br /&gt;
log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level warn;&lt;br /&gt;
&lt;br /&gt;
# Set the interface name&lt;br /&gt;
interface &amp;quot;mesh-vpn&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20&lt;br /&gt;
method &amp;quot;salsa2012+gmac&amp;quot;;&lt;br /&gt;
method &amp;quot;null&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Bind to a fixed port, IPv4 only&lt;br /&gt;
bind 0.0.0.0:10000;&lt;br /&gt;
&lt;br /&gt;
# Secret key generated by 'fastd --generate-key'&lt;br /&gt;
secret &amp;quot;[YOUR SECRET KEY HERE]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)&lt;br /&gt;
# (see MTU selection documentation)&lt;br /&gt;
mtu 1426;&lt;br /&gt;
&lt;br /&gt;
# Include peers from the directory 'peers'&lt;br /&gt;
include peers from &amp;quot;peers&amp;quot;;&lt;br /&gt;
include peers from &amp;quot;backbone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on up &amp;quot;./fastd-up&amp;quot;;&lt;br /&gt;
# on down &amp;quot;./fastd-down&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on establish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=up -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
on disestablish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=down -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweise: &lt;br /&gt;
* Username / Password stehen im Keypass. &lt;br /&gt;
* Viewpoint (hier: fastd2) anpassen&lt;br /&gt;
* Grundsätzlich wird die Node-ID nicht escpaed. Shell-code injections ist aber nicht möglich, da mon_serv nur node_ids der Form $mac_$key zulässt. &lt;br /&gt;
* Die Calls auf der Script sind synchron - Daher &amp;quot;&amp;amp;&amp;quot;. fastd blockiert solange das Script nicht terminiert ist. (Zumindest Stand 04/2014)&lt;br /&gt;
Ordnerstruktur anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/backbone&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Backbone ====&lt;br /&gt;
Backbone Keys einrichten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/fastd/mesh-vpn# ls backbone/&lt;br /&gt;
fastd1	fastd2	fastd3	fastd4	fastd5	fastd6	fastd7	fastd8&lt;br /&gt;
$:/etc/fastd/mesh-vpn# cat backbone/*&lt;br /&gt;
key &amp;quot;4f856d95bd596ac7724edca73a19e6e9d142b374df27166bb1a78e58785efc59&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;e1916b66c4f8a795e217877cf72607d952e796463c7024dd9a6a47ae2929bc10&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd2.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;d56181dfe9b5ac7cfe68a94c0ce406322a9924286a751673da0dcb28ad5218b0&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd3.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;9b3f65f99963343e2785c8c4fad65e70b73ee7e1205d63bd84f3e2decb53e621&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd4.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;6e4546121d16e7189715aef8ceb78ab58d59462720969318445f97b4301374d1&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd5.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;2a2c69dbb3b9fd90d7eb8e2f70be70b472d811cd4f3743ad9f5002d14b5c94cd&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd6.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;68de6815a89270c8eaf7832deedb8da098aad2ae5793cd2cd55dec3541ad28f2&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd7.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;b41a9714b1178ce428b15af0b6055cc204b39af2088ef3b371d8c36219eedd1e&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd8.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/ff-kbu/fff/tree/v0.3-generic/files/lib/freifunk/mesh-vpn/backbone fastd-backbone]] for more&lt;br /&gt;
&lt;br /&gt;
==== fastd-up ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#/bin/sh&lt;br /&gt;
/sbin/ip link set dev mesh-vpn up&lt;br /&gt;
/usr/sbin/batctl if add mesh-vpn&lt;br /&gt;
/usr/sbin/batctl gw_mode server&lt;br /&gt;
/sbin/ifconfig bat0 [DEINE IPv4 Addresse hier] netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ifconfig bat0:0 172.27.0.2 netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ip rule add from 172.27.0.0/18 table ffkbu&lt;br /&gt;
/sbin/ip route add 172.27.0.0/18 dev bat0 table ffkbu&lt;br /&gt;
/sbin/ip route flush cache&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fastd-up ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/fastd/mesh-vpn/fastd-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UDP-Queue Größe ===&lt;br /&gt;
Durch Broadcasts können können auf Supernodes kurzzeitig hohe Lastspitzen enstehen. In der aktuellen batman-adv-Version wird jedes Broadcast-Paket zudem 3x auf jedem Link versendet.&lt;br /&gt;
Die vergleichweise hohe Datenrate von 100MBit/s zwischen Supernodes bewirkt darüber hinaus, dass broadcast-Pakete mit 100MBit/s eingehen können, während sie gleichzeitig an alle Nodes gesendet werden müssen.&lt;br /&gt;
&lt;br /&gt;
Linux-Distributionen sehen per Default Queue-Größen im Bereich von 128 KB vor (http://www.cyberciti.biz/faq/linux-tcp-tuning/). Supernodes sind somit nicht in der Lage entsprechende Lastspitzen zu puffern und während Idle-Times zu versenden. Läuft die UDP-Queue über, so loggt fastd:&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
Jeder Log-Eintrag entspricht einem Paket, dass nicht enqueued werden konnte und damit verworfen wurde. Die Queue-Größen können via systctl angepasst werden (http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php). Auf fastd2 wird zur Zeit verwendet:&lt;br /&gt;
 #/etc/sysctl.conf&lt;br /&gt;
 net.core.rmem_max=83886080&lt;br /&gt;
 net.core.wmem_max=83886080&lt;br /&gt;
 net.core.rmem_default=83886080&lt;br /&gt;
 net.core.wmem_default=83886080&lt;br /&gt;
&lt;br /&gt;
Das System verfügt dadurch über 80MB Speicher für Queues. Per default stehen ebenfalls 80MB zur Verfügung. Die konfigurierten 80MB reichen aus, um die 100MBit/s Verbindung über mehrere Sekunden auszulasten und Lastspitzen abzufangen.&lt;br /&gt;
&lt;br /&gt;
== Backbone Netz (tinc) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install tinc bridge-utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/tinc/backbone&lt;br /&gt;
echo &amp;quot;backbone&amp;quot; &amp;gt;&amp;gt; /etc/tinc/nets.boot  # Dies sagt tinc, dass es das Netz &amp;quot;backbone&amp;quot; starten soll&lt;br /&gt;
cd /etc/tinc/backbone&lt;br /&gt;
# Public keys der anderen Teilnehmer:&lt;br /&gt;
git clone https://github.com/ff-kbu/bbkeys&lt;br /&gt;
ln -s bbkeys/ hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt noch des eigene Public/Private Keypaar. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Keys sollten in /etc/tinc/backbone gespeichert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Den Public-Key in den Namen des Supernodes umbenennen und nach bbkeys/ kopieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tincd -K&lt;br /&gt;
cp rsa_key.pub bbkeys/[supernodename]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bevor jetzt der pub-key gepushed werden kann, muss tinc noch gesagt werden, welche Adressen über diesen Node zu routen sind. &amp;lt;br /&amp;gt;&lt;br /&gt;
Also im .pub key:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subnet=172.27.255.X/32&lt;br /&gt;
Subnet=172.27.Y.0/21&lt;br /&gt;
Subnet=fdd3:5d16:b5dd:3::X/128&lt;br /&gt;
Subnet=2001:67c:20a0:b10Z::/64&lt;br /&gt;
&lt;br /&gt;
-----BEGIN RSA PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Und schliesslich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd bbkeys; git push;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
Name=[supernodename]&lt;br /&gt;
Device=/dev/net/tun&lt;br /&gt;
Mode=router&lt;br /&gt;
Compression=9&lt;br /&gt;
ConnectTo=paula&lt;br /&gt;
ConnectTo=paul&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc-up ====&lt;br /&gt;
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ifconfig \$INTERFACE 172.27.255.[Backbone IPv4 Adresse hier] netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
ip route add 172.27.255.0/24 dev backbone table ffkbu&lt;br /&gt;
ip route add default dev backbone table ffkbu&lt;br /&gt;
ip -6 addr add fdd3:5d16:b5dd:3::X/64 dev \$INTERFACE&lt;br /&gt;
ip -6 addr add 2001:67c:20a0:b10Y::1/128 dev \$INTERFACE&lt;br /&gt;
ip -6 route add default via fdd3:5d16:b5dd:3::3&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch diese Datei muss ausführbar gemacht werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/tinc/backbone/tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte der Ordner etwa so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/tinc/backbone# ls &lt;br /&gt;
bbkeys&lt;br /&gt;
hosts -&amp;gt; bbkeys&lt;br /&gt;
rsa_key.priv&lt;br /&gt;
rsa_key.pub&lt;br /&gt;
tinc.conf&lt;br /&gt;
tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
we need to set up policy based routing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;200 ffkbu&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
fastd-up und tinc-up erledigen den rest: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip rule ls&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip rule ls&lt;br /&gt;
0:      from all lookup local &lt;br /&gt;
32765:  from 172.27.0.0/18 lookup ffkbu &lt;br /&gt;
32766:  from all lookup main &lt;br /&gt;
32767:  from all lookup default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
default dev backbone  scope link &lt;br /&gt;
172.27.0.0/18 dev bat0  scope link &lt;br /&gt;
172.27.255.0/24 dev backbone  scope link &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv4 DHCP ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dhcp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/dhcp/dhcpd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;mesh.kbu.freifunk.net&amp;quot;;&lt;br /&gt;
option domain-name-servers 85.214.20.141, 213.73.91.35;&lt;br /&gt;
&lt;br /&gt;
default-lease-time 60;&lt;br /&gt;
max-lease-time 720;&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
&lt;br /&gt;
subnet 172.27.0.0 netmask 255.255.192.0 {&lt;br /&gt;
	range 172.27.X.10 172.27.Y.255;&lt;br /&gt;
	option routers 172.27.X.1;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install radvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/radvd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
interface bat0 {&lt;br /&gt;
	AdvSendAdvert on;&lt;br /&gt;
	AdvHomeAgentFlag off;&lt;br /&gt;
	MinRtrAdvInterval 10;&lt;br /&gt;
	MaxRtrAdvInterval 30;&lt;br /&gt;
	AdvOtherConfigFlag on;&lt;br /&gt;
	AdvSourceLLAddress off;&lt;br /&gt;
	AdvLinkMTU 1350; #1442 - fastd - batman-adv - See wiki for details&lt;br /&gt;
	prefix 2001:67c:20a0:b10Y::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
	prefix fdd3:5d16:b5dd::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/radvd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=[[Anycast_DNS]]=&lt;br /&gt;
{{:Anycast_DNS}}&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2722</id>
		<title>Supernode</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2722"/>
		<updated>2014-08-12T07:18:22Z</updated>

		<summary type="html">&lt;p&gt;Christof: /* Vorbereitungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
[[https://en.wikipedia.org/wiki/Supernode_%28networking%29 wikipedia-article]]&lt;br /&gt;
&lt;br /&gt;
Benötigte Software&lt;br /&gt;
&lt;br /&gt;
1) [[https://projects.universe-factory.net/projects/fastd fastd]] mesh-node-vpn&lt;br /&gt;
&lt;br /&gt;
2) [[https://github.com/ff-kbu/fastd-service vpn-key-upload]] todo: remove overhead (apache,ruby,sinatra ...), [https://en.wikipedia.org/wiki/KISS_principle kiss principle]]&lt;br /&gt;
not documented in here (todo)&lt;br /&gt;
&lt;br /&gt;
3) [[http://www.open-mesh.org/projects/open-mesh/wiki batman-adv]]&lt;br /&gt;
&lt;br /&gt;
4) [[http://www.tinc-vpn.org/ tinc]] mesh-backbone-vpn&lt;br /&gt;
&lt;br /&gt;
5) OS: debian wheezy (or whatever you like)&lt;br /&gt;
&lt;br /&gt;
Du benötigst ausserdem: &amp;lt;br /&amp;gt;&lt;br /&gt;
* einen fastd-private-key &lt;br /&gt;
* eine IPv4/IPv6 Adresse und ein Subnetz&lt;br /&gt;
* eine IPv4 Adresse für das Backbone-Netz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
In der /etc/sysctl.conf muss folgendes gesetzt sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
net.ipv4.ip_forward=1&lt;br /&gt;
net.ipv4.ip_no_pmtu_disc=1&lt;br /&gt;
net.ipv4.route.flush=1&lt;br /&gt;
net.ipv6.conf.all.forwarding=1&lt;br /&gt;
net.ipv6.conf.all.autoconf=0&lt;br /&gt;
net.ipv6.conf.all.accept_ra=0&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die /etc/sysctl.conf neu einlesen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysctl -p&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;deb http://repo.universe-factory.net/debian/ sid main&amp;quot; &amp;gt;&amp;gt;/etc/apt/sources.list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GPG-Key importieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key  16EF3F64CB201D9C&lt;br /&gt;
 gpg -a --export 16EF3F64CB201D9C | apt-key add -&lt;br /&gt;
 apt-get update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batman-adv ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install batman-adv-dkms&lt;br /&gt;
echo &amp;quot;batman-adv&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== fastd ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 apt-get install fastd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== fastd.conf ====&lt;br /&gt;
&amp;quot;[YOUR SECRET KEY HERE]&amp;quot; Sollte dabei durch den fastd-secret-key ersetzt werden (erfragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
# Log warnings and errors to stderr&lt;br /&gt;
#log level warn;&lt;br /&gt;
log level error;&lt;br /&gt;
&lt;br /&gt;
# Log everything to a log file&lt;br /&gt;
#log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level debug;&lt;br /&gt;
log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level warn;&lt;br /&gt;
&lt;br /&gt;
# Set the interface name&lt;br /&gt;
interface &amp;quot;mesh-vpn&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20&lt;br /&gt;
method &amp;quot;salsa2012+gmac&amp;quot;;&lt;br /&gt;
method &amp;quot;null&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Bind to a fixed port, IPv4 only&lt;br /&gt;
bind 0.0.0.0:10000;&lt;br /&gt;
&lt;br /&gt;
# Secret key generated by 'fastd --generate-key'&lt;br /&gt;
secret &amp;quot;[YOUR SECRET KEY HERE]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)&lt;br /&gt;
# (see MTU selection documentation)&lt;br /&gt;
mtu 1426;&lt;br /&gt;
&lt;br /&gt;
# Include peers from the directory 'peers'&lt;br /&gt;
include peers from &amp;quot;peers&amp;quot;;&lt;br /&gt;
include peers from &amp;quot;backbone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on up &amp;quot;./fastd-up&amp;quot;;&lt;br /&gt;
# on down &amp;quot;./fastd-down&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on establish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=up -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
on disestablish &amp;quot;&lt;br /&gt;
        NODE_ID=${PEER_NAME:0:12}&lt;br /&gt;
        /usr/bin/curl  -u vpn2:XXXXXX  -X POST -d viewpoint=fastd2 -d mac=$NODE_ID -d vpn_sw=fastd -d vpn_status=down -d ip=$PEER_ADDRESS http://register.kbu.freifunk.net/nodes/update_vpn_status &amp;amp;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweise: &lt;br /&gt;
* Username / Password stehen im Keypass. &lt;br /&gt;
* Viewpoint (hier: fastd2) anpassen&lt;br /&gt;
* Grundsätzlich wird die Node-ID nicht escpaed. Shell-code injections ist aber nicht möglich, da mon_serv nur node_ids der Form $mac_$key zulässt. &lt;br /&gt;
* Die Calls auf der Script sind synchron - Daher &amp;quot;&amp;amp;&amp;quot;. fastd blockiert solange das Script nicht terminiert ist. (Zumindest Stand 04/2014)&lt;br /&gt;
Ordnerstruktur anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/backbone&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Backbone ====&lt;br /&gt;
Backbone Keys einrichten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/fastd/mesh-vpn# ls backbone/&lt;br /&gt;
fastd1	fastd2	fastd3	fastd4	fastd5	fastd6	fastd7	fastd8&lt;br /&gt;
$:/etc/fastd/mesh-vpn# cat backbone/*&lt;br /&gt;
key &amp;quot;4f856d95bd596ac7724edca73a19e6e9d142b374df27166bb1a78e58785efc59&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;e1916b66c4f8a795e217877cf72607d952e796463c7024dd9a6a47ae2929bc10&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd2.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;d56181dfe9b5ac7cfe68a94c0ce406322a9924286a751673da0dcb28ad5218b0&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd3.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;9b3f65f99963343e2785c8c4fad65e70b73ee7e1205d63bd84f3e2decb53e621&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd4.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;6e4546121d16e7189715aef8ceb78ab58d59462720969318445f97b4301374d1&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd5.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;2a2c69dbb3b9fd90d7eb8e2f70be70b472d811cd4f3743ad9f5002d14b5c94cd&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd6.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;68de6815a89270c8eaf7832deedb8da098aad2ae5793cd2cd55dec3541ad28f2&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd7.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&lt;br /&gt;
key &amp;quot;b41a9714b1178ce428b15af0b6055cc204b39af2088ef3b371d8c36219eedd1e&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd8.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/ff-kbu/fff/tree/v0.3-generic/files/lib/freifunk/mesh-vpn/backbone fastd-backbone]] for more&lt;br /&gt;
&lt;br /&gt;
==== fastd-up ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#/bin/sh&lt;br /&gt;
/sbin/ip link set dev mesh-vpn up&lt;br /&gt;
/usr/sbin/batctl if add mesh-vpn&lt;br /&gt;
/usr/sbin/batctl gw_mode server&lt;br /&gt;
/sbin/ifconfig bat0 [DEINE IPv4 Addresse hier] netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ifconfig bat0:0 172.27.0.2 netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ip rule add from 172.27.0.0/18 table ffkbu&lt;br /&gt;
/sbin/ip route add 172.27.0.0/18 dev bat0 table ffkbu&lt;br /&gt;
/sbin/ip route flush cache&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fastd-up ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/fastd/mesh-vpn/fastd-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UDP-Queue Größe ===&lt;br /&gt;
Durch Broadcasts können können auf Supernodes kurzzeitig hohe Lastspitzen enstehen. In der aktuellen batman-adv-Version wird jedes Broadcast-Paket zudem 3x auf jedem Link versendet.&lt;br /&gt;
Die vergleichweise hohe Datenrate von 100MBit/s zwischen Supernodes bewirkt darüber hinaus, dass broadcast-Pakete mit 100MBit/s eingehen können, während sie gleichzeitig an alle Nodes gesendet werden müssen.&lt;br /&gt;
&lt;br /&gt;
Linux-Distributionen sehen per Default Queue-Größen im Bereich von 128 KB vor (http://www.cyberciti.biz/faq/linux-tcp-tuning/). Supernodes sind somit nicht in der Lage entsprechende Lastspitzen zu puffern und während Idle-Times zu versenden. Läuft die UDP-Queue über, so loggt fastd:&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
Jeder Log-Eintrag entspricht einem Paket, dass nicht enqueued werden konnte und damit verworfen wurde. Die Queue-Größen können via systctl angepasst werden (http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php). Auf fastd2 wird zur Zeit verwendet:&lt;br /&gt;
 #/etc/sysctl.conf&lt;br /&gt;
 net.core.rmem_max=83886080&lt;br /&gt;
 net.core.wmem_max=83886080&lt;br /&gt;
 net.core.rmem_default=83886080&lt;br /&gt;
 net.core.wmem_default=83886080&lt;br /&gt;
&lt;br /&gt;
Das System verfügt dadurch über 80MB Speicher für Queues. Per default stehen ebenfalls 80MB zur Verfügung. Die konfigurierten 80MB reichen aus, um die 100MBit/s Verbindung über mehrere Sekunden auszulasten und Lastspitzen abzufangen.&lt;br /&gt;
&lt;br /&gt;
== Backbone Netz (tinc) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install tinc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/tinc/backbone&lt;br /&gt;
echo &amp;quot;backbone&amp;quot; &amp;gt;&amp;gt; /etc/tinc/nets.boot  # Dies sagt tinc, dass es das Netz &amp;quot;backbone&amp;quot; starten soll&lt;br /&gt;
cd /etc/tinc/backbone&lt;br /&gt;
# Public keys der anderen Teilnehmer:&lt;br /&gt;
git clone https://github.com/ff-kbu/bbkeys&lt;br /&gt;
ln -s bbkeys/ hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt noch des eigene Public/Private Keypaar. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Keys sollten in /etc/tinc/backbone gespeichert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Den Public-Key in den Namen des Supernodes umbenennen und nach bbkeys/ kopieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tincd -K&lt;br /&gt;
cp rsa_key.pub bbkeys/[supernodename]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bevor jetzt der pub-key gepushed werden kann, muss tinc noch gesagt werden, welche Adressen über diesen Node zu routen sind. &amp;lt;br /&amp;gt;&lt;br /&gt;
Also im .pub key:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subnet=172.27.255.X/32&lt;br /&gt;
Subnet=172.27.Y.0/21&lt;br /&gt;
Subnet=fdd3:5d16:b5dd:3::X/128&lt;br /&gt;
Subnet=2001:67c:20a0:b10Z::/64&lt;br /&gt;
&lt;br /&gt;
-----BEGIN RSA PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Und schliesslich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd bbkeys; git push;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
Name=[supernodename]&lt;br /&gt;
Device=/dev/net/tun&lt;br /&gt;
Mode=router&lt;br /&gt;
Compression=9&lt;br /&gt;
ConnectTo=paula&lt;br /&gt;
ConnectTo=paul&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc-up ====&lt;br /&gt;
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ifconfig \$INTERFACE 172.27.255.[Backbone IPv4 Adresse hier] netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
ip route add 172.27.255.0/24 dev backbone table ffkbu&lt;br /&gt;
ip route add default dev backbone table ffkbu&lt;br /&gt;
ip -6 addr add fdd3:5d16:b5dd:3::X/64 dev \$INTERFACE&lt;br /&gt;
ip -6 addr add 2001:67c:20a0:b10Y::1/128 dev \$INTERFACE&lt;br /&gt;
ip -6 route add default via fdd3:5d16:b5dd:3::3&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch diese Datei muss ausführbar gemacht werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/tinc/backbone/tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte der Ordner etwa so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/tinc/backbone# ls &lt;br /&gt;
bbkeys&lt;br /&gt;
hosts -&amp;gt; bbkeys&lt;br /&gt;
rsa_key.priv&lt;br /&gt;
rsa_key.pub&lt;br /&gt;
tinc.conf&lt;br /&gt;
tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
we need to set up policy based routing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;200 ffkbu&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
fastd-up und tinc-up erledigen den rest: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip rule ls&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip rule ls&lt;br /&gt;
0:      from all lookup local &lt;br /&gt;
32765:  from 172.27.0.0/18 lookup ffkbu &lt;br /&gt;
32766:  from all lookup main &lt;br /&gt;
32767:  from all lookup default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
default dev backbone  scope link &lt;br /&gt;
172.27.0.0/18 dev bat0  scope link &lt;br /&gt;
172.27.255.0/24 dev backbone  scope link &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv4 DHCP ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dhcp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/dhcp/dhcpd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;mesh.kbu.freifunk.net&amp;quot;;&lt;br /&gt;
option domain-name-servers 85.214.20.141, 213.73.91.35;&lt;br /&gt;
&lt;br /&gt;
default-lease-time 60;&lt;br /&gt;
max-lease-time 720;&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
&lt;br /&gt;
subnet 172.27.0.0 netmask 255.255.192.0 {&lt;br /&gt;
	range 172.27.X.10 172.27.Y.255;&lt;br /&gt;
	option routers 172.27.X.1;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install radvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/radvd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
interface bat0 {&lt;br /&gt;
	AdvSendAdvert on;&lt;br /&gt;
	AdvHomeAgentFlag off;&lt;br /&gt;
	MinRtrAdvInterval 10;&lt;br /&gt;
	MaxRtrAdvInterval 30;&lt;br /&gt;
	AdvOtherConfigFlag on;&lt;br /&gt;
	AdvSourceLLAddress off;&lt;br /&gt;
	AdvLinkMTU 1350; #1442 - fastd - batman-adv - See wiki for details&lt;br /&gt;
	prefix 2001:67c:20a0:b10Y::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
	prefix fdd3:5d16:b5dd::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/radvd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=[[Anycast_DNS]]=&lt;br /&gt;
{{:Anycast_DNS}}&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2623</id>
		<title>Supernode</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2623"/>
		<updated>2014-03-07T12:25:07Z</updated>

		<summary type="html">&lt;p&gt;Christof: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
[[https://en.wikipedia.org/wiki/Supernode_%28networking%29 wikipedia-article]]&lt;br /&gt;
&lt;br /&gt;
Benötigte Software&lt;br /&gt;
&lt;br /&gt;
1) [[https://projects.universe-factory.net/projects/fastd fastd]] mesh-node-vpn&lt;br /&gt;
&lt;br /&gt;
2) [[https://github.com/ff-kbu/fastd-service vpn-key-upload]] todo: remove overhead (apache,ruby,sinatra ...), [https://en.wikipedia.org/wiki/KISS_principle kiss principle]]&lt;br /&gt;
not documented in here (todo)&lt;br /&gt;
&lt;br /&gt;
3) [[http://www.open-mesh.org/projects/open-mesh/wiki batman-adv]]&lt;br /&gt;
&lt;br /&gt;
4) [[http://www.tinc-vpn.org/ tinc]] mesh-backbone-vpn&lt;br /&gt;
&lt;br /&gt;
5) OS: debian wheezy (or whatever you like)&lt;br /&gt;
&lt;br /&gt;
Du benötigst ausserdem: &amp;lt;br /&amp;gt;&lt;br /&gt;
* einen fastd-private-key &lt;br /&gt;
* eine IPv4/IPv6 Adresse und ein Subnetz&lt;br /&gt;
* eine IPv4 Adresse für das Backbone-Netz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
In der /etc/sysctl.conf muss folgendes gesetzt sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
net.ipv4.ip_forward=1&lt;br /&gt;
net.ipv4.ip_no_pmtu_disc=1&lt;br /&gt;
net.ipv4.route.flush=1&lt;br /&gt;
net.ipv6.conf.all.forwarding=1&lt;br /&gt;
net.ipv6.conf.all.autoconf=0&lt;br /&gt;
net.ipv6.conf.all.accept_ra=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die /etc/sysctl.conf neu einlesen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysctl -p&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb http://repo.universe-factory.net/debian/ sid main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GPG-Key importieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key  AB7A88C5B89033D8&lt;br /&gt;
 gpg -a --export AB7A88C5B89033D8 | sudo apt-key add -&lt;br /&gt;
 apt-get update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Batman-adv ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install batman-adv-dkms&lt;br /&gt;
echo &amp;quot;batman-adv&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== fastd ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 apt-get install fastd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== fastd.conf ====&lt;br /&gt;
&amp;quot;[YOUR SECRET KEY HERE]&amp;quot; Sollte dabei durch den fastd-secret-key ersetzt werden (erfragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
# Log warnings and errors to stderr&lt;br /&gt;
#log level warn;&lt;br /&gt;
log level error;&lt;br /&gt;
&lt;br /&gt;
# Log everything to a log file&lt;br /&gt;
#log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level debug;&lt;br /&gt;
log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level warn;&lt;br /&gt;
&lt;br /&gt;
# Set the interface name&lt;br /&gt;
interface &amp;quot;mesh-vpn&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20&lt;br /&gt;
method &amp;quot;xsalsa20-poly1305&amp;quot;;&lt;br /&gt;
method &amp;quot;null&amp;quot;;&lt;br /&gt;
#method &amp;quot;aes128-gcm&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Bind to a fixed port, IPv4 only&lt;br /&gt;
bind 0.0.0.0:10000;&lt;br /&gt;
&lt;br /&gt;
# Secret key generated by 'fastd --generate-key'&lt;br /&gt;
secret &amp;quot;[YOUR SECRET KEY HERE]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)&lt;br /&gt;
# (see MTU selection documentation)&lt;br /&gt;
mtu 1426;&lt;br /&gt;
&lt;br /&gt;
# Include peers from the directory 'peers'&lt;br /&gt;
include peers from &amp;quot;peers&amp;quot;;&lt;br /&gt;
include peers from &amp;quot;backbone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on up &amp;quot;./fastd-up&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ordnerstruktur anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/backbone&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Backbone ====&lt;br /&gt;
Backbone Keys einrichten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/fastd/mesh-vpn# ls backbone/&lt;br /&gt;
fastd1  fastd2  fastd3  fastd4&lt;br /&gt;
$:/etc/fastd/mesh-vpn# cat backbone/*&lt;br /&gt;
key &amp;quot;4f856d95bd596ac7724edca73a19e6e9d142b374df27166bb1a78e58785efc59&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
key &amp;quot;e1916b66c4f8a795e217877cf72607d952e796463c7024dd9a6a47ae2929bc10&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd2.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
key &amp;quot;d56181dfe9b5ac7cfe68a94c0ce406322a9924286a751673da0dcb28ad5218b0&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd3.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
key &amp;quot;9b3f65f99963343e2785c8c4fad65e70b73ee7e1205d63bd84f3e2decb53e621&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/ff-kbu/fff/tree/v0.3-generic/files/lib/freifunk/mesh-vpn/backbone fastd-backbone]] for more&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== fastd-up ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#/bin/sh&lt;br /&gt;
/sbin/ip link set dev mesh-vpn up&lt;br /&gt;
/usr/sbin/batctl if add mesh-vpn&lt;br /&gt;
/usr/sbin/batctl gw_mode server&lt;br /&gt;
/sbin/ifconfig bat0 [DEINE IPv4 Addresse hier] netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ip rule add from 172.27.0.0/18 table ffkbu&lt;br /&gt;
/sbin/ip route add 172.27.0.0/18 dev bat0 table ffkbu&lt;br /&gt;
/sbin/ip route flush cache&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fastd-up ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/fastd/mesh-vpn/fastd-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UDP-Queue Größe ===&lt;br /&gt;
Durch Broadcasts können können auf Supernodes kurzzeitig hohe Lastspitzen enstehen. In der aktuellen batman-adv-Version wird jedes Broadcast-Paket zudem 3x auf jedem Link versendet.&lt;br /&gt;
Die vergleichweise hohe Datenrate von 100MBit/s zwischen Supernodes bewirkt darüber hinaus, dass broadcast-Pakete mit 100MBit/s eingehen können, während sie gleichzeitig an alle Nodes gesendet werden müssen.&lt;br /&gt;
&lt;br /&gt;
Linux-Distributionen sehen per Default Queue-Größen im Bereich von 128 KB vor (http://www.cyberciti.biz/faq/linux-tcp-tuning/). Supernodes sind somit nicht in der Lage entsprechende Lastspitzen zu puffern und während Idle-Times zu versenden. Läuft die UDP-Queue über, so loggt fastd:&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
Jeder Log-Eintrag entspricht einem Paket, dass nicht enqueued werden konnte und damit verworfen wurde. Die Queue-Größen können via systctl angepasst werden (http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php). Auf fastd2 wird zur Zeit verwendet:&lt;br /&gt;
 #/etc/sysctl.conf&lt;br /&gt;
 net.core.rmem_max=83886080&lt;br /&gt;
 net.core.wmem_max=83886080&lt;br /&gt;
 net.core.rmem_default=83886080&lt;br /&gt;
 net.core.wmem_default=83886080&lt;br /&gt;
&lt;br /&gt;
Das System verfügt dadurch über 80MB Speicher für Queues. Per default stehen ebenfalls 80MB zur Verfügung. Die konfigurierten 80MB reichen aus, um die 100MBit/s Verbindung über mehrere Sekunden auszulasten und Lastspitzen abzufangen.&lt;br /&gt;
&lt;br /&gt;
== Backbone Netz (tinc) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install tinc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/tinc/backbone&lt;br /&gt;
echo &amp;quot;backbone&amp;quot; &amp;gt;&amp;gt; /etc/tinc/nets.boot  # Dies sagt tinc, dass es das Netz &amp;quot;backbone&amp;quot; starten soll&lt;br /&gt;
cd /etc/tinc/backbone&lt;br /&gt;
# Public keys der anderen Teilnehmer:&lt;br /&gt;
git clone https://github.com/ff-kbu/bbkeys&lt;br /&gt;
ln -s bbkeys/ hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt noch des eigene Public/Private Keypaar. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Keys sollten in /etc/tinc/backbone gespeichert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Den Public-Key in den Namen des Supernodes umbenennen und nach bbkeys/ kopieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tincd -K&lt;br /&gt;
cp rsa_key.pub bbkeys/[supernodename]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bevor jetzt der pub-key gepushed werden kann, muss tinc noch gesagt werden, welche Adressen über diesen Node zu routen sind:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subnet=172.27.255.X/32&lt;br /&gt;
Subnet=172.27.Y.0/21&lt;br /&gt;
Subnet=fdd3:5d16:b5dd:3::X/128&lt;br /&gt;
Subnet=2001:67c:20a0:b10Z::/64&lt;br /&gt;
&lt;br /&gt;
-----BEGIN RSA PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Und schliesslich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd bbkeys; git push;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
Name=[supernodename]&lt;br /&gt;
Device=/dev/net/tun&lt;br /&gt;
Mode=router&lt;br /&gt;
Compression=9&lt;br /&gt;
ConnectTo=paula&lt;br /&gt;
ConnectTo=paul&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc-up ====&lt;br /&gt;
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ifconfig \$INTERFACE 172.27.255.[Backbone IPv4 Adresse hier] netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
ip route add 172.27.255.0/24 dev backbone table ffkbu&lt;br /&gt;
ip route add default dev backbone table ffkbu&lt;br /&gt;
ip -6 addr add fdd3:5d16:b5dd:3::X/64 dev \$INTERFACE&lt;br /&gt;
ip -6 addr add 2001:67c:20a0:b10Y::1/128 dev \$INTERFACE&lt;br /&gt;
ip -6 route add default via fdd3:5d16:b5dd:3::3&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch diese Datei muss ausführbar gemacht werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/tinc/backbone/tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte der Ordner etwa so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/tinc/backbone# ls &lt;br /&gt;
bbkeys&lt;br /&gt;
hosts -&amp;gt; bbkeys&lt;br /&gt;
rsa_key.priv&lt;br /&gt;
rsa_key.pub&lt;br /&gt;
tinc.conf&lt;br /&gt;
tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
we need to set up policy based routing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;200 ffkbu&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
fastd-up und tinc-up erledigen den rest: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip rule ls&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip rule ls&lt;br /&gt;
0:      from all lookup local &lt;br /&gt;
32765:  from 172.27.0.0/18 lookup ffkbu &lt;br /&gt;
32766:  from all lookup main &lt;br /&gt;
32767:  from all lookup default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
default dev backbone  scope link &lt;br /&gt;
172.27.0.0/18 dev bat0  scope link &lt;br /&gt;
172.27.255.0/24 dev backbone  scope link &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv4 DHCP ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dhcp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/dhcp/dhcpd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;mesh.kbu.freifunk.net&amp;quot;;&lt;br /&gt;
option domain-name-servers 85.214.20.141, 213.73.91.35;&lt;br /&gt;
&lt;br /&gt;
default-lease-time 60;&lt;br /&gt;
max-lease-time 720;&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
&lt;br /&gt;
subnet 172.27.0.0 netmask 255.255.192.0 {&lt;br /&gt;
	range 172.27.X.10 172.27.Y.255;&lt;br /&gt;
	option routers 172.27.X.1;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install radvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/radvd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
interface bat0 {&lt;br /&gt;
	AdvSendAdvert on;&lt;br /&gt;
	AdvHomeAgentFlag off;&lt;br /&gt;
	MinRtrAdvInterval 10;&lt;br /&gt;
	MaxRtrAdvInterval 30;&lt;br /&gt;
	AdvOtherConfigFlag on;&lt;br /&gt;
	AdvSourceLLAddress off;&lt;br /&gt;
	AdvLinkMTU 1350; #1442 - fastd - batman-adv - See wiki for details&lt;br /&gt;
	prefix 2001:67c:20a0:b10Y::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
	prefix fdd3:5d16:b5dd::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/radvd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2621</id>
		<title>Supernode</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Supernode&amp;diff=2621"/>
		<updated>2014-03-06T08:30:27Z</updated>

		<summary type="html">&lt;p&gt;Christof: Reihenfolge apt-Paket angepasst das repos ist auch für batman notwendig&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
[[https://en.wikipedia.org/wiki/Supernode_%28networking%29 wikipedia-article]]&lt;br /&gt;
&lt;br /&gt;
Benötigte Software&lt;br /&gt;
&lt;br /&gt;
1) [[https://projects.universe-factory.net/projects/fastd fastd]] mesh-node-vpn&lt;br /&gt;
&lt;br /&gt;
2) [[https://github.com/ff-kbu/fastd-service vpn-key-upload]] todo: remove overhead (apache,ruby,sinatra ...), [https://en.wikipedia.org/wiki/KISS_principle kiss principle]]&lt;br /&gt;
not documented in here (todo)&lt;br /&gt;
&lt;br /&gt;
3) [[http://www.open-mesh.org/projects/open-mesh/wiki batman-adv]]&lt;br /&gt;
&lt;br /&gt;
4) [[http://www.tinc-vpn.org/ tinc]] mesh-backbone-vpn&lt;br /&gt;
&lt;br /&gt;
5) OS: debian wheezy (or whatever you like)&lt;br /&gt;
&lt;br /&gt;
Du benötigst ausserdem: &amp;lt;br /&amp;gt;&lt;br /&gt;
* einen fastd-private-key &lt;br /&gt;
* eine IPv4/IPv6 Adresse und ein Subnetz&lt;br /&gt;
* eine IPv4 Adresse für das Backbone-Netz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
In der /etc/sysctl.conf muss folgendes gesetzt sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
net.ipv4.ip_forward=1&lt;br /&gt;
net.ipv4.ip_no_pmtu_disc=1&lt;br /&gt;
net.ipv4.route.flush=1&lt;br /&gt;
net.ipv6.conf.all.forwarding=1&lt;br /&gt;
net.ipv6.conf.all.autoconf=0&lt;br /&gt;
net.ipv6.conf.all.accept_ra=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die /etc/sysctl.conf neu einlesen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysctl -p&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb http://repo.universe-factory.net/debian/ sid main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GPG-Key importieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key  AB7A88C5B89033D8&lt;br /&gt;
 gpg -a --export AB7A88C5B89033D8 | sudo apt-key add -&lt;br /&gt;
 apt-get update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Batman-adv ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install batman-adv-dkms&lt;br /&gt;
echo &amp;quot;batman-adv&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== fastd ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 apt-get install fastd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== fastd.conf ====&lt;br /&gt;
&amp;quot;[YOUR SECRET KEY HERE]&amp;quot; Sollte dabei durch den fastd-secret-key ersetzt werden (erfragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
# Log warnings and errors to stderr&lt;br /&gt;
#log level warn;&lt;br /&gt;
log level error;&lt;br /&gt;
&lt;br /&gt;
# Log everything to a log file&lt;br /&gt;
#log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level debug;&lt;br /&gt;
log to &amp;quot;/var/log/fastd-mesh-vpn.log&amp;quot; level warn;&lt;br /&gt;
&lt;br /&gt;
# Set the interface name&lt;br /&gt;
interface &amp;quot;mesh-vpn&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20&lt;br /&gt;
method &amp;quot;xsalsa20-poly1305&amp;quot;;&lt;br /&gt;
method &amp;quot;null&amp;quot;;&lt;br /&gt;
#method &amp;quot;aes128-gcm&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Bind to a fixed port, IPv4 only&lt;br /&gt;
bind 0.0.0.0:10000;&lt;br /&gt;
&lt;br /&gt;
# Secret key generated by 'fastd --generate-key'&lt;br /&gt;
secret &amp;quot;[YOUR SECRET KEY HERE]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)&lt;br /&gt;
# (see MTU selection documentation)&lt;br /&gt;
mtu 1426;&lt;br /&gt;
&lt;br /&gt;
# Include peers from the directory 'peers'&lt;br /&gt;
include peers from &amp;quot;peers&amp;quot;;&lt;br /&gt;
include peers from &amp;quot;backbone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
on up &amp;quot;./fastd-up&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ordnerstruktur anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/backbone&lt;br /&gt;
mkdir /etc/fastd/mesh-vpn/peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Backbone ====&lt;br /&gt;
Backbone Keys einrichten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/fastd/mesh-vpn# ls backbone/&lt;br /&gt;
fastd1  fastd2  fastd3  fastd4&lt;br /&gt;
$:/etc/fastd/mesh-vpn# cat backbone/*&lt;br /&gt;
key &amp;quot;4f856d95bd596ac7724edca73a19e6e9d142b374df27166bb1a78e58785efc59&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
key &amp;quot;e1916b66c4f8a795e217877cf72607d952e796463c7024dd9a6a47ae2929bc10&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd2.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
key &amp;quot;d56181dfe9b5ac7cfe68a94c0ce406322a9924286a751673da0dcb28ad5218b0&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd3.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
key &amp;quot;9b3f65f99963343e2785c8c4fad65e70b73ee7e1205d63bd84f3e2decb53e621&amp;quot;;&lt;br /&gt;
remote ipv4 &amp;quot;fastd1.kbu.freifunk.net&amp;quot; port 10000;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/ff-kbu/fff/tree/v0.3-generic/files/lib/freifunk/mesh-vpn/backbone fastd-backbone]] for more&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== fastd-up ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/fastd/mesh-vpn/fastd-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#/bin/sh&lt;br /&gt;
/sbin/ip link set dev mesh-vpn up&lt;br /&gt;
/usr/sbin/batctl if add mesh-vpn&lt;br /&gt;
/usr/sbin/batctl gw_mode server&lt;br /&gt;
/sbin/ifconfig bat0 [DEINE IPv4 Addresse hier] netmask 255.255.192.0 up&lt;br /&gt;
&lt;br /&gt;
/sbin/ip rule add from 172.27.0.0/18 table ffkbu&lt;br /&gt;
/sbin/ip route add 172.27.0.0/18 dev bat0 table ffkbu&lt;br /&gt;
/sbin/ip route flush cache&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fastd-up ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/fastd/mesh-vpn/fastd-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UDP-Queue Größe ===&lt;br /&gt;
Durch Broadcasts können können auf Supernodes kurzzeitig hohe Lastspitzen enstehen. In der aktuellen batman-adv-Version wird jedes Broadcast-Paket zudem 3x auf jedem Link versendet.&lt;br /&gt;
Die vergleichweise hohe Datenrate von 100MBit/s zwischen Supernodes bewirkt darüber hinaus, dass broadcast-Pakete mit 100MBit/s eingehen können, während sie gleichzeitig an alle Nodes gesendet werden müssen.&lt;br /&gt;
&lt;br /&gt;
Linux-Distributionen sehen per Default Queue-Größen im Bereich von 128 KB vor (http://www.cyberciti.biz/faq/linux-tcp-tuning/). Supernodes sind somit nicht in der Lage entsprechende Lastspitzen zu puffern und während Idle-Times zu versenden. Läuft die UDP-Queue über, so loggt fastd:&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
 2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable&lt;br /&gt;
Jeder Log-Eintrag entspricht einem Paket, dass nicht enqueued werden konnte und damit verworfen wurde. Die Queue-Größen können via systctl angepasst werden (http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php). Auf fastd2 wird zur Zeit verwendet:&lt;br /&gt;
 #/etc/sysctl.conf&lt;br /&gt;
 net.core.rmem_max=83886080&lt;br /&gt;
 net.core.wmem_max=83886080&lt;br /&gt;
 net.core.rmem_default=83886080&lt;br /&gt;
 net.core.wmem_default=83886080&lt;br /&gt;
&lt;br /&gt;
Das System verfügt dadurch über 80MB Speicher für Queues. Per default stehen ebenfalls 80MB zur Verfügung. Die konfigurierten 80MB reichen aus, um die 100MBit/s Verbindung über mehrere Sekunden auszulasten und Lastspitzen abzufangen.&lt;br /&gt;
&lt;br /&gt;
== Backbone Netz (tinc) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install tinc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/tinc/backbone&lt;br /&gt;
echo &amp;quot;backbone&amp;quot; &amp;gt;&amp;gt; /etc/tinc/nets.boot  # Dies sagt tinc, dass es das Netz &amp;quot;backbone&amp;quot; starten soll&lt;br /&gt;
cd /etc/tinc/backbone&lt;br /&gt;
# Public keys der anderen Teilnehmer:&lt;br /&gt;
git clone https://github.com/ff-kbu/bbkeys&lt;br /&gt;
ln -s bbkeys/ hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt noch des eigene Public/Private Keypaar. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Keys sollten in /etc/tinc/backbone gespeichert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Den Public-Key in den Namen des Supernodes umbenennen und nach bbkeys/ kopieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tinc -K&lt;br /&gt;
cp rsa_key.pub bbkeys/[supernodename]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bevor jetzt der pub-key gepushed werden kann, muss tinc noch gesagt werden, welche Adressen über diesen Node zu routen sind:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subnet=172.27.255.X/32&lt;br /&gt;
Subnet=172.27.Y.0/21&lt;br /&gt;
Subnet=fdd3:5d16:b5dd:3::X/128&lt;br /&gt;
Subnet=2001:67c:20a0:b10Z::/64&lt;br /&gt;
&lt;br /&gt;
-----BEGIN RSA PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Und schliesslich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd bbkeys; git push;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
Name=[supernodename]&lt;br /&gt;
Device=/dev/net/tun&lt;br /&gt;
Mode=router&lt;br /&gt;
Compression=9&lt;br /&gt;
ConnectTo=paula&lt;br /&gt;
ConnectTo=paul&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tinc-up ====&lt;br /&gt;
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/tinc/backbone/tinc-up &amp;lt;&amp;lt; EOF&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ifconfig \$INTERFACE 172.27.255.[Backbone IPv4 Adresse hier] netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
ip route add 172.27.255.0/24 dev backbone table ffkbu&lt;br /&gt;
ip route add default dev backbone table ffkbu&lt;br /&gt;
ip -6 addr add fdd3:5d16:b5dd:3::X/64 dev \$INTERFACE&lt;br /&gt;
ip -6 addr add 2001:67c:20a0:b10Y::1/128 dev \$INTERFACE&lt;br /&gt;
ip -6 route add default via fdd3:5d16:b5dd:3::3&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch diese Datei muss ausführbar gemacht werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/tinc/backbone/tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte der Ordner etwa so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$:/etc/tinc/backbone# ls &lt;br /&gt;
bbkeys&lt;br /&gt;
hosts -&amp;gt; bbkeys&lt;br /&gt;
rsa_key.priv&lt;br /&gt;
rsa_key.pub&lt;br /&gt;
tinc.conf&lt;br /&gt;
tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
we need to set up policy based routing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;200 ffkbu&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
fastd-up und tinc-up erledigen den rest: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip rule ls&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip rule ls&lt;br /&gt;
0:      from all lookup local &lt;br /&gt;
32765:  from 172.27.0.0/18 lookup ffkbu &lt;br /&gt;
32766:  from all lookup main &lt;br /&gt;
32767:  from all lookup default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip route list table ffkbu&lt;br /&gt;
default dev backbone  scope link &lt;br /&gt;
172.27.0.0/18 dev bat0  scope link &lt;br /&gt;
172.27.255.0/24 dev backbone  scope link &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv4 DHCP ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dhcp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/dhcp/dhcpd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;mesh.kbu.freifunk.net&amp;quot;;&lt;br /&gt;
option domain-name-servers 85.214.20.141, 213.73.91.35;&lt;br /&gt;
&lt;br /&gt;
default-lease-time 60;&lt;br /&gt;
max-lease-time 720;&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
&lt;br /&gt;
subnet 172.27.0.0 netmask 255.255.192.0 {&lt;br /&gt;
	range 172.27.X.10 172.27.Y.255;&lt;br /&gt;
	option routers 172.27.X.1;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install radvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/radvd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
interface bat0 {&lt;br /&gt;
	AdvSendAdvert on;&lt;br /&gt;
	AdvHomeAgentFlag off;&lt;br /&gt;
	MinRtrAdvInterval 10;&lt;br /&gt;
	MaxRtrAdvInterval 30;&lt;br /&gt;
	AdvOtherConfigFlag on;&lt;br /&gt;
	AdvSourceLLAddress off;&lt;br /&gt;
	AdvLinkMTU 1350; #1442 - fastd - batman-adv - See wiki for details&lt;br /&gt;
	prefix 2001:67c:20a0:b10Y::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
	prefix fdd3:5d16:b5dd::/64 {&lt;br /&gt;
		AdvOnLink on;&lt;br /&gt;
		AdvAutonomous on;&lt;br /&gt;
		AdvRouterAddr on;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/radvd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Architektur&amp;diff=2470</id>
		<title>Architektur</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Architektur&amp;diff=2470"/>
		<updated>2013-05-26T23:58:05Z</updated>

		<summary type="html">&lt;p&gt;Christof: /* Kurzzusammenfassung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #F00&amp;quot;&amp;gt;'''Hinweis'''&amp;lt;/span&amp;gt;: Dieser Artikel beschreibt das Freifunk-Netz aus konzeptioneller Sicht und erklärt viele, tiefe Details. Um einfach mitzumachen musst Du nicht alles davon verstehen - wenn Du Interesse hast, lese einfach weiter :-).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kurzzusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Freifunk-KBU verfolgt die [[Netzwerk-Konfiguration#Komplettes_Bridging | Komplettes Bridging]]-Strategie: Das gesamte KBU-Netz bildet eine Broadcast-Domäne. Fastd-Server verbinden als Supernodes WLAN-Mesh-Partionen. IP-Adressen werden an Clients per DHCP und radvd vergeben. Nodes erhalten keine IPv4 aber eine IPv6 Adresse. Ein routed Backbone-VPN (tinc) verbindet die Supernodes und ermöglicht Routing zum Exit.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Dieser Artikel beschreibt die Architektur des in Köln, Bonn und Umgebung verwendeten Freifunk-Netzes. Dabei wird insbesondere auf die Zusammenhänge zwischen Server-Konfiguration und Firmware-Eigenschaften eingegangen. Hierbei gibt die Architektur vor, wie Nodes, Supernodes, Server und Klienten konfiguriert werden müssen. &lt;br /&gt;
&lt;br /&gt;
Im Rahmen der Einleitung wird die verwendete Strategie (''komplettes Bridging'') dargelegt. Die folgenden Absätze (OSI-2: Bridging, OSI-3: Routing) gehen detailliert auf die verschiedenen Schichten des Netzes ein. Der letzte Absatz gibt einen Ausblick auf mögliche Änderung, die in Zukunft einziehen können.&lt;br /&gt;
&lt;br /&gt;
=== Strategie ===&lt;br /&gt;
Das Netz besteht aus Klienten, Nodes und Supernodes. Die verwendete [[Netzwerk-Konfiguration#Komplettes_Bridging | Komplettes Bridging Strategie]] sieht vor, dass das komplette Netz ein einziges zusammenhängendes OSI-2 Segment bildet. Dieses Segment verbindet alle Teilnehmer. Dadurch sind je 2 Klienten in verschiedenen Teilen des Netzes immer über eine zu Grunde liegende Infrastruktur via &amp;quot;Ethernet&amp;quot; (WLAN / LAN) miteinander verbunden. Für die Infrastruktur wird batman-adv (http://www.open-mesh.org/) verwendet - sie wird als hierachisches [[Wikipedia:Peer-to-Peer | P2P-Netz]] realisiert. Somit: &amp;lt;br /&amp;gt;&lt;br /&gt;
''Daten zwischen Netzteilnehmer werden als Frames switched, das Netz bildet eine große Broadcast-/Link-Local-Multicast-Domäne.''&lt;br /&gt;
&lt;br /&gt;
=== Supernodes ===&lt;br /&gt;
[[Datei:Super-node-overview.png|thumb|300px|right|Abb. 1]]&lt;br /&gt;
[[supernode|Supernodes]] (auch: fastd-Server) sind Nodes, die VPN-Verbindungen von Nodes entgegen nehmen. Ein Supernode ist im Internet erreichbar, d.h. Nodes können VPN-Verbindungen dorthin initiieren, auch wenn sie sich z.B. hinter einem [[Wikipedia:Network_Address_Translation | NAT]] befinden. Supernodes verfügen über eine gute Internet-Anbindung (100MBit/s). Jeder Node hält typischerweise VPN-Verbindungen zu zwei verschiedenen Supernodes. Adressen und VPN-Schlüssel der Supernodes sind fest in der Node-Firmware verdrahtet.&lt;br /&gt;
&lt;br /&gt;
Supernodes werden beispielsweise auf dedizierten Servern ohne WLAN-Konnektivität betrieben.&lt;br /&gt;
Abb. 1 zeigt die Kommunikation zwischen Klienten, Nodes und Supernodes. Die Nodes A und B sind mit den Supernodes fastd1 und fastd2 verbunden. Über die eingezeichneten Verbindungen werden batman-adv Frames versendet. Der Klient ist im Infrastruktur-Netz an Node A eingebucht - es werden gewöhnliche Wireless-Lan-Frames verwendet. (''kein batman-adv'')&lt;br /&gt;
&lt;br /&gt;
=== Nodes ===&lt;br /&gt;
[[Datei:4.1-All-Bridging.png|thumb|300px|right|Abb. 2]]&lt;br /&gt;
Auf den Nodes existieren verschiedene Netze, die teilweise mit einander verbunden sind (Abb. 2). Jeder Node spannt dabei zwei Wireless-Lan-Netze auf und ggf. eine VPN-Verbindung auf.&lt;br /&gt;
&lt;br /&gt;
* ''wlan0'' wird als &amp;quot;Master&amp;quot;-Netz betrieben&lt;br /&gt;
* ''wlan1'' arbeitet als &amp;quot;Ad-Hoc&amp;quot;-Netz &lt;br /&gt;
* ''tap0'' ist das VPN-Interface. &lt;br /&gt;
&lt;br /&gt;
wlan1 und tap0 sind hierbei dem ''bat0'' Interface hinzugefügt. &lt;br /&gt;
&lt;br /&gt;
''Hinweis'': Aus technischen Gründen (u.a. vlan-Fähigkeit einzelner Geräte), weichen Interface-Namen in der Node-Firmware z.T. ab.&lt;br /&gt;
&lt;br /&gt;
== OSI-2: Data-Link-Layer ==&lt;br /&gt;
[[Datei:Osi-2.png|thumb|350px|right|Abb. 3]]&lt;br /&gt;
&lt;br /&gt;
Die komplettes Bridging Strategie sieht vor, dass alle Stationen zu einem OSI-2 Segment zusammen gefasst werden. Hierbei werden LAN, WLAN und VPN-Verbindungen via bridging verbunden. In diesem Absatz wird die Konfiguration der verschiedenen Komponenten des Segements erläutert. Abb. 3 illustriert das Segment. Es besteht aus den Super-Nodes fastd1, fastd2 und fastd3, den Nodes &amp;lt;tt&amp;gt;b0487aaeec16&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;f8d111883fea&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;d85d4cae420c&amp;lt;/tt&amp;gt;  sowie zwei Klienten. &lt;br /&gt;
* Nodes &amp;lt;tt&amp;gt;b0..&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;f8..&amp;lt;/tt&amp;gt; sind per Kabel mit dem Internet verbunden und bauen eine VPN-Verbindung zu jeweils zwei Supernodes auf.&lt;br /&gt;
* Node &amp;lt;tt&amp;gt;d8..&amp;lt;/tt&amp;gt; verfügt über keine kabelgebundene Verbindung zum Internet. Er ist via ad-hoc wlan mit der Wolke verbunden&lt;br /&gt;
* Entlang der blau eingezeichneten Verbindungen werden batman-adv Frames ausgetauscht.&lt;br /&gt;
Die Klienten werden daher via batman-adv TT-annouces im Mesh bekannt gemacht. Bridge-Loop-Avoidance (BLA) wird nicht verwendet (http://www.open-mesh.org/projects/batman-adv/wiki/Understand-your-batman-adv-network)&lt;br /&gt;
&lt;br /&gt;
=== Node-IDs ===&lt;br /&gt;
Jedem Node wird eine eindeutige ID zugewiesen. Sie entspricht der Hardware-Adresse gemäß Aufkleber - Trennzeichen werden entfernt. (Beispiel: Hardware-Adresse: &amp;lt;tt&amp;gt;F4:EC:38:E9:72:34&amp;lt;/tt&amp;gt; =&amp;gt; Node-ID: &amp;lt;tt&amp;gt;f4ec38e97234&amp;lt;/tt&amp;gt;. Verfügt ein Node über mehrere Interfaces, so wird die des ersten (gemäß Treiber- / Kernel Nummerierung) 2.4 GHz-Interface verwendet.&lt;br /&gt;
&lt;br /&gt;
=== Wireless LAN ===&lt;br /&gt;
Im Freifunk-KBU Netz wird IEEE 802.11g/n verwendet:&lt;br /&gt;
* Das Infrastruktur-Netz führt die SSID &amp;lt;tt&amp;gt;kbu.freifunk.net&amp;lt;/tt&amp;gt;. Für Klienten erscheint es als normaler Accesspoint.&lt;br /&gt;
* Das Ad-Hoc Netz nutzt die ESSID und BSSID: &amp;lt;tt&amp;gt;02:d1:11:37:fc:39&amp;lt;/tt&amp;gt;. Es ermöglicht die direkte Kommunikation zwischen verschiedenen Nodes.&lt;br /&gt;
&lt;br /&gt;
=== VPN ===&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
Verfügt ein Node über einen drahtgebundenen Zugang zum Internet, so baut er eine VPN-Verbindung auf. Als VPN wird fastd (https://projects.universe-factory.net/projects/fastd) verwendet. Fastd baut - ähnlich zu l2tp - per Default Verbindungen nur zwischen zu definierten Links auf. Somit ergibt sich keine Redundanz zur batman-adv Topologie-Ermittlung: Für batman-adv existiert ''nicht'' der transitive Abschluss aller konfigurierten fastd-Links als Broadcast-Medium. Das VPN arbeitet hier als Ersatz für ad-hoc wlan Verbindungen: Teile des Netzes zwischen denen keine Verbindungen bestehen, werden über das VPN zusammen gefasst.&lt;br /&gt;
Nodes ohne Verbindung zum VPN-Server bilden eine gemeinsames OSI-2 Segment, wenn eine Ad-Hoc Verbindung besteht oder wenn zwischen ihnen eine VPN-Verbindung manuell konfiguriert wurde&lt;br /&gt;
(fastd-Peers per Shell im Dateisystem des Nodes hinterlegt). Eine Verbindung zu Supernodes ist nicht zwingend erforderlich. Somit gilt:&lt;br /&gt;
&lt;br /&gt;
''Das VPN verbindet Ad-Hoc Mesh-Partitionen - Partitionen ohne VPN-Link zu Supernodes arbeiten autark.&lt;br /&gt;
&lt;br /&gt;
==== Schlüsselaustausch ==== &lt;br /&gt;
[[Datei:Key-submit.png|thumb|300px|right|Abb. 4]]&lt;br /&gt;
&lt;br /&gt;
Zum Aufbau einer fastd-Verbindung müssen beide Peers (Node und Supernode) vorab ihren Public Key ausgetauscht haben.&lt;br /&gt;
* Die Keys der Supernodes sind in der Firmware hinterlegt und stehen von Beginn an zur Verfügung.&lt;br /&gt;
* Die Keys der Nodes werden initial (beim ersten Systemstart) generiert und müssen danach übermittelt werden.&lt;br /&gt;
&lt;br /&gt;
Die Übermittlung erfolgt dabei über die Supernodes. Jeder Supernode betreibt einen RESTful-Webservice über den er Schlüssel entgegen nimmt (https://github.com/ff-kbu/fastd-service): Initiiert ein Node eine VPN-Verbindung zu einem Supernode zu übermittelt er im Vorfeld seinen Public-Key. Durch die Verwendung Elliptischer Kurven sind die Schlüssel hinreichend klein und können urlencoded übermittelt werden. Abb. 4 zeigt den Schlüsselaustausch zwischen Node und Supernode. Die Übermittlung geschieht bei jedem Boot des Nodes.&lt;br /&gt;
&lt;br /&gt;
Das Node-Register ist ebenfalls am Austausch beteiligt: Es kann Schlüssel ablehnen (bspw. wenn er bereits im Netz verwendet wird). In diesem Fall übermittelt das Node-Register HTTP-423 (Locked). Alle anderen Rückgabewerte oder Fehler werden vom Supernode ignoriert. Somit ist ein Schlüsselaustausch auch ohne verfügbares Node-Register möglich.&lt;br /&gt;
&lt;br /&gt;
Ändert sich der Schlüssel eines Nodes (z.B. durch Neuinstallation), so wird der neue Schlüssel anstelle des alten übermittelt und im VPN verwendet.&lt;br /&gt;
&lt;br /&gt;
=== Frame-Typen ===&lt;br /&gt;
Für die genutzten Frame-Typen gilt:&lt;br /&gt;
* vlan-Tagging wird nicht verwendet.&lt;br /&gt;
* VPN und ad-hoc: ''batman-adv''-Frames &lt;br /&gt;
* Infrastruktur-Netz: Gewöhnliche Wireless-Lan Frames (IEEE 802.11)&lt;br /&gt;
&lt;br /&gt;
=== MTU / PMTU ===&lt;br /&gt;
* wireless-lan Interfaces verwenden als MTU 1500 Byte&lt;br /&gt;
* fastd tap-Interfaces verwenden als MTU 1426 Byte&lt;br /&gt;
&lt;br /&gt;
''Hinweise: ''&lt;br /&gt;
&lt;br /&gt;
fastd-Pakete werden per default nicht fragmentiert. Wird eine VPN-Verbindung mit zu kleiner PMTU verwendet, werden die Pakete verworfen. Die MTU 1426 des fastd-Interfaces errechnet sich durch:&lt;br /&gt;
* PMTU des Uplinks: 1500 Byte - 8 Byte = 1492 Byte = MTU einer DSL-PPPoE Verbindung&lt;br /&gt;
* Overhead fastd: 1492 Byte - 20 Byte (IP) - 8 Byte (UDP) - 24 Byte (fastd) -  14 Byte (Inner Ethernet) = 1426 Byte&lt;br /&gt;
&lt;br /&gt;
Falls keine fastd-Verschlüsselung verwendet wird (Method: 'null') rediziert sich der fastd-Overhead von 24 Byte auf 1 Byte.&lt;br /&gt;
&lt;br /&gt;
Problematisch ist, dass Netcologne bei ADSL typischerweise nur eine PMTU von 1442 (d.h. 50 Byte weniger) zur Verfügung stellt. Hiermit ist fraglich, in wie weit 1426 als MTU für fastd-Interfaces sinnvoll ist (alternativ: 1376). Aktuell werden alle Supernodes ohne PMTU-Discovery betrieben (&amp;lt;tt&amp;gt;sysctl -w net.ipv4.ip_no_pmtu_disc=1&amp;lt;/tt&amp;gt;), so dass das Don't Fragment (DF)-Bit seitens fastd auf 0 gesetzt wird und keine Probleme durch Paketverlust auftreten. Auf den Nodes ist PMTU-Discovery derzeit aktiv - Probleme sind jedoch nicht erkennbar. Mittelfristig sollte das Fragmentierungsverhalten seitens fastd konfigurierbar sein: https://projects.universe-factory.net/issues/120&lt;br /&gt;
&lt;br /&gt;
Somit senden radvds eine MTU von 1350 (1376 - batman-adv Overhead) (&amp;lt;tt&amp;gt;AdvLinkMTU 1350&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== OSI-3: Network Layer ==&lt;br /&gt;
Zur Kommunikation im Freifunk-Netz und mit weiteren Netzen ist es erforderlich, IP-Adressen zu Vergeben und Pakete in andere Netze zu routen. Dieser Absatz beschreibt die verwendete Adressierungs- und Routing-Strategien im Freifunk-Netz. Hierbei wird insbesondere auf das Backbon-VPN (Tinc) und auf die Konfiguration der Supernodes eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== IPv4 ===&lt;br /&gt;
[[Datei:Osi-3-v4.png|thumb|400px|right|Abb. 5]]&lt;br /&gt;
Abb. 5 illustriert die verwendeten IPv4-Netze. Zur Vereinfachung sind nicht alle Supernodes und Server dargestellt. Von ''oben nach unten'' gesehen werden die Netze wie folgt verwendet (vgl. [[IP Subnetze]]).&lt;br /&gt;
&lt;br /&gt;
==== Mesh ====&lt;br /&gt;
In der Mesh-Wolke (dem OSI-2 Segment) werden Adressen aus dem Bereich &amp;lt;tt&amp;gt;172.27.0.0/18&amp;lt;/tt&amp;gt; verwendet. &lt;br /&gt;
* Supernodes ist eine statische Adresse fest zugewiesen. fastd3 verwendet die Adresse &amp;lt;tt&amp;gt;172.27.8.1&amp;lt;/tt&amp;gt; während fastd4 &amp;lt;tt&amp;gt;172.27.16.1&amp;lt;/tt&amp;gt; nutzt. &lt;br /&gt;
* Nodes besitzen keine IPv4 Adresse - sie sind nicht Teil des IPv4-Netzes. (Evtl. bald doch - siehe Abschnitt [[Architektur#Anycast | Anycast]])&lt;br /&gt;
* Jedem Supernode ist ein /21 Netz zugeteilt. Hier: fastd3: &amp;lt;tt&amp;gt;172.27.8.0/21&amp;lt;/tt&amp;gt;, fastd4: &amp;lt;tt&amp;gt;172.27.16.0/21&amp;lt;/tt&amp;gt;. Sie verfügen somit über je 2048 Adressen. &lt;br /&gt;
** Jeder Supernode betreibt einen DHCP-Server, der Adressen aus dem zugeteilten Bereich in der Mesh-Cloud vergibt. fastd3 vergibt beispielsweise Adressen aus dem Bereich &amp;lt;tt&amp;gt;172.27.8.10&amp;lt;/tt&amp;gt; - &amp;lt;tt&amp;gt;172.27.15.255&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Jeder Klient im Mesh-Netz bezieht eine IP von einem Supernode. Er nutzt ihn als ''Default-Router'' und ''DNS-Server''. Die Auswahl des Supernodes erfolgt durch den batman-adv Gateway Mode (Vgl. http://www.open-mesh.org/projects/batman-adv/wiki/Gateways).&lt;br /&gt;
&lt;br /&gt;
==== Backbone-VPN / Tinc ====&lt;br /&gt;
Alle Supernodes und sonstigen Server des Freifunk-KBU-Netztes sind untereinander über ein dezentrales VPN (Tinc - vgl. http://tinc-vpn.org/) verbunden.&lt;br /&gt;
* Das Netz verwendet den Adressbereich &amp;lt;tt&amp;gt;172.27.255.0/24&amp;lt;/tt&amp;gt;. Bspw. verwendet fastd3 die Adresse &amp;lt;tt&amp;gt;172.27.55.9&amp;lt;/tt&amp;gt; -- fastd4 hingegen &amp;lt;tt&amp;gt;172.27.255.10&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Das VPN wird als Transport-Netz benutzt: IP-Pakete mit fremden Quell- und Zieladressen werden darüber transportiert.&lt;br /&gt;
* Verfügt ein Supernode über Kontakt zu weiteren Netzten  so annonciert er eine entsprechende Route. In der Abbildung kann fastd4 über das Tor-Netzwerk Verbindungen zum WWW aufbauen. Er annonciert daher die Route &amp;lt;tt&amp;gt;0.0.0.0/0&amp;lt;/tt&amp;gt; (Default Route). Verfügt ein Node über Kontakt im ChaosVPN (http://wiki.hamburg.ccc.de/ChaosVPN) oder IC-VPN (http://wiki.freifunk.net/IC-VPN) so annonciert er diese Netzbereiche.&lt;br /&gt;
* Das VPN ist verschlüsselt. Nutzlast wie z.B. Service-Aufrufe müssen daher nicht zusätzlich per SSL/TLS gesichert werden.&lt;br /&gt;
* Jeder Router annonciert zusätzlich das im zugeteilte Netz -- fastd3: &amp;lt;tt&amp;gt;172.27.8.0/21&amp;lt;/tt&amp;gt;,  fastd4: &amp;lt;tt&amp;gt;172.27.16.0/21&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Der Schlüsselaustausch erfolgt via github (https://github.com/ff-kbu/bbkeys).&lt;br /&gt;
Paul nimmt hierbei eine Sonderrolle ein: Als einziger, regulärer Router zum Internet kann er als IPv4- und IPv6-Default-Router verwendet werden. Paul ist kein Supernode sondern wickelt lediglich externen Traffic ab.&lt;br /&gt;
&lt;br /&gt;
==== Anycast ====&lt;br /&gt;
&amp;lt;todo nicht implementiert&amp;gt; &lt;br /&gt;
Jeder Node ist über das Infrastruktur-Netz auf der IP &amp;lt;tt&amp;gt;172.27.0.1&amp;lt;/tt&amp;gt; erreichbar. Hierüber können Klienten Status-Informationen des Nodes beziehen, bei dem sie eingebucht sind.&lt;br /&gt;
&amp;lt;/todo nicht implementiert&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IPv6 ===&lt;br /&gt;
[[Datei:Osi-3-v6.png|thumb|450px|right|Abb. 6]]&lt;br /&gt;
Abb. 6 illustriert die IPv6 Konfiguration. Wie zuvor bei IPv4 sind zur Vereinfachung nicht alle Supernodes und Server dargestellt. Für IPv6 werden die folgenden Addressbereiche verwendet:&lt;br /&gt;
* &amp;lt;tt&amp;gt;fdd3:5d16:b5dd::/48&amp;lt;/tt&amp;gt; Unique Local Addresses (ULA)&lt;br /&gt;
* &amp;lt;tt&amp;gt;2001:67C:20A0:B100::/56&amp;lt;/tt&amp;gt; Global.&lt;br /&gt;
Die Verwendung der Public IPv6 Address ermöglicht, dass alle Teilnehmer des Freifunk-Netzes extern erreichbar sind. &lt;br /&gt;
&lt;br /&gt;
Von ''oben nach unten'' werden die Netze wie folgt verwendet:&lt;br /&gt;
&lt;br /&gt;
==== Mesh ====&lt;br /&gt;
Im Mesh werden ULA und global gültige IPv6-Addressen verwendet. Jedem Supernode ist ein eigenes, globales /64 Subnet zugewiesen. Der Supernode verwendet die Host-ID 1. Hier: fastd3: &amp;lt;tt&amp;gt;2001:67c:20a0:b104::1/6&amp;lt;/tt&amp;gt;, fastd4: &amp;lt;tt&amp;gt;2001:67c:20a0:b105::1/64&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Supernodes versenden Router Advertisments (RA) im kompletten Segment. Nodes und Klienten erhalten aus jedem Pool eine Addresse (stateless autoconfiguration). Jeder Supernode routed IPv6-Pakete zwischen Mesh-Cloud und Internet.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Da der Klient das Default-Gateway zufällig wählt, werden Pakete idR auf verschiedenen Routes zugestellt:&lt;br /&gt;
* Sendet der Klient ein Paket, so wird der vom Klienten zufällig gewählte Supernode genutzt&lt;br /&gt;
* Empfängt der Klient ein Paket, so richtet sich der Supernode nach der verwendeten Public IPv6 Addresse des Klienten: es wird der Supernode verwendet, aus dessem Subnet die Adresse stammt&lt;br /&gt;
&lt;br /&gt;
==== Backbone-VPN / Tinc ====&lt;br /&gt;
Im Backbone-VPN wird IPv6 analog zu IPv4 verwendet (vgl. [[Architektur#Backbone-VPN_.2F_Tinc | Backbone-VPN / Tinc (IPv4)]]. Jedem Teilnehmer ist eine IP aus dem Bereich &amp;lt;tt&amp;gt;fdd3:5d16:b5dd:3::/64&amp;lt;/tt&amp;gt; zugewiesen. Die Endziffer entspricht der von IPv4. Bspw. verfügt Paul über die Adressen &amp;lt;tt&amp;gt;172.27.255.3&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;fdd3:5d16:b5dd:3::3&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supernodes annoncieren fremde Public-V6 Netze des Mesh-Segments mit geringer Priorität im Tinc-Backone. Somit ist sichergestellt, dass bei einem Ausfall eines Supernodes die Addressen weiterhin verwendet werden können. Im kompletten Mesh wird &amp;lt;tt&amp;gt;fdd3:5d16:b5dd::/64&amp;lt;/tt&amp;gt; zur internen Adressierung genutzt.&lt;br /&gt;
&lt;br /&gt;
==== Sonstige Bereiche / ULA ====&lt;br /&gt;
Einzelnen Anwendungen stehen komplette /64-Netze zur Verfügung gestellt. Entsprechende Adressen sind in der Firmware fest verdrahtet. Die Nutzung eigener /64 Netze ermöglicht es, Server zu transparent migrieren ohne auf DNS angewiesen zu sein. Beispiel: collectd verwendet &amp;lt;tt&amp;gt;fdd3:5d16:b5dd:2::/64&amp;lt;/tt&amp;gt;, der collectd-Server ist unter &amp;lt;tt&amp;gt;fdd3:5d16:b5dd:2::1&amp;lt;/tt&amp;gt; erreichbar.&lt;br /&gt;
&lt;br /&gt;
== OSI-7: Anwendungen ==&lt;br /&gt;
TBD - Hier kommen hin:&lt;br /&gt;
* Register&lt;br /&gt;
* collectd&lt;br /&gt;
* DNS&lt;br /&gt;
* Ggf. Squid&lt;br /&gt;
&lt;br /&gt;
== Ausblick / Probleme / TODOs / Offene Punkte ==&lt;br /&gt;
# Anycast Info-Page implementieren&lt;br /&gt;
# In Tinc 1.0 wird das annoncieren beliebiger Netze hackish, da [http://www.tinc-vpn.org/documentation-1.1/tincctl.8 tincctl] noch nicht nutzbar ist. (Ggf. Scripten)? Alternativ können wir auch OSPF auf allen Tinc-Verbindungen nutzen - Nachteil: Komplexität.&lt;br /&gt;
# Wenn Lübeck LFF 0.3.2.1 release hat: Filter für Broadcast / Multicast dokumentieren. -&amp;gt; Weniger Last auf den fastd-Gateways.&lt;br /&gt;
# DNS-Caches auf den Supernodes _wirklich_ implementieren - bislang leiten wir ganz &amp;quot;lame&amp;quot; an Paul weiter.&lt;br /&gt;
&lt;br /&gt;
== Notizblock ==&lt;br /&gt;
Nix zu sehen - bitte weitergehen.&lt;br /&gt;
&amp;lt;strike&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Im OSI-2 Segment werden die folgenden Adressen verwendet:&lt;br /&gt;
* 2001:67c:20a0:b102::/64&lt;br /&gt;
* fdd3:5d16:b5dd::/64&lt;br /&gt;
* fdd3:5d16:b5dd:1::/64&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration Super-Nodes ===&lt;br /&gt;
Jeder Super-Node betreibt einen DHCPv4-Server, mit dem er die Konfiguration für die Klienten ausliefert. Gleichzeitig betreibt er einen DNS-Cache - optional ist der Betrieb eines transparenten HTTP-Proxies denkbar.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Planung sieht 8 Super-Nodes für das FF-KBU vor, auf denen DHCP-Server betrieben werden. Keys und DNS-Namen sind in der Firmware hinterlegt. Bei Bedarf können weitere Super-Nodes hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration Nodes ===&lt;br /&gt;
''&amp;lt;todo&amp;gt; (TODO: Implementierung in der Firmware ausstehend).''&lt;br /&gt;
&lt;br /&gt;
Nodes verwenden im Uplink-Netz zusätzlich den ULA-Bereich&lt;br /&gt;
*fdd3:5d16:b5dd:1::/64 &lt;br /&gt;
Jeder Node kann über seine Public-IPv6, ULA-IPv6, Link-Local-IPv6 Adressen und die IPv4-Adresse seines WAN-Uplink-Netzes erreicht werden. Jedem Node wird dadurch eine eindeutige Adresse aus fdd3:5d16:b5dd::/64 zugewiesen, die aus allen Netzen - mit denen er verbunden ist erreicht werden kann &lt;br /&gt;
&lt;br /&gt;
Gleichzeitig verwendet jeder Node die anycast-Adresse 172.27.0.255, die nur aus dem Infrastruktur-Netz erreichbar ist. Hierdurch kann ein Client explizit abfragen, mit welchem Node er verbunden ist. &amp;lt;/todo&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IPv6 / RADVD ===&lt;br /&gt;
Hinweis: Aktell nicht so umgesetzt - Tinc in Squeeze hat da afair Probleme TODO: Umsetzen.&lt;br /&gt;
Super-Nodes betreiben radvd-Server im Adressbereich 2001:67c:20a0:b102::/64 und annoncen sich selbst als Router&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Architektur&amp;diff=2469</id>
		<title>Architektur</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Architektur&amp;diff=2469"/>
		<updated>2013-05-24T19:32:08Z</updated>

		<summary type="html">&lt;p&gt;Christof: /* Kurzzusammenfassung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #F00&amp;quot;&amp;gt;'''Hinweis'''&amp;lt;/span&amp;gt;: Dieser Artikel beschreibt das Freifunk-Netz aus konzeptioneller Sicht und erklärt viele, tiefe Details. Um einfach mitzumachen musst Du nicht alles davon verstehen - wenn Du Interesse hast, lese einfach weiter :-).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kurzzusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Freifunk-KBU verfolgt die [[Netzwerk-Konfiguration#Komplettes_Bridging | Komplettes Bridging]]-Strategie: Das gesamte KBU-Netz bildet eine Broadcast-Domäne. Fastd-Server verbinden als Supernodes WLAN-Mesh-Partionen. IP-Adressen werden an Clients per DHCP und radvd vergeben. Nodes erhalten keine IP Adresse. Ein routed Backbone-VPN (tinc) verbindet die Supernodes und ermöglicht Routing zum Exit.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Dieser Artikel beschreibt die Architektur des in Köln, Bonn und Umgebung verwendeten Freifunk-Netzes. Dabei wird insbesondere auf die Zusammenhänge zwischen Server-Konfiguration und Firmware-Eigenschaften eingegangen. Hierbei gibt die Architektur vor, wie Nodes, Supernodes, Server und Klienten konfiguriert werden müssen. &lt;br /&gt;
&lt;br /&gt;
Im Rahmen der Einleitung wird die verwendete Strategie (''komplettes Bridging'') dargelegt. Die folgenden Absätze (OSI-2: Bridging, OSI-3: Routing) gehen detailliert auf die verschiedenen Schichten des Netzes ein. Der letzte Absatz gibt einen Ausblick auf mögliche Änderung, die in Zukunft einziehen können.&lt;br /&gt;
&lt;br /&gt;
=== Strategie ===&lt;br /&gt;
Das Netz besteht aus Klienten, Nodes und Supernodes. Die verwendete [[Netzwerk-Konfiguration#Komplettes_Bridging | Komplettes Bridging Strategie]] sieht vor, dass das komplette Netz ein einziges zusammenhängendes OSI-2 Segment bildet. Dieses Segment verbindet alle Teilnehmer. Dadurch sind je 2 Klienten in verschiedenen Teilen des Netzes immer über eine zu Grunde liegende Infrastruktur via &amp;quot;Ethernet&amp;quot; (WLAN / LAN) miteinander verbunden. Für die Infrastruktur wird batman-adv (http://www.open-mesh.org/) verwendet - sie wird als hierachisches [[Wikipedia:Peer-to-Peer | P2P-Netz]] realisiert. Somit: &amp;lt;br /&amp;gt;&lt;br /&gt;
''Daten zwischen Netzteilnehmer werden als Frames switched, das Netz bildet eine große Broadcast-/Link-Local-Multicast-Domäne.''&lt;br /&gt;
&lt;br /&gt;
=== Supernodes ===&lt;br /&gt;
[[Datei:Super-node-overview.png|thumb|300px|right|Abb. 1]]&lt;br /&gt;
[[supernode|Supernodes]] (auch: fastd-Server) sind Nodes, die VPN-Verbindungen von Nodes entgegen nehmen. Ein Supernode ist im Internet erreichbar, d.h. Nodes können VPN-Verbindungen dorthin initiieren, auch wenn sie sich z.B. hinter einem [[Wikipedia:Network_Address_Translation | NAT]] befinden. Supernodes verfügen über eine gute Internet-Anbindung (100MBit/s). Jeder Node hält typischerweise VPN-Verbindungen zu zwei verschiedenen Supernodes. Adressen und VPN-Schlüssel der Supernodes sind fest in der Node-Firmware verdrahtet.&lt;br /&gt;
&lt;br /&gt;
Supernodes werden beispielsweise auf dedizierten Servern ohne WLAN-Konnektivität betrieben.&lt;br /&gt;
Abb. 1 zeigt die Kommunikation zwischen Klienten, Nodes und Supernodes. Die Nodes A und B sind mit den Supernodes fastd1 und fastd2 verbunden. Über die eingezeichneten Verbindungen werden batman-adv Frames versendet. Der Klient ist im Infrastruktur-Netz an Node A eingebucht - es werden gewöhnliche Wireless-Lan-Frames verwendet. (''kein batman-adv'')&lt;br /&gt;
&lt;br /&gt;
=== Nodes ===&lt;br /&gt;
[[Datei:4.1-All-Bridging.png|thumb|300px|right|Abb. 2]]&lt;br /&gt;
Auf den Nodes existieren verschiedene Netze, die teilweise mit einander verbunden sind (Abb. 2). Jeder Node spannt dabei zwei Wireless-Lan-Netze auf und ggf. eine VPN-Verbindung auf.&lt;br /&gt;
&lt;br /&gt;
* ''wlan0'' wird als &amp;quot;Master&amp;quot;-Netz betrieben&lt;br /&gt;
* ''wlan1'' arbeitet als &amp;quot;Ad-Hoc&amp;quot;-Netz &lt;br /&gt;
* ''tap0'' ist das VPN-Interface. &lt;br /&gt;
&lt;br /&gt;
wlan1 und tap0 sind hierbei dem ''bat0'' Interface hinzugefügt. &lt;br /&gt;
&lt;br /&gt;
''Hinweis'': Aus technischen Gründen (u.a. vlan-Fähigkeit einzelner Geräte), weichen Interface-Namen in der Node-Firmware z.T. ab.&lt;br /&gt;
&lt;br /&gt;
== OSI-2: Data-Link-Layer ==&lt;br /&gt;
[[Datei:Osi-2.png|thumb|350px|right|Abb. 3]]&lt;br /&gt;
&lt;br /&gt;
Die komplettes Bridging Strategie sieht vor, dass alle Stationen zu einem OSI-2 Segment zusammen gefasst werden. Hierbei werden LAN, WLAN und VPN-Verbindungen via bridging verbunden. In diesem Absatz wird die Konfiguration der verschiedenen Komponenten des Segements erläutert. Abb. 3 illustriert das Segment. Es besteht aus den Super-Nodes fastd1, fastd2 und fastd3, den Nodes &amp;lt;tt&amp;gt;b0487aaeec16&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;f8d111883fea&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;d85d4cae420c&amp;lt;/tt&amp;gt;  sowie zwei Klienten. &lt;br /&gt;
* Nodes &amp;lt;tt&amp;gt;b0..&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;f8..&amp;lt;/tt&amp;gt; sind per Kabel mit dem Internet verbunden und bauen eine VPN-Verbindung zu jeweils zwei Supernodes auf.&lt;br /&gt;
* Node &amp;lt;tt&amp;gt;d8..&amp;lt;/tt&amp;gt; verfügt über keine kabelgebundene Verbindung zum Internet. Er ist via ad-hoc wlan mit der Wolke verbunden&lt;br /&gt;
* Entlang der blau eingezeichneten Verbindungen werden batman-adv Frames ausgetauscht.&lt;br /&gt;
Die Klienten werden daher via batman-adv TT-annouces im Mesh bekannt gemacht. Bridge-Loop-Avoidance (BLA) wird nicht verwendet (http://www.open-mesh.org/projects/batman-adv/wiki/Understand-your-batman-adv-network)&lt;br /&gt;
&lt;br /&gt;
=== Node-IDs ===&lt;br /&gt;
Jedem Node wird eine eindeutige ID zugewiesen. Sie entspricht der Hardware-Adresse gemäß Aufkleber - Trennzeichen werden entfernt. (Beispiel: Hardware-Adresse: &amp;lt;tt&amp;gt;F4:EC:38:E9:72:34&amp;lt;/tt&amp;gt; =&amp;gt; Node-ID: &amp;lt;tt&amp;gt;f4ec38e97234&amp;lt;/tt&amp;gt;. Verfügt ein Node über mehrere Interfaces, so wird die des ersten (gemäß Treiber- / Kernel Nummerierung) 2.4 GHz-Interface verwendet.&lt;br /&gt;
&lt;br /&gt;
=== Wireless LAN ===&lt;br /&gt;
Im Freifunk-KBU Netz wird IEEE 802.11g/n verwendet:&lt;br /&gt;
* Das Infrastruktur-Netz führt die SSID &amp;lt;tt&amp;gt;kbu.freifunk.net&amp;lt;/tt&amp;gt;. Für Klienten erscheint es als normaler Accesspoint.&lt;br /&gt;
* Das Ad-Hoc Netz nutzt die ESSID und BSSID: &amp;lt;tt&amp;gt;02:d1:11:37:fc:39&amp;lt;/tt&amp;gt;. Es ermöglicht die direkte Kommunikation zwischen verschiedenen Nodes.&lt;br /&gt;
&lt;br /&gt;
=== VPN ===&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
Verfügt ein Node über einen drahtgebundenen Zugang zum Internet, so baut er eine VPN-Verbindung auf. Als VPN wird fastd (https://projects.universe-factory.net/projects/fastd) verwendet. Fastd baut - ähnlich zu l2tp - per Default Verbindungen nur zwischen zu definierten Links auf. Somit ergibt sich keine Redundanz zur batman-adv Topologie-Ermittlung: Für batman-adv existiert ''nicht'' der transitive Abschluss aller konfigurierten fastd-Links als Broadcast-Medium. Das VPN arbeitet hier als Ersatz für ad-hoc wlan Verbindungen: Teile des Netzes zwischen denen keine Verbindungen bestehen, werden über das VPN zusammen gefasst.&lt;br /&gt;
Nodes ohne Verbindung zum VPN-Server bilden eine gemeinsames OSI-2 Segment, wenn eine Ad-Hoc Verbindung besteht oder wenn zwischen ihnen eine VPN-Verbindung manuell konfiguriert wurde&lt;br /&gt;
(fastd-Peers per Shell im Dateisystem des Nodes hinterlegt). Eine Verbindung zu Supernodes ist nicht zwingend erforderlich. Somit gilt:&lt;br /&gt;
&lt;br /&gt;
''Das VPN verbindet Ad-Hoc Mesh-Partitionen - Partitionen ohne VPN-Link zu Supernodes arbeiten autark.&lt;br /&gt;
&lt;br /&gt;
==== Schlüsselaustausch ==== &lt;br /&gt;
[[Datei:Key-submit.png|thumb|300px|right|Abb. 4]]&lt;br /&gt;
&lt;br /&gt;
Zum Aufbau einer fastd-Verbindung müssen beide Peers (Node und Supernode) vorab ihren Public Key ausgetauscht haben.&lt;br /&gt;
* Die Keys der Supernodes sind in der Firmware hinterlegt und stehen von Beginn an zur Verfügung.&lt;br /&gt;
* Die Keys der Nodes werden initial (beim ersten Systemstart) generiert und müssen danach übermittelt werden.&lt;br /&gt;
&lt;br /&gt;
Die Übermittlung erfolgt dabei über die Supernodes. Jeder Supernode betreibt einen RESTful-Webservice über den er Schlüssel entgegen nimmt (https://github.com/ff-kbu/fastd-service): Initiiert ein Node eine VPN-Verbindung zu einem Supernode zu übermittelt er im Vorfeld seinen Public-Key. Durch die Verwendung Elliptischer Kurven sind die Schlüssel hinreichend klein und können urlencoded übermittelt werden. Abb. 4 zeigt den Schlüsselaustausch zwischen Node und Supernode. Die Übermittlung geschieht bei jedem Boot des Nodes.&lt;br /&gt;
&lt;br /&gt;
Das Node-Register ist ebenfalls am Austausch beteiligt: Es kann Schlüssel ablehnen (bspw. wenn er bereits im Netz verwendet wird). In diesem Fall übermittelt das Node-Register HTTP-423 (Locked). Alle anderen Rückgabewerte oder Fehler werden vom Supernode ignoriert. Somit ist ein Schlüsselaustausch auch ohne verfügbares Node-Register möglich.&lt;br /&gt;
&lt;br /&gt;
Ändert sich der Schlüssel eines Nodes (z.B. durch Neuinstallation), so wird der neue Schlüssel anstelle des alten übermittelt und im VPN verwendet.&lt;br /&gt;
&lt;br /&gt;
=== Frame-Typen ===&lt;br /&gt;
Für die genutzten Frame-Typen gilt:&lt;br /&gt;
* vlan-Tagging wird nicht verwendet.&lt;br /&gt;
* VPN und ad-hoc: ''batman-adv''-Frames &lt;br /&gt;
* Infrastruktur-Netz: Gewöhnliche Wireless-Lan Frames (IEEE 802.11)&lt;br /&gt;
&lt;br /&gt;
=== MTU / PMTU ===&lt;br /&gt;
* wireless-lan Interfaces verwenden als MTU 1500 Byte&lt;br /&gt;
* fastd tap-Interfaces verwenden als MTU 1426 Byte&lt;br /&gt;
&lt;br /&gt;
''Hinweise: ''&lt;br /&gt;
&lt;br /&gt;
fastd-Pakete werden per default nicht fragmentiert. Wird eine VPN-Verbindung mit zu kleiner PMTU verwendet, werden die Pakete verworfen. Die MTU 1426 des fastd-Interfaces errechnet sich durch:&lt;br /&gt;
* PMTU des Uplinks: 1500 Byte - 8 Byte = 1492 Byte = MTU einer DSL-PPPoE Verbindung&lt;br /&gt;
* Overhead fastd: 1492 Byte - 20 Byte (IP) - 8 Byte (UDP) - 24 Byte (fastd) -  14 Byte (Inner Ethernet) = 1426 Byte&lt;br /&gt;
&lt;br /&gt;
Falls keine fastd-Verschlüsselung verwendet wird (Method: 'null') rediziert sich der fastd-Overhead von 24 Byte auf 1 Byte.&lt;br /&gt;
&lt;br /&gt;
Problematisch ist, dass Netcologne bei ADSL typischerweise nur eine PMTU von 1442 (d.h. 50 Byte weniger) zur Verfügung stellt. Hiermit ist fraglich, in wie weit 1426 als MTU für fastd-Interfaces sinnvoll ist (alternativ: 1376). Aktuell werden alle Supernodes ohne PMTU-Discovery betrieben (&amp;lt;tt&amp;gt;sysctl -w net.ipv4.ip_no_pmtu_disc=1&amp;lt;/tt&amp;gt;), so dass das Don't Fragment (DF)-Bit seitens fastd auf 0 gesetzt wird und keine Probleme durch Paketverlust auftreten. Auf den Nodes ist PMTU-Discovery derzeit aktiv - Probleme sind jedoch nicht erkennbar. Mittelfristig sollte das Fragmentierungsverhalten seitens fastd konfigurierbar sein: https://projects.universe-factory.net/issues/120&lt;br /&gt;
&lt;br /&gt;
Somit senden radvds eine MTU von 1350 (1376 - batman-adv Overhead) (&amp;lt;tt&amp;gt;AdvLinkMTU 1350&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== OSI-3: Network Layer ==&lt;br /&gt;
Zur Kommunikation im Freifunk-Netz und mit weiteren Netzen ist es erforderlich, IP-Adressen zu Vergeben und Pakete in andere Netze zu routen. Dieser Absatz beschreibt die verwendete Adressierungs- und Routing-Strategien im Freifunk-Netz. Hierbei wird insbesondere auf das Backbon-VPN (Tinc) und auf die Konfiguration der Supernodes eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== IPv4 ===&lt;br /&gt;
[[Datei:Osi-3-v4.png|thumb|400px|right|Abb. 5]]&lt;br /&gt;
Abb. 5 illustriert die verwendeten IPv4-Netze. Zur Vereinfachung sind nicht alle Supernodes und Server dargestellt. Von ''oben nach unten'' gesehen werden die Netze wie folgt verwendet (vgl. [[IP Subnetze]]).&lt;br /&gt;
&lt;br /&gt;
==== Mesh ====&lt;br /&gt;
In der Mesh-Wolke (dem OSI-2 Segment) werden Adressen aus dem Bereich &amp;lt;tt&amp;gt;172.27.0.0/18&amp;lt;/tt&amp;gt; verwendet. &lt;br /&gt;
* Supernodes ist eine statische Adresse fest zugewiesen. fastd3 verwendet die Adresse &amp;lt;tt&amp;gt;172.27.8.1&amp;lt;/tt&amp;gt; während fastd4 &amp;lt;tt&amp;gt;172.27.16.1&amp;lt;/tt&amp;gt; nutzt. &lt;br /&gt;
* Nodes besitzen keine IPv4 Adresse - sie sind nicht Teil des IPv4-Netzes. (Evtl. bald doch - siehe Abschnitt [[Architektur#Anycast | Anycast]])&lt;br /&gt;
* Jedem Supernode ist ein /21 Netz zugeteilt. Hier: fastd3: &amp;lt;tt&amp;gt;172.27.8.0/21&amp;lt;/tt&amp;gt;, fastd4: &amp;lt;tt&amp;gt;172.27.16.0/21&amp;lt;/tt&amp;gt;. Sie verfügen somit über je 2048 Adressen. &lt;br /&gt;
** Jeder Supernode betreibt einen DHCP-Server, der Adressen aus dem zugeteilten Bereich in der Mesh-Cloud vergibt. fastd3 vergibt beispielsweise Adressen aus dem Bereich &amp;lt;tt&amp;gt;172.27.8.10&amp;lt;/tt&amp;gt; - &amp;lt;tt&amp;gt;172.27.15.255&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Jeder Klient im Mesh-Netz bezieht eine IP von einem Supernode. Er nutzt ihn als ''Default-Router'' und ''DNS-Server''. Die Auswahl des Supernodes erfolgt durch den batman-adv Gateway Mode (Vgl. http://www.open-mesh.org/projects/batman-adv/wiki/Gateways).&lt;br /&gt;
&lt;br /&gt;
==== Backbone-VPN / Tinc ====&lt;br /&gt;
Alle Supernodes und sonstigen Server des Freifunk-KBU-Netztes sind untereinander über ein dezentrales VPN (Tinc - vgl. http://tinc-vpn.org/) verbunden.&lt;br /&gt;
* Das Netz verwendet den Adressbereich &amp;lt;tt&amp;gt;172.27.255.0/24&amp;lt;/tt&amp;gt;. Bspw. verwendet fastd3 die Adresse &amp;lt;tt&amp;gt;172.27.55.9&amp;lt;/tt&amp;gt; -- fastd4 hingegen &amp;lt;tt&amp;gt;172.27.255.10&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Das VPN wird als Transport-Netz benutzt: IP-Pakete mit fremden Quell- und Zieladressen werden darüber transportiert.&lt;br /&gt;
* Verfügt ein Supernode über Kontakt zu weiteren Netzten  so annonciert er eine entsprechende Route. In der Abbildung kann fastd4 über das Tor-Netzwerk Verbindungen zum WWW aufbauen. Er annonciert daher die Route &amp;lt;tt&amp;gt;0.0.0.0/0&amp;lt;/tt&amp;gt; (Default Route). Verfügt ein Node über Kontakt im ChaosVPN (http://wiki.hamburg.ccc.de/ChaosVPN) oder IC-VPN (http://wiki.freifunk.net/IC-VPN) so annonciert er diese Netzbereiche.&lt;br /&gt;
* Das VPN ist verschlüsselt. Nutzlast wie z.B. Service-Aufrufe müssen daher nicht zusätzlich per SSL/TLS gesichert werden.&lt;br /&gt;
* Jeder Router annonciert zusätzlich das im zugeteilte Netz -- fastd3: &amp;lt;tt&amp;gt;172.27.8.0/21&amp;lt;/tt&amp;gt;,  fastd4: &amp;lt;tt&amp;gt;172.27.16.0/21&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Der Schlüsselaustausch erfolgt via github (https://github.com/ff-kbu/bbkeys).&lt;br /&gt;
Paul nimmt hierbei eine Sonderrolle ein: Als einziger, regulärer Router zum Internet kann er als IPv4- und IPv6-Default-Router verwendet werden. Paul ist kein Supernode sondern wickelt lediglich externen Traffic ab.&lt;br /&gt;
&lt;br /&gt;
==== Anycast ====&lt;br /&gt;
&amp;lt;todo nicht implementiert&amp;gt; &lt;br /&gt;
Jeder Node ist über das Infrastruktur-Netz auf der IP &amp;lt;tt&amp;gt;172.27.0.1&amp;lt;/tt&amp;gt; erreichbar. Hierüber können Klienten Status-Informationen des Nodes beziehen, bei dem sie eingebucht sind.&lt;br /&gt;
&amp;lt;/todo nicht implementiert&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IPv6 ===&lt;br /&gt;
[[Datei:Osi-3-v6.png|thumb|450px|right|Abb. 6]]&lt;br /&gt;
Abb. 6 illustriert die IPv6 Konfiguration. Wie zuvor bei IPv4 sind zur Vereinfachung nicht alle Supernodes und Server dargestellt. Für IPv6 werden die folgenden Addressbereiche verwendet:&lt;br /&gt;
* &amp;lt;tt&amp;gt;fdd3:5d16:b5dd::/48&amp;lt;/tt&amp;gt; Unique Local Addresses (ULA)&lt;br /&gt;
* &amp;lt;tt&amp;gt;2001:67C:20A0:B100::/56&amp;lt;/tt&amp;gt; Global.&lt;br /&gt;
Die Verwendung der Public IPv6 Address ermöglicht, dass alle Teilnehmer des Freifunk-Netzes extern erreichbar sind. &lt;br /&gt;
&lt;br /&gt;
Von ''oben nach unten'' werden die Netze wie folgt verwendet:&lt;br /&gt;
&lt;br /&gt;
==== Mesh ====&lt;br /&gt;
Im Mesh werden ULA und global gültige IPv6-Addressen verwendet. Jedem Supernode ist ein eigenes, globales /64 Subnet zugewiesen. Der Supernode verwendet die Host-ID 1. Hier: fastd3: &amp;lt;tt&amp;gt;2001:67c:20a0:b104::1/6&amp;lt;/tt&amp;gt;, fastd4: &amp;lt;tt&amp;gt;2001:67c:20a0:b105::1/64&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Supernodes versenden Router Advertisments (RA) im kompletten Segment. Nodes und Klienten erhalten aus jedem Pool eine Addresse (stateless autoconfiguration). Jeder Supernode routed IPv6-Pakete zwischen Mesh-Cloud und Internet.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Da der Klient das Default-Gateway zufällig wählt, werden Pakete idR auf verschiedenen Routes zugestellt:&lt;br /&gt;
* Sendet der Klient ein Paket, so wird der vom Klienten zufällig gewählte Supernode genutzt&lt;br /&gt;
* Empfängt der Klient ein Paket, so richtet sich der Supernode nach der verwendeten Public IPv6 Addresse des Klienten: es wird der Supernode verwendet, aus dessem Subnet die Adresse stammt&lt;br /&gt;
&lt;br /&gt;
==== Backbone-VPN / Tinc ====&lt;br /&gt;
Im Backbone-VPN wird IPv6 analog zu IPv4 verwendet (vgl. [[Architektur#Backbone-VPN_.2F_Tinc | Backbone-VPN / Tinc (IPv4)]]. Jedem Teilnehmer ist eine IP aus dem Bereich &amp;lt;tt&amp;gt;fdd3:5d16:b5dd:3::/64&amp;lt;/tt&amp;gt; zugewiesen. Die Endziffer entspricht der von IPv4. Bspw. verfügt Paul über die Adressen &amp;lt;tt&amp;gt;172.27.255.3&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;fdd3:5d16:b5dd:3::3&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supernodes annoncieren fremde Public-V6 Netze des Mesh-Segments mit geringer Priorität im Tinc-Backone. Somit ist sichergestellt, dass bei einem Ausfall eines Supernodes die Addressen weiterhin verwendet werden können. Im kompletten Mesh wird &amp;lt;tt&amp;gt;fdd3:5d16:b5dd::/64&amp;lt;/tt&amp;gt; zur internen Adressierung genutzt.&lt;br /&gt;
&lt;br /&gt;
==== Sonstige Bereiche / ULA ====&lt;br /&gt;
Einzelnen Anwendungen stehen komplette /64-Netze zur Verfügung gestellt. Entsprechende Adressen sind in der Firmware fest verdrahtet. Die Nutzung eigener /64 Netze ermöglicht es, Server zu transparent migrieren ohne auf DNS angewiesen zu sein. Beispiel: collectd verwendet &amp;lt;tt&amp;gt;fdd3:5d16:b5dd:2::/64&amp;lt;/tt&amp;gt;, der collectd-Server ist unter &amp;lt;tt&amp;gt;fdd3:5d16:b5dd:2::1&amp;lt;/tt&amp;gt; erreichbar.&lt;br /&gt;
&lt;br /&gt;
== OSI-7: Anwendungen ==&lt;br /&gt;
TBD - Hier kommen hin:&lt;br /&gt;
* Register&lt;br /&gt;
* collectd&lt;br /&gt;
* DNS&lt;br /&gt;
* Ggf. Squid&lt;br /&gt;
&lt;br /&gt;
== Ausblick / Probleme / TODOs / Offene Punkte ==&lt;br /&gt;
# Anycast Info-Page implementieren&lt;br /&gt;
# In Tinc 1.0 wird das annoncieren beliebiger Netze hackish, da [http://www.tinc-vpn.org/documentation-1.1/tincctl.8 tincctl] noch nicht nutzbar ist. (Ggf. Scripten)? Alternativ können wir auch OSPF auf allen Tinc-Verbindungen nutzen - Nachteil: Komplexität.&lt;br /&gt;
# Wenn Lübeck LFF 0.3.2.1 release hat: Filter für Broadcast / Multicast dokumentieren. -&amp;gt; Weniger Last auf den fastd-Gateways.&lt;br /&gt;
# DNS-Caches auf den Supernodes _wirklich_ implementieren - bislang leiten wir ganz &amp;quot;lame&amp;quot; an Paul weiter.&lt;br /&gt;
&lt;br /&gt;
== Notizblock ==&lt;br /&gt;
Nix zu sehen - bitte weitergehen.&lt;br /&gt;
&amp;lt;strike&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Im OSI-2 Segment werden die folgenden Adressen verwendet:&lt;br /&gt;
* 2001:67c:20a0:b102::/64&lt;br /&gt;
* fdd3:5d16:b5dd::/64&lt;br /&gt;
* fdd3:5d16:b5dd:1::/64&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration Super-Nodes ===&lt;br /&gt;
Jeder Super-Node betreibt einen DHCPv4-Server, mit dem er die Konfiguration für die Klienten ausliefert. Gleichzeitig betreibt er einen DNS-Cache - optional ist der Betrieb eines transparenten HTTP-Proxies denkbar.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Planung sieht 8 Super-Nodes für das FF-KBU vor, auf denen DHCP-Server betrieben werden. Keys und DNS-Namen sind in der Firmware hinterlegt. Bei Bedarf können weitere Super-Nodes hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration Nodes ===&lt;br /&gt;
''&amp;lt;todo&amp;gt; (TODO: Implementierung in der Firmware ausstehend).''&lt;br /&gt;
&lt;br /&gt;
Nodes verwenden im Uplink-Netz zusätzlich den ULA-Bereich&lt;br /&gt;
*fdd3:5d16:b5dd:1::/64 &lt;br /&gt;
Jeder Node kann über seine Public-IPv6, ULA-IPv6, Link-Local-IPv6 Adressen und die IPv4-Adresse seines WAN-Uplink-Netzes erreicht werden. Jedem Node wird dadurch eine eindeutige Adresse aus fdd3:5d16:b5dd::/64 zugewiesen, die aus allen Netzen - mit denen er verbunden ist erreicht werden kann &lt;br /&gt;
&lt;br /&gt;
Gleichzeitig verwendet jeder Node die anycast-Adresse 172.27.0.255, die nur aus dem Infrastruktur-Netz erreichbar ist. Hierdurch kann ein Client explizit abfragen, mit welchem Node er verbunden ist. &amp;lt;/todo&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IPv6 / RADVD ===&lt;br /&gt;
Hinweis: Aktell nicht so umgesetzt - Tinc in Squeeze hat da afair Probleme TODO: Umsetzen.&lt;br /&gt;
Super-Nodes betreiben radvd-Server im Adressbereich 2001:67c:20a0:b102::/64 und annoncen sich selbst als Router&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
	<entry>
		<id>https://kbu.freifunk.net/wiki/index.php?title=Architektur&amp;diff=2468</id>
		<title>Architektur</title>
		<link rel="alternate" type="text/html" href="https://kbu.freifunk.net/wiki/index.php?title=Architektur&amp;diff=2468"/>
		<updated>2013-05-24T19:21:35Z</updated>

		<summary type="html">&lt;p&gt;Christof: /* Kurzzusammenfassung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #F00&amp;quot;&amp;gt;'''Hinweis'''&amp;lt;/span&amp;gt;: Dieser Artikel beschreibt das Freifunk-Netz aus konzeptioneller Sicht und erklärt viele, tiefe Details. Um einfach mitzumachen musst Du nicht alles davon verstehen - wenn Du Interesse hast, lese einfach weiter :-).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kurzzusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Freifunk-KBU verfolgt die [[Netzwerk-Konfiguration#Komplettes_Bridging | Komplettes Bridging]]-Strategie: Fastd-Server verbinden als Supernodes WLAN-Mesh-Partionen. IP-Adressen werden an Clients per DHCP und radvd vergeben. Nodes erhalten keine IP Adresse. Ein routed Backbone-VPN (tinc) verbindet die Supernodes und ermöglicht Routing zum Exit.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Dieser Artikel beschreibt die Architektur des in Köln, Bonn und Umgebung verwendeten Freifunk-Netzes. Dabei wird insbesondere auf die Zusammenhänge zwischen Server-Konfiguration und Firmware-Eigenschaften eingegangen. Hierbei gibt die Architektur vor, wie Nodes, Supernodes, Server und Klienten konfiguriert werden müssen. &lt;br /&gt;
&lt;br /&gt;
Im Rahmen der Einleitung wird die verwendete Strategie (''komplettes Bridging'') dargelegt. Die folgenden Absätze (OSI-2: Bridging, OSI-3: Routing) gehen detailliert auf die verschiedenen Schichten des Netzes ein. Der letzte Absatz gibt einen Ausblick auf mögliche Änderung, die in Zukunft einziehen können.&lt;br /&gt;
&lt;br /&gt;
=== Strategie ===&lt;br /&gt;
Das Netz besteht aus Klienten, Nodes und Supernodes. Die verwendete [[Netzwerk-Konfiguration#Komplettes_Bridging | Komplettes Bridging Strategie]] sieht vor, dass das komplette Netz ein einziges zusammenhängendes OSI-2 Segment bildet. Dieses Segment verbindet alle Teilnehmer. Dadurch sind je 2 Klienten in verschiedenen Teilen des Netzes immer über eine zu Grunde liegende Infrastruktur via &amp;quot;Ethernet&amp;quot; (WLAN / LAN) miteinander verbunden. Für die Infrastruktur wird batman-adv (http://www.open-mesh.org/) verwendet - sie wird als hierachisches [[Wikipedia:Peer-to-Peer | P2P-Netz]] realisiert. Somit: &amp;lt;br /&amp;gt;&lt;br /&gt;
''Daten zwischen Netzteilnehmer werden als Frames switched, das Netz bildet eine große Broadcast-/Link-Local-Multicast-Domäne.''&lt;br /&gt;
&lt;br /&gt;
=== Supernodes ===&lt;br /&gt;
[[Datei:Super-node-overview.png|thumb|300px|right|Abb. 1]]&lt;br /&gt;
[[supernode|Supernodes]] (auch: fastd-Server) sind Nodes, die VPN-Verbindungen von Nodes entgegen nehmen. Ein Supernode ist im Internet erreichbar, d.h. Nodes können VPN-Verbindungen dorthin initiieren, auch wenn sie sich z.B. hinter einem [[Wikipedia:Network_Address_Translation | NAT]] befinden. Supernodes verfügen über eine gute Internet-Anbindung (100MBit/s). Jeder Node hält typischerweise VPN-Verbindungen zu zwei verschiedenen Supernodes. Adressen und VPN-Schlüssel der Supernodes sind fest in der Node-Firmware verdrahtet.&lt;br /&gt;
&lt;br /&gt;
Supernodes werden beispielsweise auf dedizierten Servern ohne WLAN-Konnektivität betrieben.&lt;br /&gt;
Abb. 1 zeigt die Kommunikation zwischen Klienten, Nodes und Supernodes. Die Nodes A und B sind mit den Supernodes fastd1 und fastd2 verbunden. Über die eingezeichneten Verbindungen werden batman-adv Frames versendet. Der Klient ist im Infrastruktur-Netz an Node A eingebucht - es werden gewöhnliche Wireless-Lan-Frames verwendet. (''kein batman-adv'')&lt;br /&gt;
&lt;br /&gt;
=== Nodes ===&lt;br /&gt;
[[Datei:4.1-All-Bridging.png|thumb|300px|right|Abb. 2]]&lt;br /&gt;
Auf den Nodes existieren verschiedene Netze, die teilweise mit einander verbunden sind (Abb. 2). Jeder Node spannt dabei zwei Wireless-Lan-Netze auf und ggf. eine VPN-Verbindung auf.&lt;br /&gt;
&lt;br /&gt;
* ''wlan0'' wird als &amp;quot;Master&amp;quot;-Netz betrieben&lt;br /&gt;
* ''wlan1'' arbeitet als &amp;quot;Ad-Hoc&amp;quot;-Netz &lt;br /&gt;
* ''tap0'' ist das VPN-Interface. &lt;br /&gt;
&lt;br /&gt;
wlan1 und tap0 sind hierbei dem ''bat0'' Interface hinzugefügt. &lt;br /&gt;
&lt;br /&gt;
''Hinweis'': Aus technischen Gründen (u.a. vlan-Fähigkeit einzelner Geräte), weichen Interface-Namen in der Node-Firmware z.T. ab.&lt;br /&gt;
&lt;br /&gt;
== OSI-2: Data-Link-Layer ==&lt;br /&gt;
[[Datei:Osi-2.png|thumb|350px|right|Abb. 3]]&lt;br /&gt;
&lt;br /&gt;
Die komplettes Bridging Strategie sieht vor, dass alle Stationen zu einem OSI-2 Segment zusammen gefasst werden. Hierbei werden LAN, WLAN und VPN-Verbindungen via bridging verbunden. In diesem Absatz wird die Konfiguration der verschiedenen Komponenten des Segements erläutert. Abb. 3 illustriert das Segment. Es besteht aus den Super-Nodes fastd1, fastd2 und fastd3, den Nodes &amp;lt;tt&amp;gt;b0487aaeec16&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;f8d111883fea&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;d85d4cae420c&amp;lt;/tt&amp;gt;  sowie zwei Klienten. &lt;br /&gt;
* Nodes &amp;lt;tt&amp;gt;b0..&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;f8..&amp;lt;/tt&amp;gt; sind per Kabel mit dem Internet verbunden und bauen eine VPN-Verbindung zu jeweils zwei Supernodes auf.&lt;br /&gt;
* Node &amp;lt;tt&amp;gt;d8..&amp;lt;/tt&amp;gt; verfügt über keine kabelgebundene Verbindung zum Internet. Er ist via ad-hoc wlan mit der Wolke verbunden&lt;br /&gt;
* Entlang der blau eingezeichneten Verbindungen werden batman-adv Frames ausgetauscht.&lt;br /&gt;
Die Klienten werden daher via batman-adv TT-annouces im Mesh bekannt gemacht. Bridge-Loop-Avoidance (BLA) wird nicht verwendet (http://www.open-mesh.org/projects/batman-adv/wiki/Understand-your-batman-adv-network)&lt;br /&gt;
&lt;br /&gt;
=== Node-IDs ===&lt;br /&gt;
Jedem Node wird eine eindeutige ID zugewiesen. Sie entspricht der Hardware-Adresse gemäß Aufkleber - Trennzeichen werden entfernt. (Beispiel: Hardware-Adresse: &amp;lt;tt&amp;gt;F4:EC:38:E9:72:34&amp;lt;/tt&amp;gt; =&amp;gt; Node-ID: &amp;lt;tt&amp;gt;f4ec38e97234&amp;lt;/tt&amp;gt;. Verfügt ein Node über mehrere Interfaces, so wird die des ersten (gemäß Treiber- / Kernel Nummerierung) 2.4 GHz-Interface verwendet.&lt;br /&gt;
&lt;br /&gt;
=== Wireless LAN ===&lt;br /&gt;
Im Freifunk-KBU Netz wird IEEE 802.11g/n verwendet:&lt;br /&gt;
* Das Infrastruktur-Netz führt die SSID &amp;lt;tt&amp;gt;kbu.freifunk.net&amp;lt;/tt&amp;gt;. Für Klienten erscheint es als normaler Accesspoint.&lt;br /&gt;
* Das Ad-Hoc Netz nutzt die ESSID und BSSID: &amp;lt;tt&amp;gt;02:d1:11:37:fc:39&amp;lt;/tt&amp;gt;. Es ermöglicht die direkte Kommunikation zwischen verschiedenen Nodes.&lt;br /&gt;
&lt;br /&gt;
=== VPN ===&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
Verfügt ein Node über einen drahtgebundenen Zugang zum Internet, so baut er eine VPN-Verbindung auf. Als VPN wird fastd (https://projects.universe-factory.net/projects/fastd) verwendet. Fastd baut - ähnlich zu l2tp - per Default Verbindungen nur zwischen zu definierten Links auf. Somit ergibt sich keine Redundanz zur batman-adv Topologie-Ermittlung: Für batman-adv existiert ''nicht'' der transitive Abschluss aller konfigurierten fastd-Links als Broadcast-Medium. Das VPN arbeitet hier als Ersatz für ad-hoc wlan Verbindungen: Teile des Netzes zwischen denen keine Verbindungen bestehen, werden über das VPN zusammen gefasst.&lt;br /&gt;
Nodes ohne Verbindung zum VPN-Server bilden eine gemeinsames OSI-2 Segment, wenn eine Ad-Hoc Verbindung besteht oder wenn zwischen ihnen eine VPN-Verbindung manuell konfiguriert wurde&lt;br /&gt;
(fastd-Peers per Shell im Dateisystem des Nodes hinterlegt). Eine Verbindung zu Supernodes ist nicht zwingend erforderlich. Somit gilt:&lt;br /&gt;
&lt;br /&gt;
''Das VPN verbindet Ad-Hoc Mesh-Partitionen - Partitionen ohne VPN-Link zu Supernodes arbeiten autark.&lt;br /&gt;
&lt;br /&gt;
==== Schlüsselaustausch ==== &lt;br /&gt;
[[Datei:Key-submit.png|thumb|300px|right|Abb. 4]]&lt;br /&gt;
&lt;br /&gt;
Zum Aufbau einer fastd-Verbindung müssen beide Peers (Node und Supernode) vorab ihren Public Key ausgetauscht haben.&lt;br /&gt;
* Die Keys der Supernodes sind in der Firmware hinterlegt und stehen von Beginn an zur Verfügung.&lt;br /&gt;
* Die Keys der Nodes werden initial (beim ersten Systemstart) generiert und müssen danach übermittelt werden.&lt;br /&gt;
&lt;br /&gt;
Die Übermittlung erfolgt dabei über die Supernodes. Jeder Supernode betreibt einen RESTful-Webservice über den er Schlüssel entgegen nimmt (https://github.com/ff-kbu/fastd-service): Initiiert ein Node eine VPN-Verbindung zu einem Supernode zu übermittelt er im Vorfeld seinen Public-Key. Durch die Verwendung Elliptischer Kurven sind die Schlüssel hinreichend klein und können urlencoded übermittelt werden. Abb. 4 zeigt den Schlüsselaustausch zwischen Node und Supernode. Die Übermittlung geschieht bei jedem Boot des Nodes.&lt;br /&gt;
&lt;br /&gt;
Das Node-Register ist ebenfalls am Austausch beteiligt: Es kann Schlüssel ablehnen (bspw. wenn er bereits im Netz verwendet wird). In diesem Fall übermittelt das Node-Register HTTP-423 (Locked). Alle anderen Rückgabewerte oder Fehler werden vom Supernode ignoriert. Somit ist ein Schlüsselaustausch auch ohne verfügbares Node-Register möglich.&lt;br /&gt;
&lt;br /&gt;
Ändert sich der Schlüssel eines Nodes (z.B. durch Neuinstallation), so wird der neue Schlüssel anstelle des alten übermittelt und im VPN verwendet.&lt;br /&gt;
&lt;br /&gt;
=== Frame-Typen ===&lt;br /&gt;
Für die genutzten Frame-Typen gilt:&lt;br /&gt;
* vlan-Tagging wird nicht verwendet.&lt;br /&gt;
* VPN und ad-hoc: ''batman-adv''-Frames &lt;br /&gt;
* Infrastruktur-Netz: Gewöhnliche Wireless-Lan Frames (IEEE 802.11)&lt;br /&gt;
&lt;br /&gt;
=== MTU / PMTU ===&lt;br /&gt;
* wireless-lan Interfaces verwenden als MTU 1500 Byte&lt;br /&gt;
* fastd tap-Interfaces verwenden als MTU 1426 Byte&lt;br /&gt;
&lt;br /&gt;
''Hinweise: ''&lt;br /&gt;
&lt;br /&gt;
fastd-Pakete werden per default nicht fragmentiert. Wird eine VPN-Verbindung mit zu kleiner PMTU verwendet, werden die Pakete verworfen. Die MTU 1426 des fastd-Interfaces errechnet sich durch:&lt;br /&gt;
* PMTU des Uplinks: 1500 Byte - 8 Byte = 1492 Byte = MTU einer DSL-PPPoE Verbindung&lt;br /&gt;
* Overhead fastd: 1492 Byte - 20 Byte (IP) - 8 Byte (UDP) - 24 Byte (fastd) -  14 Byte (Inner Ethernet) = 1426 Byte&lt;br /&gt;
&lt;br /&gt;
Falls keine fastd-Verschlüsselung verwendet wird (Method: 'null') rediziert sich der fastd-Overhead von 24 Byte auf 1 Byte.&lt;br /&gt;
&lt;br /&gt;
Problematisch ist, dass Netcologne bei ADSL typischerweise nur eine PMTU von 1442 (d.h. 50 Byte weniger) zur Verfügung stellt. Hiermit ist fraglich, in wie weit 1426 als MTU für fastd-Interfaces sinnvoll ist (alternativ: 1376). Aktuell werden alle Supernodes ohne PMTU-Discovery betrieben (&amp;lt;tt&amp;gt;sysctl -w net.ipv4.ip_no_pmtu_disc=1&amp;lt;/tt&amp;gt;), so dass das Don't Fragment (DF)-Bit seitens fastd auf 0 gesetzt wird und keine Probleme durch Paketverlust auftreten. Auf den Nodes ist PMTU-Discovery derzeit aktiv - Probleme sind jedoch nicht erkennbar. Mittelfristig sollte das Fragmentierungsverhalten seitens fastd konfigurierbar sein: https://projects.universe-factory.net/issues/120&lt;br /&gt;
&lt;br /&gt;
Somit senden radvds eine MTU von 1350 (1376 - batman-adv Overhead) (&amp;lt;tt&amp;gt;AdvLinkMTU 1350&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== OSI-3: Network Layer ==&lt;br /&gt;
Zur Kommunikation im Freifunk-Netz und mit weiteren Netzen ist es erforderlich, IP-Adressen zu Vergeben und Pakete in andere Netze zu routen. Dieser Absatz beschreibt die verwendete Adressierungs- und Routing-Strategien im Freifunk-Netz. Hierbei wird insbesondere auf das Backbon-VPN (Tinc) und auf die Konfiguration der Supernodes eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== IPv4 ===&lt;br /&gt;
[[Datei:Osi-3-v4.png|thumb|400px|right|Abb. 5]]&lt;br /&gt;
Abb. 5 illustriert die verwendeten IPv4-Netze. Zur Vereinfachung sind nicht alle Supernodes und Server dargestellt. Von ''oben nach unten'' gesehen werden die Netze wie folgt verwendet (vgl. [[IP Subnetze]]).&lt;br /&gt;
&lt;br /&gt;
==== Mesh ====&lt;br /&gt;
In der Mesh-Wolke (dem OSI-2 Segment) werden Adressen aus dem Bereich &amp;lt;tt&amp;gt;172.27.0.0/18&amp;lt;/tt&amp;gt; verwendet. &lt;br /&gt;
* Supernodes ist eine statische Adresse fest zugewiesen. fastd3 verwendet die Adresse &amp;lt;tt&amp;gt;172.27.8.1&amp;lt;/tt&amp;gt; während fastd4 &amp;lt;tt&amp;gt;172.27.16.1&amp;lt;/tt&amp;gt; nutzt. &lt;br /&gt;
* Nodes besitzen keine IPv4 Adresse - sie sind nicht Teil des IPv4-Netzes. (Evtl. bald doch - siehe Abschnitt [[Architektur#Anycast | Anycast]])&lt;br /&gt;
* Jedem Supernode ist ein /21 Netz zugeteilt. Hier: fastd3: &amp;lt;tt&amp;gt;172.27.8.0/21&amp;lt;/tt&amp;gt;, fastd4: &amp;lt;tt&amp;gt;172.27.16.0/21&amp;lt;/tt&amp;gt;. Sie verfügen somit über je 2048 Adressen. &lt;br /&gt;
** Jeder Supernode betreibt einen DHCP-Server, der Adressen aus dem zugeteilten Bereich in der Mesh-Cloud vergibt. fastd3 vergibt beispielsweise Adressen aus dem Bereich &amp;lt;tt&amp;gt;172.27.8.10&amp;lt;/tt&amp;gt; - &amp;lt;tt&amp;gt;172.27.15.255&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Jeder Klient im Mesh-Netz bezieht eine IP von einem Supernode. Er nutzt ihn als ''Default-Router'' und ''DNS-Server''. Die Auswahl des Supernodes erfolgt durch den batman-adv Gateway Mode (Vgl. http://www.open-mesh.org/projects/batman-adv/wiki/Gateways).&lt;br /&gt;
&lt;br /&gt;
==== Backbone-VPN / Tinc ====&lt;br /&gt;
Alle Supernodes und sonstigen Server des Freifunk-KBU-Netztes sind untereinander über ein dezentrales VPN (Tinc - vgl. http://tinc-vpn.org/) verbunden.&lt;br /&gt;
* Das Netz verwendet den Adressbereich &amp;lt;tt&amp;gt;172.27.255.0/24&amp;lt;/tt&amp;gt;. Bspw. verwendet fastd3 die Adresse &amp;lt;tt&amp;gt;172.27.55.9&amp;lt;/tt&amp;gt; -- fastd4 hingegen &amp;lt;tt&amp;gt;172.27.255.10&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Das VPN wird als Transport-Netz benutzt: IP-Pakete mit fremden Quell- und Zieladressen werden darüber transportiert.&lt;br /&gt;
* Verfügt ein Supernode über Kontakt zu weiteren Netzten  so annonciert er eine entsprechende Route. In der Abbildung kann fastd4 über das Tor-Netzwerk Verbindungen zum WWW aufbauen. Er annonciert daher die Route &amp;lt;tt&amp;gt;0.0.0.0/0&amp;lt;/tt&amp;gt; (Default Route). Verfügt ein Node über Kontakt im ChaosVPN (http://wiki.hamburg.ccc.de/ChaosVPN) oder IC-VPN (http://wiki.freifunk.net/IC-VPN) so annonciert er diese Netzbereiche.&lt;br /&gt;
* Das VPN ist verschlüsselt. Nutzlast wie z.B. Service-Aufrufe müssen daher nicht zusätzlich per SSL/TLS gesichert werden.&lt;br /&gt;
* Jeder Router annonciert zusätzlich das im zugeteilte Netz -- fastd3: &amp;lt;tt&amp;gt;172.27.8.0/21&amp;lt;/tt&amp;gt;,  fastd4: &amp;lt;tt&amp;gt;172.27.16.0/21&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Der Schlüsselaustausch erfolgt via github (https://github.com/ff-kbu/bbkeys).&lt;br /&gt;
Paul nimmt hierbei eine Sonderrolle ein: Als einziger, regulärer Router zum Internet kann er als IPv4- und IPv6-Default-Router verwendet werden. Paul ist kein Supernode sondern wickelt lediglich externen Traffic ab.&lt;br /&gt;
&lt;br /&gt;
==== Anycast ====&lt;br /&gt;
&amp;lt;todo nicht implementiert&amp;gt; &lt;br /&gt;
Jeder Node ist über das Infrastruktur-Netz auf der IP &amp;lt;tt&amp;gt;172.27.0.1&amp;lt;/tt&amp;gt; erreichbar. Hierüber können Klienten Status-Informationen des Nodes beziehen, bei dem sie eingebucht sind.&lt;br /&gt;
&amp;lt;/todo nicht implementiert&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IPv6 ===&lt;br /&gt;
[[Datei:Osi-3-v6.png|thumb|450px|right|Abb. 6]]&lt;br /&gt;
Abb. 6 illustriert die IPv6 Konfiguration. Wie zuvor bei IPv4 sind zur Vereinfachung nicht alle Supernodes und Server dargestellt. Für IPv6 werden die folgenden Addressbereiche verwendet:&lt;br /&gt;
* &amp;lt;tt&amp;gt;fdd3:5d16:b5dd::/48&amp;lt;/tt&amp;gt; Unique Local Addresses (ULA)&lt;br /&gt;
* &amp;lt;tt&amp;gt;2001:67C:20A0:B100::/56&amp;lt;/tt&amp;gt; Global.&lt;br /&gt;
Die Verwendung der Public IPv6 Address ermöglicht, dass alle Teilnehmer des Freifunk-Netzes extern erreichbar sind. &lt;br /&gt;
&lt;br /&gt;
Von ''oben nach unten'' werden die Netze wie folgt verwendet:&lt;br /&gt;
&lt;br /&gt;
==== Mesh ====&lt;br /&gt;
Im Mesh werden ULA und global gültige IPv6-Addressen verwendet. Jedem Supernode ist ein eigenes, globales /64 Subnet zugewiesen. Der Supernode verwendet die Host-ID 1. Hier: fastd3: &amp;lt;tt&amp;gt;2001:67c:20a0:b104::1/6&amp;lt;/tt&amp;gt;, fastd4: &amp;lt;tt&amp;gt;2001:67c:20a0:b105::1/64&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Supernodes versenden Router Advertisments (RA) im kompletten Segment. Nodes und Klienten erhalten aus jedem Pool eine Addresse (stateless autoconfiguration). Jeder Supernode routed IPv6-Pakete zwischen Mesh-Cloud und Internet.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Da der Klient das Default-Gateway zufällig wählt, werden Pakete idR auf verschiedenen Routes zugestellt:&lt;br /&gt;
* Sendet der Klient ein Paket, so wird der vom Klienten zufällig gewählte Supernode genutzt&lt;br /&gt;
* Empfängt der Klient ein Paket, so richtet sich der Supernode nach der verwendeten Public IPv6 Addresse des Klienten: es wird der Supernode verwendet, aus dessem Subnet die Adresse stammt&lt;br /&gt;
&lt;br /&gt;
==== Backbone-VPN / Tinc ====&lt;br /&gt;
Im Backbone-VPN wird IPv6 analog zu IPv4 verwendet (vgl. [[Architektur#Backbone-VPN_.2F_Tinc | Backbone-VPN / Tinc (IPv4)]]. Jedem Teilnehmer ist eine IP aus dem Bereich &amp;lt;tt&amp;gt;fdd3:5d16:b5dd:3::/64&amp;lt;/tt&amp;gt; zugewiesen. Die Endziffer entspricht der von IPv4. Bspw. verfügt Paul über die Adressen &amp;lt;tt&amp;gt;172.27.255.3&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;fdd3:5d16:b5dd:3::3&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supernodes annoncieren fremde Public-V6 Netze des Mesh-Segments mit geringer Priorität im Tinc-Backone. Somit ist sichergestellt, dass bei einem Ausfall eines Supernodes die Addressen weiterhin verwendet werden können. Im kompletten Mesh wird &amp;lt;tt&amp;gt;fdd3:5d16:b5dd::/64&amp;lt;/tt&amp;gt; zur internen Adressierung genutzt.&lt;br /&gt;
&lt;br /&gt;
==== Sonstige Bereiche / ULA ====&lt;br /&gt;
Einzelnen Anwendungen stehen komplette /64-Netze zur Verfügung gestellt. Entsprechende Adressen sind in der Firmware fest verdrahtet. Die Nutzung eigener /64 Netze ermöglicht es, Server zu transparent migrieren ohne auf DNS angewiesen zu sein. Beispiel: collectd verwendet &amp;lt;tt&amp;gt;fdd3:5d16:b5dd:2::/64&amp;lt;/tt&amp;gt;, der collectd-Server ist unter &amp;lt;tt&amp;gt;fdd3:5d16:b5dd:2::1&amp;lt;/tt&amp;gt; erreichbar.&lt;br /&gt;
&lt;br /&gt;
== OSI-7: Anwendungen ==&lt;br /&gt;
TBD - Hier kommen hin:&lt;br /&gt;
* Register&lt;br /&gt;
* collectd&lt;br /&gt;
* DNS&lt;br /&gt;
* Ggf. Squid&lt;br /&gt;
&lt;br /&gt;
== Ausblick / Probleme / TODOs / Offene Punkte ==&lt;br /&gt;
# Anycast Info-Page implementieren&lt;br /&gt;
# In Tinc 1.0 wird das annoncieren beliebiger Netze hackish, da [http://www.tinc-vpn.org/documentation-1.1/tincctl.8 tincctl] noch nicht nutzbar ist. (Ggf. Scripten)? Alternativ können wir auch OSPF auf allen Tinc-Verbindungen nutzen - Nachteil: Komplexität.&lt;br /&gt;
# Wenn Lübeck LFF 0.3.2.1 release hat: Filter für Broadcast / Multicast dokumentieren. -&amp;gt; Weniger Last auf den fastd-Gateways.&lt;br /&gt;
# DNS-Caches auf den Supernodes _wirklich_ implementieren - bislang leiten wir ganz &amp;quot;lame&amp;quot; an Paul weiter.&lt;br /&gt;
&lt;br /&gt;
== Notizblock ==&lt;br /&gt;
Nix zu sehen - bitte weitergehen.&lt;br /&gt;
&amp;lt;strike&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Im OSI-2 Segment werden die folgenden Adressen verwendet:&lt;br /&gt;
* 2001:67c:20a0:b102::/64&lt;br /&gt;
* fdd3:5d16:b5dd::/64&lt;br /&gt;
* fdd3:5d16:b5dd:1::/64&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration Super-Nodes ===&lt;br /&gt;
Jeder Super-Node betreibt einen DHCPv4-Server, mit dem er die Konfiguration für die Klienten ausliefert. Gleichzeitig betreibt er einen DNS-Cache - optional ist der Betrieb eines transparenten HTTP-Proxies denkbar.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Planung sieht 8 Super-Nodes für das FF-KBU vor, auf denen DHCP-Server betrieben werden. Keys und DNS-Namen sind in der Firmware hinterlegt. Bei Bedarf können weitere Super-Nodes hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration Nodes ===&lt;br /&gt;
''&amp;lt;todo&amp;gt; (TODO: Implementierung in der Firmware ausstehend).''&lt;br /&gt;
&lt;br /&gt;
Nodes verwenden im Uplink-Netz zusätzlich den ULA-Bereich&lt;br /&gt;
*fdd3:5d16:b5dd:1::/64 &lt;br /&gt;
Jeder Node kann über seine Public-IPv6, ULA-IPv6, Link-Local-IPv6 Adressen und die IPv4-Adresse seines WAN-Uplink-Netzes erreicht werden. Jedem Node wird dadurch eine eindeutige Adresse aus fdd3:5d16:b5dd::/64 zugewiesen, die aus allen Netzen - mit denen er verbunden ist erreicht werden kann &lt;br /&gt;
&lt;br /&gt;
Gleichzeitig verwendet jeder Node die anycast-Adresse 172.27.0.255, die nur aus dem Infrastruktur-Netz erreichbar ist. Hierdurch kann ein Client explizit abfragen, mit welchem Node er verbunden ist. &amp;lt;/todo&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IPv6 / RADVD ===&lt;br /&gt;
Hinweis: Aktell nicht so umgesetzt - Tinc in Squeeze hat da afair Probleme TODO: Umsetzen.&lt;br /&gt;
Super-Nodes betreiben radvd-Server im Adressbereich 2001:67c:20a0:b102::/64 und annoncen sich selbst als Router&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;/div&gt;</summary>
		<author><name>Christof</name></author>
	</entry>
</feed>