Map: Unterschied zwischen den Versionen

Aus Freifunk Köln, Bonn und Umgebung
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „{{TOCright}} Kategorie:Infrastruktur == Voraussetzungen == https://en.wikipedia.org/wiki/Supernode_(networking) wikipedia-article Benötigte Soft…“)
 
(Der Seiteninhalt wurde durch einen anderen Text ersetzt: „{{TOCright}} Kategorie:Infrastruktur == Voraussetzungen == Benötigte Software 1) ---- Du benötigst ausserdem: <br /> * ei…“)
Zeile 3: Zeile 3:


== Voraussetzungen ==
== Voraussetzungen ==
[[https://en.wikipedia.org/wiki/Supernode_%28networking%29 wikipedia-article]]


Benötigte Software
Benötigte Software


1) [[https://projects.universe-factory.net/projects/fastd fastd]] Mesh-vpn
1) ----
 
2) [[https://bmx6.net/projects/bmx6 bmx6]] BackboneMeshProtokoll
 
3) [[http://www.open-mesh.org/projects/open-mesh/wiki batman-adv]] ClientMeshProtokoll
 
4) [[http://www.tinc-vpn.org/ tinc]] Mesh-vpn
 
5) OS: debian jessie(or whatever you like)


Du benötigst ausserdem: <br />
Du benötigst ausserdem: <br />


* eine private IPv4/IPv6 Adresse und ein Subnetz für die Clients
* eine private IPv4/IPv6 Adresse
* eine IPv4/IPv6 Adresse für das Backbone-Netz


Diese kannst du unter dem Artikel IP Netze selbst zuteilen, oder nachlesen, welches deine sind, wenn es jemand anderes dir schon zuteilte.
Diese kannst du unter dem Artikel IP Netze selbst zuteilen, oder nachlesen, welches deine sind, wenn es jemand anderes dir schon zuteilte.
(nur bei öffentlichen Supernodes)
== Vorbereitungen ==
In der /etc/sysctl.conf muss folgendes mit einem Editor hinzugefügt werden:
<pre>
net.ipv4.ip_forward=1
net.ipv4.ip_no_pmtu_disc=1
net.ipv4.route.flush=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.autoconf=0
net.ipv6.conf.all.accept_ra=0
</pre>
Danach die /etc/sysctl.conf neu einlesen:
<pre>
sysctl -p
</pre>
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen, z.B. so:
<pre>
echo "deb http://repo.universe-factory.net/debian/ sid main" >>/etc/apt/sources.list
</pre>
GPG-Key importieren:
<pre>
gpg --keyserver pgpkeys.mit.edu --recv-key  16EF3F64CB201D9C
gpg -a --export 16EF3F64CB201D9C | apt-key add -
apt-get update
</pre>
== Batman-adv (compat14 (Hood Bonn))==
=== Installation ===
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.
<pre>
apt-get install batman-adv-dkms
echo "batman-adv" >> /etc/modules
</pre>
==== debian jessie ====
batman 14 aus folgender quelle installieren:
<pre>
http://repo.universe-factory.net/debian/ sid main
</pre>
dann dkms die richtige version beibringen:
<pre>
dkms remove batman-adv/2013.4.0 --all
dkms --force install batman-adv/2013.4.0
</pre>
und mit apt-pinning die richtige version für batctl erzwingen, in /etc/apt/preferences.d/batctl.pref:
<pre>
Package: batctl
Pin: origin repo.universe-factory.net
Pin-Priority: 1000
</pre>
und apt-get install batctl
== Batman-adv (compat15)==
=== Installation ===
Update and install:
apt-get update
apt-get install git make gcc build-essential linux-headers-$(uname -r) pkg-config libgps-dev libnl-3-dev libjansson-dev fastd
Install Batman, batctl and alfred
mkdir /opt/freifunk
cd $_
git clone git://git.open-mesh.org/batman-adv.git
cd batman-adv
git checkout v2015.1
make
make install
cd ../
git clone http://git.open-mesh.org/batctl.git
cd batctl
git checkout v2015.1
make
make install
cd ../
git clone http://git.open-mesh.org/alfred.git
cd alfred
git checkout v2014.4.0
make
make install
== fastd ==
=== Installation ===
<pre>
apt-get install fastd curl
</pre>
=== Konfiguration ===
==== fastd.conf ====
"[YOUR SECRET KEY HERE]" Sollte dabei durch den fastd-secret-key ersetzt werden (erfragen)
<pre>
mkdir /etc/fastd/mesh-vpn;
cat > /etc/fastd/mesh-vpn/fastd.conf << EOF
# Log warnings and errors to stderr
#log level warn;
log level error;
# Log everything to a log file
#log to "/var/log/fastd-mesh-vpn.log" level debug;
log to "/var/log/fastd-mesh-vpn.log" level warn;
# Set the interface name
interface "mesh-vpn";
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20
method "salsa2012+gmac";
method "null";
# Bind to a fixed port, IPv4 only
bind 0.0.0.0:10000;
# Secret key generated by 'fastd --generate-key'
secret "[YOUR SECRET KEY HERE]";
# Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)
# (see MTU selection documentation)
mtu 1426;
# Include peers from the directory 'peers'
include peers from "peers";
include peers from "backbone";
on up "./fastd-up";
# on down "./fastd-down";
on establish "
        NODE_ID=\${PEER_NAME:0:12}
        /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 &
";
on disestablish "
        NODE_ID=\${PEER_NAME:0:12}
        /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 &
";
EOF
</pre>
Hinweise:
* Username / Password stehen im Keypass.
* Viewpoint (hier: fastd2) anpassen
* 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.
* Die Calls auf der Script sind synchron - Daher "&". fastd blockiert solange das Script nicht terminiert ist. (Zumindest Stand 04/2014)
Ordnerstruktur anlegen:
<pre>
mkdir /etc/fastd/mesh-vpn/backbone
mkdir /etc/fastd/mesh-vpn/peers
chown www-data /etc/fastd/mesh-vpn/peers
</pre>
==== Backbone ====
Backbone Keys einrichten:
<pre>
$:/etc/fastd/mesh-vpn# ls backbone/
fastd1 fastd2 fastd3 fastd4 fastd5 fastd6 fastd7 fastd8
$:/etc/fastd/mesh-vpn# cat backbone/*
key "4f856d95bd596ac7724edca73a19e6e9d142b374df27166bb1a78e58785efc59";
remote ipv4 "fastd1.kbu.freifunk.net" port 10000;
key "e1916b66c4f8a795e217877cf72607d952e796463c7024dd9a6a47ae2929bc10";
remote ipv4 "fastd2.kbu.freifunk.net" port 10000;
key "d56181dfe9b5ac7cfe68a94c0ce406322a9924286a751673da0dcb28ad5218b0";
remote ipv4 "fastd3.kbu.freifunk.net" port 10000;
key "9b3f65f99963343e2785c8c4fad65e70b73ee7e1205d63bd84f3e2decb53e621";
remote ipv4 "fastd4.kbu.freifunk.net" port 10000;
key "6e4546121d16e7189715aef8ceb78ab58d59462720969318445f97b4301374d1";
remote ipv4 "fastd5.kbu.freifunk.net" port 10000;
key "2a2c69dbb3b9fd90d7eb8e2f70be70b472d811cd4f3743ad9f5002d14b5c94cd";
remote ipv4 "fastd6.kbu.freifunk.net" port 10000;
key "68de6815a89270c8eaf7832deedb8da098aad2ae5793cd2cd55dec3541ad28f2";
remote ipv4 "fastd7.kbu.freifunk.net" port 10000;
key "b41a9714b1178ce428b15af0b6055cc204b39af2088ef3b371d8c36219eedd1e";
remote ipv4 "fastd8.kbu.freifunk.net" port 10000;
</pre>
[[https://github.com/ff-kbu/fff/tree/v0.3-generic/files/lib/freifunk/mesh-vpn/backbone fastd-backbone]] for more
==== fastd-up ====
<pre>
cat > /etc/fastd/mesh-vpn/fastd-up << EOF
#/bin/sh
/sbin/ip link set dev mesh-vpn up
/usr/sbin/batctl if add mesh-vpn
/usr/sbin/batctl gw_mode server
/sbin/ifconfig bat0 [DEINE IPv4 Addresse hier] netmask 255.255.192.0 up
/sbin/ifconfig bat0:0 172.27.0.2 netmask 255.255.192.0 up
/sbin/ip rule add from 172.27.0.0/18 table ffkbu
/sbin/ip route add 172.27.0.0/18 dev bat0 table ffkbu
/sbin/ip route flush cache
EOF
</pre>
fastd-up ausführbar machen:
<pre>
chmod +x /etc/fastd/mesh-vpn/fastd-up
</pre>
== Backbone Netz (tinc) ==
=== Installation ===
<pre>
apt-get install tinc bridge-utils
</pre>
=== Konfiguration ===
<pre>
mkdir /etc/tinc/backbone
echo "backbone" >> /etc/tinc/nets.boot  # Dies sagt tinc, dass es das Netz "backbone" starten soll
cd /etc/tinc/backbone
# Public keys der anderen Teilnehmer:
git clone https://github.com/ff-kbu/bbkeys
ln -s bbkeys/ hosts
</pre>
Jetzt fehlt noch des eigene Public/Private Keypaar. <br />
Die Keys sollten in /etc/tinc/backbone gespeichert werden.<br />
Den Public-Key in den Namen des Supernodes umbenennen und nach bbkeys/ kopieren.
<pre>
tincd -K
cp rsa_key.pub bbkeys/[supernodename]
</pre>
Bevor jetzt der pub-key gepushed werden kann, muss tinc noch gesagt werden, welche Adressen über diesen Node zu routen sind. <br />
Also im .pub key:
<pre>
Subnet=172.27.255.X/32
Subnet=172.27.Y.0/21
Subnet=fdd3:5d16:b5dd:3::X/128
Subnet=2001:67c:20a0:b10Z::/64
-----BEGIN RSA PUBLIC KEY-----
</pre>
Und schliesslich:
<pre>
cd bbkeys; git push;
</pre>
==== tinc.conf ====
<pre>
cat > /etc/tinc/backbone/tinc.conf << EOF
Name=[supernodename]
Device=/dev/net/tun
Mode=router
Compression=9
ConnectTo=paula
ConnectTo=paul
EOF
</pre>
==== tinc-up ====
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.
<pre>
cat > /etc/tinc/backbone/tinc-up << EOF
#!/bin/sh
ifconfig \$INTERFACE 172.27.255.[Backbone IPv4 Adresse hier] netmask 255.255.255.0 up
ip route add 172.27.255.0/24 dev backbone table ffkbu
ip route add default dev backbone table ffkbu
ip -6 addr add fdd3:5d16:b5dd:3::X/64 dev \$INTERFACE
ip -6 addr add 2001:67c:20a0:b10Y::1/128 dev \$INTERFACE
ip -6 route add default via fdd3:5d16:b5dd:3::3
EOF
</pre>
Auch diese Datei muss ausführbar gemacht werden:
<pre>
chmod +x /etc/tinc/backbone/tinc-up
</pre>
Danach sollte der Ordner etwa so aussehen:
<pre>
$:/etc/tinc/backbone# ls
bbkeys
hosts -> bbkeys
rsa_key.priv
rsa_key.pub
tinc.conf
tinc-up
</pre>
== Routing ==
we need to set up policy based routing.
<pre>
echo "200 ffkbu" >> /etc/iproute2/rt_tables
</pre>
fastd-up und tinc-up erledigen den rest: <br />
ip rule ls
<pre>
ip rule ls
0:      from all lookup local
32765:  from 172.27.0.0/18 lookup ffkbu
32766:  from all lookup main
32767:  from all lookup default
</pre>
ip route list table ffkbu
<pre>
ip route list table ffkbu
default dev backbone  scope link
172.27.0.0/18 dev bat0  scope link
172.27.255.0/24 dev backbone  scope link
</pre>
== IPv4 DHCP ==
=== Installation ===
<pre>
apt-get install isc-dhcp-server
</pre>
=== Konfiguration ===
<pre>
cat > /etc/dhcp/dhcpd.conf << EOF
option domain-name "mesh.kbu.freifunk.net";
option domain-name-servers 85.214.20.141, 213.73.91.35;
default-lease-time 60;
max-lease-time 720;
log-facility local7;
subnet 172.27.0.0 netmask 255.255.192.0 {
range 172.27.X.10 172.27.Y.255;
option routers 172.27.X.1;
}
EOF
</pre>
== IPv6 ==
=== Installation ===
<pre>
apt-get install radvd
</pre>
=== Konfiguration ===
<pre>
cat > /etc/radvd.conf << EOF
interface bat0 {
AdvSendAdvert on;
AdvHomeAgentFlag off;
MinRtrAdvInterval 10;
MaxRtrAdvInterval 30;
AdvOtherConfigFlag on;
AdvSourceLLAddress off;
AdvLinkMTU 1350; #1442 - fastd - batman-adv - See wiki for details
prefix 2001:67c:20a0:b10Y::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
prefix fdd3:5d16:b5dd::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
EOF
/etc/init.d/radvd start
</pre>
=== UDP-Queue Größe ===
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.
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.
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:
2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable
2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable
2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable
2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable
2013-03-30 12:32:01 +0100 --- Warning: sendmsg: Resource temporarily unavailable
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:
#/etc/sysctl.conf
net.core.rmem_max=83886080
net.core.wmem_max=83886080
net.core.rmem_default=83886080
net.core.wmem_default=83886080
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.
=[[Anycast_DNS]]=
{{:Anycast_DNS}}

Version vom 21. Mai 2016, 14:54 Uhr

Voraussetzungen

Benötigte Software

1) ----

Du benötigst ausserdem:

  • eine private IPv4/IPv6 Adresse

Diese kannst du unter dem Artikel IP Netze selbst zuteilen, oder nachlesen, welches deine sind, wenn es jemand anderes dir schon zuteilte.