Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.
Kommentar: Migration of unmigrated content due to installation of a new plugin


Hinweis

Wir verwendet seit geraumer Zeit Ansible zur Server Konfiguration und der Inhalt dieser Seite wurde nicht weiter gepflegt. Details findest du unter https://github.com/FreiFunkMuenster/Ansible-Freifunk-Gateway. Sprich uns bei Fragen gerne im Forum an.


In diesem Artikel wird beschrieben, wie du einen Server für Freifunk Münsterland als Gateway-Server mit fastd einrichten kannst.


Für den Zugang zum Internet benötigen die meisten Freifunk-Netze mindestens zwei Serverdienste:

...

Beim Freifunk Münsterland werden aktuell beide Dienste auf einem Server installiert. Daher ist der genutzte Begriff "Gateway-Server" technisch gesehen nicht ganz richtig.

Installation

Die Wahl der Linux-Distribution

Wir verwenden bisher auf unseren Gateways Debian Wheezy, haben daher auch die meiste Erfahrung damit, wie ein Gateway unter dieser Distribution zu betreiben ist. Es sollte aber auch möglich sein, nach dieser Anleitung ein Gateway unter Ubuntu einzurichten. Bei anderen Distributionen ist deutlich mehr eigene Recherche nötig.

Paketquellen

Wir verwenden folgende zusätzliche Paketquellen auf unseren Servern:

...

die Paketquellen aktualisieren.

Notwendige Pakete

Folgende Pakete müssen nun auf deinem Gateway installiert werden:

...

Tinc wird in der Version 1.11~pre11 benötigt.
Eine für Debian Wheezy geeignete version muss entsprechend https://gist.github.com/mweinelt/efff4fb7eba1ee41ef2d manuell Kompiliert werden.
Die Installation erfolgt ebenfalls manuell mittels dpkg -i <dateiname>.deb

IP Forwarding aktivieren

Konfigurationsdatei /etc/sysctl.d/forwarding.conf
<file - forwarding.conf>

...

Jetzt solltest du noch einmal rebooten, um diese Änderung zu aktivieren.

batman-adv Kernelmodul automatisch laden

In die Datei /etc/modules müssen die folgenden Zeilen ergänzt werden um das batman-adv Kernelmodul beim Start des Servers automatisch zu laden:

Codeblock
batman-adv

batman-adv Version Prüfen

Nach dem Reboot solltest du die batman-adv Version prüfen. Diese muss derzeit 2013.4.0 sein.

Codeblock
modinfo batman-adv

Netzwerkkonfiguration

Das Loopback Interface muss durch die öffentliche IP des Gateway Servers ergänzt werden

...

Um diese Änderung zu aktivieren, startest du das Netzwerk einmal per service networking restart neu.

IPtables-Regeln

Nun brauchst du noch IPtables-Regeln. Lege dazu die Konfigurationsdatei /etc/iptables.up.rules an, und trage folgendes ein.

Damit werden alle Pakete, die über die Bridge rein kommen, mit dem 0x1-Flag markiert, und damit über Routing-Tabelle 42 geschickt. Das bedeutet, diese gehen nicht über die standard Routing-Tabelle. Außerdem gibt es noch 2 Regeln für DNS, dass auch DNS-Pakete (Port 53 TCP/UDP) über die Tabelle 42 geschickt werden. Ansonsten würden DNS-Anfragen über deine normale Internetverbindung raus gehen.











Wiki-Markup
<file - iptables.up.rules>
*filter 
:INPUT ACCEPT \[0:0]
:FORWARD ACCEPT \[0:0]
:OUTPUT ACCEPT \[0:0]
COMMIT




















  1. Wiki-Markup
    Regeln zum markieren eingehender Pakete
    *mangle
    :PREROUTING ACCEPT \[0:0]
    :INPUT ACCEPT \[0:0]
    :FORWARD ACCEPT \[0:0]
    :OUTPUT ACCEPT \[0:0]
    :POSTROUTING ACCEPT \[0:0]
    -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o tun-+ -j TCPMSS --set-mss 1280
    -A PREROUTING -i br0 -j MARK --set-xmark 0x1/0xffffffff
    -A OUTPUT -o eth0 -p udp --dport 53 -j MARK --set-xmark 0x1/0xffffffff
    -A OUTPUT -o eth0 -p tcp --dport 53 -j MARK --set-xmark 0x1/0xffffffff
    COMMIT



















  2. Wiki-Markup
    Route nach extern per nat.
    *nat
    :PREROUTING ACCEPT \[0:0]
    :INPUT ACCEPT \[0:0]
    :OUTPUT ACCEPT \[0:0]
    :POSTROUTING ACCEPT \[0:0]
    -A POSTROUTING -o tun-+ -j SNAT --to-source <öffentliche IPv4 des Gateway>
    COMMIT
    </file>










Diese Regel sorgt dafür, dass dein Router auch das NAT übernimmt.

...

Codeblock
iptables-restore < /etc/iptables.up.rules

Einrichtung des BGP Daemon

Der Austausch von Routen mit dem Rheinland Backbone erfolgt über BGP.
Hierfür wird der Routing Daemon bird verwendet.

...

Codeblock
        return (net ~ [::/0]);

}

  1. own networks











Wiki-Markup
function is_self_net() \{
return net ~ \[ fd68:e2ea:a53::/48+ ];
}











  1. freifunk ip ranges in general











Wiki-Markup
function is_freifunk() \{
return net ~ \[ fc00::/7\{48,64},
2001:bf7::/32+];
}











filter hostroute {

Codeblock
        if net ~ 2a03:2260:115::/48 then accept;
        reject;

...

Anschließend kann bird mit service bird start und service bird6 start gestartet werden.
Die Befehle birdc show protocols und birdc6 show protocols zeigen den zustand der Verbindungen an.

Einrichtung des Mesh-VPNs

Für das Mesh-VPN wird fastd eingesetzt. Hierzu erzeugst du als erstes das Konfigurationsverzeichnis:

...

  1. Bind to a fixed address and port, IPv4 and IPv6











Wiki-Markup
bind EXTERNE-IPv4-ADRESSE:14242 interface "eth0";
bind \[EXTERNE-IPv6-ADRESSE]:14242 interface "eth0";











  1. Set the user, fastd will work as

...

Den Öffentlichen Schlüssel deines Servers schickst du uns, damit wir ihn einpflegen können.

Einrichtung des InterCity VPNs

Das InterCity-VPN wird über Tinc aufgebaut.
Dokumentation im Freifunk Wiki

...

TODO: Update Mechanismus für IC-VPN Hosts ??

IPv6 Router Advertisements einrichten

Alle Gateway-Server teilen das selbe IPv6-Prefix durch Router Advertisements aus. Router Advertisements können maximal ein /64 großes Netz vergeben, weshalb dies hier getan wird.
Lege die Konfigurationsdatei /etc/radvd.conf mit folgendem Inhalt an:
<file - radvd.conf>
interface br0
{

...

Codeblock
service radvd restart

neustarten.

DHCPv4 Server einrichten

Dein Server muss als nächstes IPv4-Adressen vergeben. Erzeuge dafür die Konfigurationsdatei /etc/dhcp/dhcpd.conf mit folgendem Inhalt:
<file - dhcpd.conf>
default-lease-time 240;
max-lease-time 1200;

...

Codeblock
service isc-dhcp-server restart

DHCPv6 Server einrichten

Da Windows die RDNSS-Option aus den Router Advertisements nicht kennt, ist es außerdem nötig, einen DHCP6-Server laufen zu lassen. Da Debian derzeit keine Konfigurationsdateien hierfür anbietet, erstellen wir diese selbst.
Lege folgende Dateien an:
/etc/init.d/isc-dhcp6-server
<file bash isc-dhcp6-server>
#!/bin/sh
#
#

...

  1. It is not safe to start if we don't have a default configuration...











Wiki-Markup
if \[ ! -f "$DHCPD_DEFAULT" ]; then











Codeblock
        echo "$DHCPD_DEFAULT does not exist! - Aborting..."
        if [ "$DHCPD_DEFAULT" = "/etc/default/isc-dhcp6-server" ]; then
                echo "Run 'dpkg-reconfigure isc-dhcp-server' to fix the problem."
        fi
        exit 0

...

  1. Read init script configuration











Wiki-Markup
\[ -f "$DHCPD_DEFAULT" ] && . "$DHCPD_DEFAULT"











NAME=dhcpd
DESC="ISC DHCP6 server"

...

  1. try to read pid file name from config file, with fallback to /var/run/dhcpd.pid











Wiki-Markup
if \[ -z "$DHCPD_PID" ]; then











Codeblock
        DHCPD_PID=$(sed -n -e 's/^[ \t]*pid-file-name[ \t]*"(.*)"[ \t]*;.*$/\1/p' < "$DHCPD_CONF" 2>/dev/null | head -n 1)

...

Codeblock
service isc-dhcp6-server start

InterCity Routen und DNS

Für die nächsten Schritte werden die Repositories https://github.com/freifunk/icvpn-meta und https://github.com/freifunk/icvpn-scripts benötigt.
Beide Repositories werden erst einmal mit git in /var geklont.

...

Codeblock
/var/icvpn-scripts/mkdns -x muenster -x chaosvpn -x dn42  -s /var/icvpn-meta/ -f bind > /var/tmp/named.conf.icvpn

DNS-Server einrichten

Wir verwenden als DNS-Server bind9. Lege folgende 2 Konfigurationsdateien an:
/etc/bind/named.conf.options
<file - named.conf.options>
options {

...

Codeblock
service bind9 restart

NRPE Daemon einrichten

Die Gateways werden von einem zentralen Nagios Server überwacht.

...

Codeblock
nagios  ALL=NOPASSWD: /usr/sbin/batctl
nagios  ALL=NOPASSWD: /usr/sbin/birdc
nagios  ALL=NOPASSWD: /usr/sbin/birdc6

Statistiken via Munin

Die Statistiken werden auf den Gateways via Munin erzeugt.

...

  1. Regexps for files to ignore











Wiki-Markup
ignore_file \[\#~]$
ignore_file DEADJOE$
ignore_file \.bak$
ignore_file %$
ignore_file \.dpkg-(tmp|new|old|dist)$
ignore_file \.rpm(save|new)$
ignore_file \.pod$











  1. Set this if the client doesn't report the correct hostname when
  2. telnetting to localhost, port 4949
    #
    host_name freifunk-gateway-zz

...

  1. Which address to bind to;
    #host *
  2. host 127.0.0.1











Wiki-Markup
host \[2a03:2260:115::z]











  1. And which port

port 4949
</file>
Hierbei ist der Eintrag host gegen die IPv6-Adresse deines Servers im Freifunknetz (also des br0-Interfaces) zu ersetzen, und host_name gegen den gewünschten Hostnamen.

...

neu. Die Statistiken sollten bei dem nächsten Update von Munin auf unserer Seite https:_freifunk-muenster.de/stats/ erscheinen.

Abschluss

Dein Server ist nun für den Betrieb als Gateway für Freifunk Münster eingerichtet. Am besten startest du den Server einmal neu, und kontrolliere, dass alles korrekt hoch kommt.

Logging abschalten

"Freifunk steht unter Anderem für Netzneutralität und ist in keinster Weise an irgendwelchen Nutzer-, Meta-, Irgendwasdaten interessiert. Aus diesem Grund muss den sonst so redseligen Linux Daemonen das Logging abgewöhnt werden." (https://gluon-gateway-doku.readthedocs.org/de/latest/configuration/cleanup.html#logging)

...

Jetzt könnten die Daten auch nicht mehr weitergegeben werden, weil sie gar nicht vorhanden sind.

Bekannte Fehlerbilder

Kernelpanik /-oops - Reboot automatisieren

B.A.T.M.A.N. bereitet häufiger Probleme mit Kernelpanic /-oops. Um das Gateway möglichst schnell wieder verfügbar zu machen, habe ich folgendes eingerichtet:

...

Nicht vergessen! sysctl -p absetzen, um es auch sofort zu aktivieren.

Erstellen der Datei /etc/init.d/delfastdstat mit folgendem Inhalt:
<file - delfastdstat>
#! /bin/sh

      1. BEGIN INIT INFO
  1. Provides: delfastdstat
  2. Required-Start: $local_fs $syslog
  3. Required-Stop: $local_fs
  4. Default-Start: 2 3 4 5
  5. Default-Stop: 0 1 6
  6. Short-Description: delfastdstat
  7. Description: Loescht fastd-status nach crash
      1. END INIT INFO

if test -S /tmp/fastd-status

Codeblock
  then
    rm /tmp/fastd-status
  else
    echo NoOp

fi
exit 0

  1. Carry out specific functions when asked to by the system

case "$1" in

Codeblock
  start)
    #NoOp
    ;;
  stop)
    #NoOp
    ;;
  • )
Codeblock
    #NoOp
    ;;

esac

exit 0
</file>

Die Datei mit chmod 755 /etc/init.d/delfastdstat ausführbar machen und anschließend mit update-rc.d delfastdstat start 1 2 3 4 5 . stop 99 0 1 6 . aktivieren.
Falls es jetzt zu einem Kernelpanik /-oops kommt, startet das Gateway sofort neu. Vor dem fastd-Start wird der noch existierende Socket /tmp/fastd-status gelöscht.