Supernode: Unterschied zwischen den Versionen
(Kategorisiert) |
|||
(136 dazwischenliegende Versionen von 11 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{TOCright}} | {{TOCright}} | ||
[[Kategorie:Infrastruktur]] | [[Kategorie:Infrastruktur]] | ||
[[Kategorie:Anleitungen]] | |||
{{Mithilfe}} | |||
<span style="color: #C00; font-weight:bold; ">Hinweis:</span> Bei Fragen oder Problemen wende Dich bitte an die [[Mailingliste]]. Die Anleitung hier wurde von vielen Leuten geschrieben - es hilft in der Regel nur wenig, wenn Du jemanden persönlich per E-Mail kontaktierst. | |||
== Voraussetzungen == | == Voraussetzungen == | ||
Zeile 22: | Zeile 25: | ||
* eine IPv4/IPv6 Adresse für das Backbone-Netz | * eine IPv4/IPv6 Adresse für das Backbone-Netz | ||
Diese kannst du unter dem Artikel | Diese kannst du unter dem Artikel [[IP_Subnetze]] selbst zuteilen, oder nachlesen, welches deine sind, wenn es jemand anderes dir schon zuteilte. | ||
(nur bei öffentlichen Supernodes) | (nur bei öffentlichen Supernodes) | ||
== Vorbereitungen == | == Vorbereitungen == | ||
In der /etc/sysctl.conf muss folgendes mit einem Editor hinzugefügt werden: | In der /etc/sysctl.conf muss folgendes mit einem Editor hinzugefügt werden: | ||
Zeile 34: | Zeile 38: | ||
net.ipv6.conf.all.autoconf=0 | net.ipv6.conf.all.autoconf=0 | ||
net.ipv6.conf.all.accept_ra=0 | net.ipv6.conf.all.accept_ra=0 | ||
# If Supernode running on USB Stick/FlashCard with low memory, this option prevents swapping until it is definitely needed | |||
vm.swappiness=1 | |||
</pre> | </pre> | ||
Zeile 46: | Zeile 52: | ||
</pre> | </pre> | ||
GPG-Key importieren: | GPG-Key importieren und apt via https ermöglichen: | ||
<pre> | <pre> | ||
gpg --keyserver pgpkeys.mit.edu --recv-key 16EF3F64CB201D9C | gpg --keyserver pgpkeys.mit.edu --recv-key 16EF3F64CB201D9C | ||
gpg -a --export 16EF3F64CB201D9C | apt-key add - | gpg -a --export 16EF3F64CB201D9C | apt-key add - | ||
apt-get install apt-transport-https | |||
apt-get update | apt-get update | ||
</pre> | </pre> | ||
== Batman-adv (( | == Batman-adv (compat14 (Hood Bonn))== | ||
=== Installation === | === Installation === | ||
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren. | Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren. | ||
Zeile 78: | Zeile 87: | ||
</pre> | </pre> | ||
und apt-get install batctl | 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 libnl-genl-3-dev | |||
Install Batman, batctl and alfred | |||
mkdir /opt/freifunk | |||
cd $_ | |||
git clone git://git.open-mesh.org/batman-adv.git | |||
cd batman-adv | |||
git checkout v2016.3 | |||
make | |||
make install | |||
cd ../ | |||
git clone http://git.open-mesh.org/batctl.git | |||
cd batctl | |||
git checkout v2016.3 | |||
make | |||
make install | |||
Wird künftig nicht mehr benötigt. Wer's trotzdem installieren mag: | |||
cd ../ | |||
git clone http://git.open-mesh.org/alfred.git | |||
cd alfred | |||
git checkout v2014.4.0 | |||
make | |||
make install | |||
== fastd == | == fastd == | ||
Zeile 85: | Zeile 130: | ||
apt-get install fastd curl | apt-get install fastd curl | ||
</pre> | </pre> | ||
'''Add Directories''' | |||
mkdir /etc/fastd/mesh-vpn | |||
mkdir /etc/fastd/mesh-vpn/backbone | |||
=== Konfiguration === | === Konfiguration === | ||
"[YOUR SECRET KEY HERE]" | |||
"[YOUR SECRET KEY HERE]" sollte dabei durch den fastd-secret-key ersetzt werden. Den Key müsst ihr selbst erstellen. Dies geht mit dem Befehl: | |||
fastd --generate-key | |||
Schreibt am besten euch public und private key woanders noch auf. Wenn ihr den verliert, können Nodes nicht mehr mit euch connecten, solange diese nicht umkonfiguriert werden. | |||
In /etc/fastd/mesh-vpn/fastd.conf folgendes hinzufügen: | |||
==== /etc/fastd/mesh-vpn/fastd.conf ==== | |||
<pre> | <pre> | ||
# Log warnings and errors to stderr | # Log warnings and errors to stderr | ||
#log level warn; | #log level warn; | ||
log level error; | log level error; | ||
drop capabilities yes; | |||
forward no; | |||
hide ip addresses yes; | |||
hide mac addresses yes; | |||
# Log everything to a log file | # 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 debug; | ||
log to "/var/log/fastd-mesh-vpn.log" level warn; | #log to "/var/log/fastd-mesh-vpn.log" level warn; | ||
# Set the interface name | # Set the interface name | ||
interface "mesh-vpn"; | interface "mesh-vpn"; | ||
mode tap; | |||
# Support xsalsa20 and aes128 encryption methods, prefer xsalsa20 | # Support xsalsa20 and aes128 encryption methods, prefer xsalsa20 | ||
method "salsa2012+ | method "salsa2012+umac"; | ||
# Bind to a fixed port, IPv4 only | # Bind to a fixed port, IPv4 only | ||
bind 0.0.0.0:10000; | bind 0.0.0.0:10000; | ||
mtu 1312; | |||
pmtu auto; | |||
secure handshakes yes; | |||
# Secret key generated by 'fastd --generate-key' | # Secret key generated by 'fastd --generate-key' | ||
secret "[YOUR SECRET KEY HERE]"; | secret "[YOUR SECRET KEY HERE]"; | ||
# Include peers from the directory 'peers' | # Include peers from the directory 'peers' and set max connections | ||
peer group "backbone" { | |||
include peers from "backbone"; | |||
peer limit 64; | |||
} | |||
on up sync "./on-up"; | |||
# Allows all peers to connect. | |||
on verify async "true"; | |||
</pre> | |||
Optional: Wenn die Node teil einer grösseren Hood werden soll, entsprechende Backbone Node Keys in das Verzeichnis /etc/fastd/mesh-vpn/backbone legen. Vorzuziehen ist aber entweder eine eigene Fastdinstanz oder eine Tinc VPN Verbindung (AES-NI) um sich an eine hood (Layer2 Mesh mit Batman-adv) zu verbinden, dies ist performanter. | |||
Der IP v4-Range bezieht sich auf euren selbst gewählten Bereich, welcher unter https://pad.freifunk.net/p/kbuip dokumentiert ist. | |||
==== fastd-up ==== | ==== /etc/fastd/mesh-vpn/on-up ==== | ||
<pre> | <pre> | ||
#!/bin/sh | |||
/sbin/ip link set dev mesh-vpn address [MacAdresseAusdenken] | |||
/sbin/ip link set dev mesh-vpn up | /sbin/ip link set dev mesh-vpn up | ||
/ | batctl if add mesh-vpn | ||
batctl it 10000 | |||
batctl bl 1 | |||
batctl gw_mode server 200MBit/200MBit # anpassen | |||
/sbin/ip rule add from | /sbin/ip rule show | grep 'from 10.0.0.0/8 lookup freifunk' | ||
/sbin/ip route add | if [ $? -eq 1 ]; then | ||
/sbin/ip rule add from 10.0.0.0/8 table freifunk | |||
fi | |||
/sbin/ip route add [lokaleIPv4Range[Ex:10.123.234.0/24]] dev bat0 table freifunk | |||
/sbin/ip route flush cache | /sbin/ip route flush cache | ||
</pre> | </pre> | ||
on-up ausführbar machen: | |||
<pre> | <pre> | ||
chmod +x /etc/fastd/mesh-vpn/ | chmod +x /etc/fastd/mesh-vpn/on-up | ||
</pre> | </pre> | ||
=== | == BmxBone Netz == | ||
Jetzt müsst ihr euch entscheiden, welches VPN Programm ihr für das BmxBone nutzen wollt: | |||
* wenn ihr eine CPU mit AES-NI habt, oder eine CPU mit deutlich mehr als 1GHz nehmt tinc | |||
* wenn ihr eine langsame CPU sub 1GHz oder sogar eine ARM CPU, sollte fastd besser sein | |||
=== Installation mit tinc === | |||
=== Installation === | |||
<pre> | <pre> | ||
apt-get install tinc bridge-utils | apt-get install tinc bridge-utils make build-essential | ||
</pre> | </pre> | ||
Wir müssen bmx6 noch kompilieren: | |||
mkdir /opt/freifunk/ | |||
cd $_ | |||
git clone git://qmp.cat/bmx6.git | |||
alternative: https://github.com/axn/bmx6.git | |||
cd bmx6 | |||
make | |||
make install | |||
=== Konfiguration === | === Konfiguration === | ||
<pre> | <pre> | ||
mkdir /etc/tinc/ | mkdir /etc/tinc/tbmxbone | ||
echo " | echo "tbmxbone" >> /etc/tinc/nets.boot # Dies sagt tinc, dass es das Netz "tbmxbone" starten soll | ||
cd /etc/tinc/ | cd /etc/tinc/tbmxbone | ||
# Public keys der anderen Teilnehmer: | # Public keys der anderen Teilnehmer: | ||
git clone https://github.com/ff-kbu/ | git clone https://github.com/ff-kbu/tbmxbone hosts | ||
</pre> | </pre> | ||
Jetzt fehlt noch des eigene Public/Private Keypaar. <br /> | Jetzt fehlt noch des eigene Public/Private Keypaar. <br /> | ||
Die Keys sollten in /etc/tinc/ | Die Keys sollten in /etc/tinc/tbmxbone gespeichert werden.<br /> | ||
Den Public-Key in den Namen des Supernodes umbenennen und nach | Den Public-Key in den Namen des Supernodes umbenennen und nach tinc/ kopieren. | ||
<pre> | <pre> | ||
tincd -K | tincd -K 4096 -n tbmxbone | ||
cp rsa_key.pub | cp ./rsa_key.pub hosts/[Supernodename aus tinc Configfile] | ||
</pre> | </pre> | ||
Und schliesslich: | Und schliesslich: | ||
<pre> | <pre> | ||
cd | cd hosts | ||
git add . | |||
git commit | |||
git push | |||
cd .. | |||
</pre> | </pre> | ||
Wir müssen noch die Konfiguration von tinc in /etc/tinc/tbmxbone/tinc.conf schreiben. | |||
==== tinc.conf ==== | ==== tinc.conf ==== | ||
<pre> | <pre> | ||
Name=[Supernodenamen] | |||
Name=[ | |||
Device=/dev/net/tun | Device=/dev/net/tun | ||
Mode= | DirectOnly=yes | ||
Compression= | IndirectData=yes | ||
ConnectTo= | Broadcast=direct | ||
ConnectTo= | Cipher=AES-128-CBC | ||
Mode=switch | |||
PingInterval=60 | |||
PingTimeout=10 | |||
Compression=0 | |||
ConnectTo=gw06 | |||
ConnectTo=vpn1 | |||
</pre> | </pre> | ||
==== tinc-up ==== | ==== tinc-up ==== | ||
Jetzt müssen wir noch ein Startskript namens ''/etc/tinc/tbmxbone/tinc-up'' erstellen: | |||
'''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung. | '''Wichtig:''' in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung. | ||
Deine zugeteilten Adressen sind unter https://kbu.freifunk.net/wiki/index.php?title=IP_Subnetze zu finden. | |||
<pre> | <pre> | ||
#!/bin/sh | #!/bin/sh | ||
/sbin/ip link set dev $INTERFACE up | |||
# VPN Mesh Interface dem BMX6 Mesh hinzufügen | |||
bmx6 dev=$INTERFACE | |||
# Default tunneladressen dem tbmxbone zuweisen | |||
bmx6 -c tunDev=Default /tun4Address=[BMXipv4Adresse] /tun6Address=[BMX6ipv6Adresse] | |||
# Feste Tunnel MTU von 1366 einstellen | |||
bmx6 -c tunMtu=1366 | |||
# Lokales v4&v6 Netz announcen | |||
bmx6 -c tunIn=localv4 /n=[DeinLokalesIPv4Netz] /b=100000000 | |||
bmx6 -c tunIn=localv6 /n=[DeinLokalesIPv6Netz] /b=100000000 | |||
# Defaultroute für v4 suchen | |||
bmx6 -c tunOut=v4Default /network=0.0.0.0/0 /maxPrefixLen=3 /hysteresis=30 /tableRule=50000/200 | |||
# Gateway für v4 präferieren | |||
#bmx6 -c tunOut=v4Defaultgw06 /network=0.0.0.0/0 /maxPrefixLen=0 /hysteresis=30 /tableRule=50000/200 /gwName=gw06 /rating=1000000 | |||
# Defaultroute für v6 suchen | |||
bmx6 -c tunOut=v6Default /network=::/0 /maxPrefixLen=64 /hysteresis=30 /tableRule=50000/200 | |||
# Routen für lokale v4 und v6 Netze suchen | |||
bmx6 -c tunOut=ffv4 /network=10.0.0.0/8 /hysteresis=30 /tableRule=50000/200 | |||
bmx6 -c tunOut=ffv6 /network=fd00::/8 /hysteresis=30 /tableRule=50000/200 | |||
</pre> | </pre> | ||
Auch diese Datei muss ausführbar gemacht werden: | Auch diese Datei muss ausführbar gemacht werden: | ||
<pre> | <pre> | ||
chmod +x /etc/tinc/ | chmod +x /etc/tinc/tbmxbone/tinc-up | ||
</pre> | </pre> | ||
Danach sollte der Ordner etwa so aussehen: | Danach sollte der Ordner etwa so aussehen: | ||
<pre> | <pre> | ||
$:/etc/tinc/ | $:/etc/tinc/tbmxbone# ls | ||
hosts | |||
hosts | |||
rsa_key.priv | rsa_key.priv | ||
rsa_key.pub | rsa_key.pub | ||
Zeile 301: | Zeile 331: | ||
</pre> | </pre> | ||
== | == Installation (fastd) == | ||
Zuerst müssen wir bmx6 kompilieren: | |||
apt-get install build-essential make fastd | |||
mkdir /opt/freifunk/ | |||
cd /opt/freifunk/ | |||
git clone https://github.com/axn/bmx6.git | |||
cd bmx6 | |||
make build_all # this reports some erros, go ahead anyway | |||
make install | |||
Nun bauen wir das FastdInterface: | |||
mkdir /etc/fastd/fbmxbone | |||
cd /etc/fastd/fbmxbone | |||
nano fastd.conf | |||
Inhalt der Konfigdatei (ihr müsst euch einen eigenen Key mit fastd --generate-key, wenn ihr nicht für andere erreichbar sein wollt, müsst ihr den Key euch auch nicht merken): | |||
==== /etc/fastd/fbmxbone/fastd.conf ==== | |||
<pre> | <pre> | ||
bind 0.0.0.0 port 10042; | |||
drop capabilities yes; | |||
forward no; | |||
hide ip addresses yes; | |||
hide mac addresses yes; | |||
peer group "ffrl" { | |||
include peers from "ffrl"; | |||
peer limit 1; | |||
} | |||
peer group "backbone" { | |||
include peers from "backbone"; | |||
peer limit 1; | |||
} | |||
interface "fbmxbone"; | |||
log to syslog level warn; | |||
method "salsa2012+umac"; | |||
mode tap; | |||
mtu 1406; | |||
on up sync "./on-up"; | |||
on verify async "true"; | |||
pmtu auto; | |||
secret "PUT IN SIKRIT KEY IN HERE"; | |||
secure handshakes yes; | |||
</pre> | </pre> | ||
ip | Jetzt clonen wir aus dem Git-Repo die PublicKeys der Knoten: | ||
cd /opt/freifunk/ | |||
git clone https://github.com/ff-kbu/fbmxbone | |||
Und kopieren diese noch per Hand in die einzelnen Keyverzeichnisse (verbessern): | |||
mkdir ffrl | |||
mkdir backbone | |||
cp fbmxbone/* backbone/ | |||
mv backbone/gw06 ffrl/ | |||
Und brauchen noch ein on-up Skript (/etc/fastd/fbmxbone/on-up): | |||
#!/bin/sh | |||
/sbin/ip link set dev fbmxbone address [MAC ADDY AUSDENKEN] | |||
/sbin/ip link set dev fbmxbone up | |||
bmx6 dev=fbmxbone | |||
bmx6 -c tunDev=Default /tun4Address=[BMXipv4Adresse] /tun6Address=[BMX6ipv6Adresse] | |||
bmx6 -c tunIn=localv4 /n=[DeinLokalesIPv4Netz] /b=100000000 | |||
bmx6 -c tunIn=localv6 /n=[DeinLokalesIPv6Netz] /b=100000000 | |||
bmx6 -c tunOut=v4Default /network=0.0.0.0/0 /maxPrefixLen=3 /hysteresis=30 /tableRule=50000/200 | |||
#bmx6 -c tunOut=v4Defaultgw06 /network=0.0.0.0/0 /maxPrefixLen=0 /hysteresis=30 /tableRule=50000/200 /gwName=gw06 /rating=1000000 | |||
bmx6 -c tunOut=v6Default /network=::/0 /maxPrefixLen=64 /hysteresis=30 /tableRule=50000/200 | |||
bmx6 -c tunOut=ffv4 /network=10.0.0.0/8 /hysteresis=30 /tableRule=50000/200 | |||
bmx6 -c tunOut=ffv6 /network=fd00::/8 /hysteresis=30 /tableRule=50000/200 | |||
Und mittlerweile klar, ausführbar machen: | |||
chmod +x /etc/fastd/fbmxbone/on-up | |||
== Routing == | |||
Wir brauchen policy based routing: | |||
<pre> | <pre> | ||
echo "200 freifunk" >> /etc/iproute2/rt_tables | |||
</pre> | </pre> | ||
fastd's on-up, /etc/network/interfaces.d/bat0 und/oder tinc-up erledigen den Rest. <br /> | |||
</ | |||
== IPv4 DHCP == | == IPv4 DHCP == | ||
Zeile 334: | Zeile 426: | ||
=== Konfiguration === | === Konfiguration === | ||
Nun ändern wir die Konfiguration in /etc/dhcp/dhcpd.conf: | |||
<pre> | <pre> | ||
option domain-name "mesh.kbu.freifunk.net"; | option domain-name "mesh.kbu.freifunk.net"; | ||
option domain-name-servers | option domain-name-servers [Supernode IPv4], [INSERT YOUR PREFERRED IPV4 DNS], 213.73.91.35; | ||
default-lease-time | default-lease-time 150; | ||
max-lease-time 720; | max-lease-time 720; | ||
authoritative; | |||
subnet | subnet 10.X.X.X netmask Y.Y.Y.Y { # Die Range der Hood | ||
range | range 10.X.Y.10 10.X.Z.254; # Eure IPv4 Range | ||
option routers | option routers [Supernode IP Adresse]; | ||
} | } | ||
</pre> | </pre> | ||
Zeile 358: | Zeile 448: | ||
</pre> | </pre> | ||
=== Konfiguration === | === Konfiguration /etc/radvd.conf === | ||
<pre> | <pre> | ||
interface bat0 | |||
interface bat0 { | |||
{ | |||
AdvSendAdvert on; | |||
MaxRtrAdvInterval 200; | |||
prefix [GlobaleIPv6Range des Supernodes] { | |||
}; | |||
RDNSS [ULA IPv6 address of Supernode, your preferred ipv6 DNS-Server] { | |||
}; | |||
prefix [ULA IPv6 range der Supernode (z.B. fdd3::/64)] { | |||
}; | |||
}; | }; | ||
</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 | |||
/etc/ | 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. | ||
[[Kategorie:Netz-und-Technik]] | |||
== DNS-"Server" == | |||
Supernodes betreiben Caching-DNS-Forwarder. Hierzu wird unbound verwendet | |||
== Installation == | |||
apt install unbound | |||
== Adressen == | |||
Das Setup unterscheidet zwischen v4 und v6. | |||
== /etc/unbound/unbound.conf == | |||
server: | |||
# you might have to remove the auto-trust-anchor-file option if defined elsewhere | |||
auto-trust-anchor-file: "/var/lib/unbound/root.key" | |||
interface: [ULA ipv6 des supernodes] | |||
access-control: [public ipv6 Range KBU] allow | |||
access-control: [ULA ipv6 Range KBU] allow | |||
interface: [ipv4 des Supernodes] | |||
access-control: [IPv4 Range KBU] allow | |||
verbosity: 1 | |||
forward-zone: | |||
name: "." | |||
forward-addr: [your Favorite v4 DNS IP], [anotherone] | |||
forward-addr: [your Favorite v6 DNS IP], [anotherone] | |||
== DHCP Client Leases in eine RAMdisk flüchtig speichern == | |||
<pre> | |||
echo "tmpfs /var/lib/dhcp/ tmpfs defaults,size=10% 0 0" >> /etc/fstab | |||
</pre> | </pre> | ||
= | == Logrotate auf die letzte Stunde umstellen == | ||
Mehr braucht es nicht im Betrieb | |||
Hierzu in /etc/logrotate.conf folgendes ändern: | |||
"weekly" in "hourly" ändern | |||
"rotate 4" in "rotate 0" ändern | |||
=== cronJob hinzufügen === | |||
mit crontab -e Editor aufrufen und folgende Zeile hinzufügen: | |||
* */1 * * * nice -n 20 logrotate /etc/logrotate.conf >/dev/null 2>&1 | |||
== Preinstall == | |||
apt install uml-utilities | |||
== Interfaces in /etc/network/interfaces.d/bat0 definieren == | |||
<pre> | <pre> | ||
auto bat0 | |||
iface bat0 inet static | |||
hwaddress ether [noch eine MACADRESSE AUSDENKEN] | |||
address [ipv4 des Supernodes] | |||
netmask [Netzmaske der Hood] | |||
pre-up modprobe batman-adv && tunctl -t mesh-vpn && batctl if add mesh-vpn | |||
post-up ip rule add iif bat0 table freifunk | |||
pre-down ip rule del iif bat0 table freifunk | |||
iface bat0 inet6 static | |||
address [GLOBAL IPv6 des Supernodes] | |||
netmask 64 | |||
# Routes | |||
# Note: route del not needed - shutting down the interfaces removes routes anyway | |||
post-up ip -6 addr add fdd3:5d16:b5dd:1016::1/64 dev bat0 | |||
post-up ip -6 route add fdd3:5d16:b5dd:1016::/64 dev bat0 | |||
post-up ip -6 route add fdd3:5d16:b5dd:1016::/64 dev bat0 table freifunk | |||
post-up ip -6 route add [IPv6 Range der Supernode] dev bat0 | |||
post-up ip -6 route add [IPv6 Range der Supernode] dev bat0 table freifunk | |||
# Rules (iif: routed traffic, from: traffic from the supernode) | |||
post-up ip -6 rule add iif bat0 table freifunk | |||
post-up ip -6 rule add from [GLOBAL IPv6 Range des Exits] table freifunk | |||
pre-down ip -6 rule del iif bat0 table freifunk | |||
pre-down ip -6 rule del from [GLOBAL IPv6 Range des Exits] table freifunk | |||
</pre> | </pre> | ||
== IP-Tables Firewall == | |||
Hier wollen wir nur die schlimmsten Routingfuckups verhindern, es soll nichts über z.B. eth0 rausgeforwardet werden können. | |||
=== Installation === | |||
apt install iptables-persistent | |||
=== Inhalt /etc/iptables/rules.v4 === | |||
-A FORWARD -i bat+ -o bmx+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu | |||
-A FORWARD -i bmx+ -o bat+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu | |||
= | === Inhalt /etc/iptables/rules.v6 === | ||
Aktuelle Version vom 9. Oktober 2022, 02:41 Uhr
Diese Seite ist noch unvollständig. Bitte hilf uns sie zu erweitern. Wenn Du das Recht hast diese Seite zu ändern, kannst Du hier klicken. Danke! Siehe auch: Mithelfen im Wiki |
Hinweis: Bei Fragen oder Problemen wende Dich bitte an die Mailingliste. Die Anleitung hier wurde von vielen Leuten geschrieben - es hilft in der Regel nur wenig, wenn Du jemanden persönlich per E-Mail kontaktierst.
Voraussetzungen
Benötigte Software
1) [fastd] Mesh-vpn
2) [bmx6] BackboneMeshProtokoll
3) [batman-adv] ClientMeshProtokoll
4) [tinc] Mesh-vpn
5) OS: debian jessie(or whatever you like)
Du benötigst ausserdem:
- eine private IPv4/IPv6 Adresse und ein Subnetz für die Clients
- eine IPv4/IPv6 Adresse für das Backbone-Netz
Diese kannst du unter dem Artikel IP_Subnetze 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:
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 # If Supernode running on USB Stick/FlashCard with low memory, this option prevents swapping until it is definitely needed vm.swappiness=1
Danach die /etc/sysctl.conf neu einlesen:
sysctl -p
Für Batman-adv und fastd-Pakete in /etc/apt/apt/sources.list hinzufügen, z.B. so:
echo "deb http://repo.universe-factory.net/debian/ sid main" >>/etc/apt/sources.list
GPG-Key importieren und apt via https ermöglichen:
gpg --keyserver pgpkeys.mit.edu --recv-key 16EF3F64CB201D9C gpg -a --export 16EF3F64CB201D9C | apt-key add - apt-get install apt-transport-https apt-get update
Batman-adv (compat14 (Hood Bonn))
Installation
Dies sollte auf debian wheezy batman-adv 2013.4.0 installieren.
apt-get install batman-adv-dkms echo "batman-adv" >> /etc/modules
debian jessie
batman 14 aus folgender quelle installieren:
http://repo.universe-factory.net/debian/ sid main
dann dkms die richtige version beibringen:
dkms remove batman-adv/2013.4.0 --all dkms --force install batman-adv/2013.4.0
und mit apt-pinning die richtige version für batctl erzwingen, in /etc/apt/preferences.d/batctl.pref:
Package: batctl Pin: origin repo.universe-factory.net Pin-Priority: 1000
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 libnl-genl-3-dev
Install Batman, batctl and alfred
mkdir /opt/freifunk cd $_ git clone git://git.open-mesh.org/batman-adv.git cd batman-adv git checkout v2016.3 make make install cd ../ git clone http://git.open-mesh.org/batctl.git cd batctl git checkout v2016.3 make make install
Wird künftig nicht mehr benötigt. Wer's trotzdem installieren mag:
cd ../ git clone http://git.open-mesh.org/alfred.git cd alfred git checkout v2014.4.0 make make install
fastd
Installation
apt-get install fastd curl
Add Directories
mkdir /etc/fastd/mesh-vpn mkdir /etc/fastd/mesh-vpn/backbone
Konfiguration
"[YOUR SECRET KEY HERE]" sollte dabei durch den fastd-secret-key ersetzt werden. Den Key müsst ihr selbst erstellen. Dies geht mit dem Befehl:
fastd --generate-key
Schreibt am besten euch public und private key woanders noch auf. Wenn ihr den verliert, können Nodes nicht mehr mit euch connecten, solange diese nicht umkonfiguriert werden.
In /etc/fastd/mesh-vpn/fastd.conf folgendes hinzufügen:
/etc/fastd/mesh-vpn/fastd.conf
# Log warnings and errors to stderr #log level warn; log level error; drop capabilities yes; forward no; hide ip addresses yes; hide mac addresses yes; # 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"; mode tap; # Support xsalsa20 and aes128 encryption methods, prefer xsalsa20 method "salsa2012+umac"; # Bind to a fixed port, IPv4 only bind 0.0.0.0:10000; mtu 1312; pmtu auto; secure handshakes yes; # Secret key generated by 'fastd --generate-key' secret "[YOUR SECRET KEY HERE]"; # Include peers from the directory 'peers' and set max connections peer group "backbone" { include peers from "backbone"; peer limit 64; } on up sync "./on-up"; # Allows all peers to connect. on verify async "true";
Optional: Wenn die Node teil einer grösseren Hood werden soll, entsprechende Backbone Node Keys in das Verzeichnis /etc/fastd/mesh-vpn/backbone legen. Vorzuziehen ist aber entweder eine eigene Fastdinstanz oder eine Tinc VPN Verbindung (AES-NI) um sich an eine hood (Layer2 Mesh mit Batman-adv) zu verbinden, dies ist performanter.
Der IP v4-Range bezieht sich auf euren selbst gewählten Bereich, welcher unter https://pad.freifunk.net/p/kbuip dokumentiert ist.
/etc/fastd/mesh-vpn/on-up
#!/bin/sh /sbin/ip link set dev mesh-vpn address [MacAdresseAusdenken] /sbin/ip link set dev mesh-vpn up batctl if add mesh-vpn batctl it 10000 batctl bl 1 batctl gw_mode server 200MBit/200MBit # anpassen /sbin/ip rule show | grep 'from 10.0.0.0/8 lookup freifunk' if [ $? -eq 1 ]; then /sbin/ip rule add from 10.0.0.0/8 table freifunk fi /sbin/ip route add [lokaleIPv4Range[Ex:10.123.234.0/24]] dev bat0 table freifunk /sbin/ip route flush cache
on-up ausführbar machen:
chmod +x /etc/fastd/mesh-vpn/on-up
BmxBone Netz
Jetzt müsst ihr euch entscheiden, welches VPN Programm ihr für das BmxBone nutzen wollt:
- wenn ihr eine CPU mit AES-NI habt, oder eine CPU mit deutlich mehr als 1GHz nehmt tinc
- wenn ihr eine langsame CPU sub 1GHz oder sogar eine ARM CPU, sollte fastd besser sein
Installation mit tinc
apt-get install tinc bridge-utils make build-essential
Wir müssen bmx6 noch kompilieren:
mkdir /opt/freifunk/ cd $_ git clone git://qmp.cat/bmx6.git alternative: https://github.com/axn/bmx6.git cd bmx6 make make install
Konfiguration
mkdir /etc/tinc/tbmxbone echo "tbmxbone" >> /etc/tinc/nets.boot # Dies sagt tinc, dass es das Netz "tbmxbone" starten soll cd /etc/tinc/tbmxbone # Public keys der anderen Teilnehmer: git clone https://github.com/ff-kbu/tbmxbone hosts
Jetzt fehlt noch des eigene Public/Private Keypaar.
Die Keys sollten in /etc/tinc/tbmxbone gespeichert werden.
Den Public-Key in den Namen des Supernodes umbenennen und nach tinc/ kopieren.
tincd -K 4096 -n tbmxbone cp ./rsa_key.pub hosts/[Supernodename aus tinc Configfile]
Und schliesslich:
cd hosts git add . git commit git push cd ..
Wir müssen noch die Konfiguration von tinc in /etc/tinc/tbmxbone/tinc.conf schreiben.
tinc.conf
Name=[Supernodenamen] Device=/dev/net/tun DirectOnly=yes IndirectData=yes Broadcast=direct Cipher=AES-128-CBC Mode=switch PingInterval=60 PingTimeout=10 Compression=0 ConnectTo=gw06 ConnectTo=vpn1
tinc-up
Jetzt müssen wir noch ein Startskript namens /etc/tinc/tbmxbone/tinc-up erstellen: Wichtig: in der datei muss wirklich $INTERFACE stehen. Tinc ersetzt dies automatisch durch das entsprechende interface bei ausführung.
Deine zugeteilten Adressen sind unter https://kbu.freifunk.net/wiki/index.php?title=IP_Subnetze zu finden.
#!/bin/sh /sbin/ip link set dev $INTERFACE up # VPN Mesh Interface dem BMX6 Mesh hinzufügen bmx6 dev=$INTERFACE # Default tunneladressen dem tbmxbone zuweisen bmx6 -c tunDev=Default /tun4Address=[BMXipv4Adresse] /tun6Address=[BMX6ipv6Adresse] # Feste Tunnel MTU von 1366 einstellen bmx6 -c tunMtu=1366 # Lokales v4&v6 Netz announcen bmx6 -c tunIn=localv4 /n=[DeinLokalesIPv4Netz] /b=100000000 bmx6 -c tunIn=localv6 /n=[DeinLokalesIPv6Netz] /b=100000000 # Defaultroute für v4 suchen bmx6 -c tunOut=v4Default /network=0.0.0.0/0 /maxPrefixLen=3 /hysteresis=30 /tableRule=50000/200 # Gateway für v4 präferieren #bmx6 -c tunOut=v4Defaultgw06 /network=0.0.0.0/0 /maxPrefixLen=0 /hysteresis=30 /tableRule=50000/200 /gwName=gw06 /rating=1000000 # Defaultroute für v6 suchen bmx6 -c tunOut=v6Default /network=::/0 /maxPrefixLen=64 /hysteresis=30 /tableRule=50000/200 # Routen für lokale v4 und v6 Netze suchen bmx6 -c tunOut=ffv4 /network=10.0.0.0/8 /hysteresis=30 /tableRule=50000/200 bmx6 -c tunOut=ffv6 /network=fd00::/8 /hysteresis=30 /tableRule=50000/200
Auch diese Datei muss ausführbar gemacht werden:
chmod +x /etc/tinc/tbmxbone/tinc-up
Danach sollte der Ordner etwa so aussehen:
$:/etc/tinc/tbmxbone# ls hosts rsa_key.priv rsa_key.pub tinc.conf tinc-up
Installation (fastd)
Zuerst müssen wir bmx6 kompilieren:
apt-get install build-essential make fastd mkdir /opt/freifunk/ cd /opt/freifunk/ git clone https://github.com/axn/bmx6.git cd bmx6 make build_all # this reports some erros, go ahead anyway make install
Nun bauen wir das FastdInterface:
mkdir /etc/fastd/fbmxbone cd /etc/fastd/fbmxbone nano fastd.conf
Inhalt der Konfigdatei (ihr müsst euch einen eigenen Key mit fastd --generate-key, wenn ihr nicht für andere erreichbar sein wollt, müsst ihr den Key euch auch nicht merken):
/etc/fastd/fbmxbone/fastd.conf
bind 0.0.0.0 port 10042; drop capabilities yes; forward no; hide ip addresses yes; hide mac addresses yes; peer group "ffrl" { include peers from "ffrl"; peer limit 1; } peer group "backbone" { include peers from "backbone"; peer limit 1; } interface "fbmxbone"; log to syslog level warn; method "salsa2012+umac"; mode tap; mtu 1406; on up sync "./on-up"; on verify async "true"; pmtu auto; secret "PUT IN SIKRIT KEY IN HERE"; secure handshakes yes;
Jetzt clonen wir aus dem Git-Repo die PublicKeys der Knoten:
cd /opt/freifunk/ git clone https://github.com/ff-kbu/fbmxbone
Und kopieren diese noch per Hand in die einzelnen Keyverzeichnisse (verbessern):
mkdir ffrl mkdir backbone cp fbmxbone/* backbone/ mv backbone/gw06 ffrl/
Und brauchen noch ein on-up Skript (/etc/fastd/fbmxbone/on-up):
#!/bin/sh /sbin/ip link set dev fbmxbone address [MAC ADDY AUSDENKEN] /sbin/ip link set dev fbmxbone up bmx6 dev=fbmxbone bmx6 -c tunDev=Default /tun4Address=[BMXipv4Adresse] /tun6Address=[BMX6ipv6Adresse] bmx6 -c tunIn=localv4 /n=[DeinLokalesIPv4Netz] /b=100000000 bmx6 -c tunIn=localv6 /n=[DeinLokalesIPv6Netz] /b=100000000 bmx6 -c tunOut=v4Default /network=0.0.0.0/0 /maxPrefixLen=3 /hysteresis=30 /tableRule=50000/200 #bmx6 -c tunOut=v4Defaultgw06 /network=0.0.0.0/0 /maxPrefixLen=0 /hysteresis=30 /tableRule=50000/200 /gwName=gw06 /rating=1000000 bmx6 -c tunOut=v6Default /network=::/0 /maxPrefixLen=64 /hysteresis=30 /tableRule=50000/200 bmx6 -c tunOut=ffv4 /network=10.0.0.0/8 /hysteresis=30 /tableRule=50000/200 bmx6 -c tunOut=ffv6 /network=fd00::/8 /hysteresis=30 /tableRule=50000/200
Und mittlerweile klar, ausführbar machen:
chmod +x /etc/fastd/fbmxbone/on-up
Routing
Wir brauchen policy based routing:
echo "200 freifunk" >> /etc/iproute2/rt_tables
fastd's on-up, /etc/network/interfaces.d/bat0 und/oder tinc-up erledigen den Rest.
IPv4 DHCP
Installation
apt-get install isc-dhcp-server
Konfiguration
Nun ändern wir die Konfiguration in /etc/dhcp/dhcpd.conf:
option domain-name "mesh.kbu.freifunk.net"; option domain-name-servers [Supernode IPv4], [INSERT YOUR PREFERRED IPV4 DNS], 213.73.91.35; default-lease-time 150; max-lease-time 720; authoritative; subnet 10.X.X.X netmask Y.Y.Y.Y { # Die Range der Hood range 10.X.Y.10 10.X.Z.254; # Eure IPv4 Range option routers [Supernode IP Adresse]; }
IPv6
Installation
apt-get install radvd
Konfiguration /etc/radvd.conf
interface bat0 { AdvSendAdvert on; MaxRtrAdvInterval 200; prefix [GlobaleIPv6Range des Supernodes] { }; RDNSS [ULA IPv6 address of Supernode, your preferred ipv6 DNS-Server] { }; prefix [ULA IPv6 range der Supernode (z.B. fdd3::/64)] { }; };
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.
DNS-"Server"
Supernodes betreiben Caching-DNS-Forwarder. Hierzu wird unbound verwendet
Installation
apt install unbound
Adressen
Das Setup unterscheidet zwischen v4 und v6.
/etc/unbound/unbound.conf
server: # you might have to remove the auto-trust-anchor-file option if defined elsewhere auto-trust-anchor-file: "/var/lib/unbound/root.key" interface: [ULA ipv6 des supernodes] access-control: [public ipv6 Range KBU] allow access-control: [ULA ipv6 Range KBU] allow interface: [ipv4 des Supernodes] access-control: [IPv4 Range KBU] allow verbosity: 1 forward-zone: name: "." forward-addr: [your Favorite v4 DNS IP], [anotherone] forward-addr: [your Favorite v6 DNS IP], [anotherone]
DHCP Client Leases in eine RAMdisk flüchtig speichern
echo "tmpfs /var/lib/dhcp/ tmpfs defaults,size=10% 0 0" >> /etc/fstab
Logrotate auf die letzte Stunde umstellen
Mehr braucht es nicht im Betrieb
Hierzu in /etc/logrotate.conf folgendes ändern:
"weekly" in "hourly" ändern "rotate 4" in "rotate 0" ändern
cronJob hinzufügen
mit crontab -e Editor aufrufen und folgende Zeile hinzufügen:
* */1 * * * nice -n 20 logrotate /etc/logrotate.conf >/dev/null 2>&1
Preinstall
apt install uml-utilities
Interfaces in /etc/network/interfaces.d/bat0 definieren
auto bat0 iface bat0 inet static hwaddress ether [noch eine MACADRESSE AUSDENKEN] address [ipv4 des Supernodes] netmask [Netzmaske der Hood] pre-up modprobe batman-adv && tunctl -t mesh-vpn && batctl if add mesh-vpn post-up ip rule add iif bat0 table freifunk pre-down ip rule del iif bat0 table freifunk iface bat0 inet6 static address [GLOBAL IPv6 des Supernodes] netmask 64 # Routes # Note: route del not needed - shutting down the interfaces removes routes anyway post-up ip -6 addr add fdd3:5d16:b5dd:1016::1/64 dev bat0 post-up ip -6 route add fdd3:5d16:b5dd:1016::/64 dev bat0 post-up ip -6 route add fdd3:5d16:b5dd:1016::/64 dev bat0 table freifunk post-up ip -6 route add [IPv6 Range der Supernode] dev bat0 post-up ip -6 route add [IPv6 Range der Supernode] dev bat0 table freifunk # Rules (iif: routed traffic, from: traffic from the supernode) post-up ip -6 rule add iif bat0 table freifunk post-up ip -6 rule add from [GLOBAL IPv6 Range des Exits] table freifunk pre-down ip -6 rule del iif bat0 table freifunk pre-down ip -6 rule del from [GLOBAL IPv6 Range des Exits] table freifunk
IP-Tables Firewall
Hier wollen wir nur die schlimmsten Routingfuckups verhindern, es soll nichts über z.B. eth0 rausgeforwardet werden können.
Installation
apt install iptables-persistent
Inhalt /etc/iptables/rules.v4
-A FORWARD -i bat+ -o bmx+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -A FORWARD -i bmx+ -o bat+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu