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:
Codeblock |
---|
deb http://repo.universe-factory.net/debian/ sid main
|
Codeblock |
---|
deb http://download.opensuse.org/repositories/home:/fusselkater:/ffms/Debian_7.0/ /
|
Zusätzlich benötigen wir die wheezy-Backports für libjson-c2 (Abhängigkeit von fastd >= 15)
Codeblock |
---|
deb http://http.debian.net/debian wheezy-backports main
|
Um die nötigen Schlüssel hinzuzufügen, mache folgendes:
Codeblock |
---|
gpg --keyserver pgpkeys.mit.edu --recv-key 16EF3F64CB201D9C
gpg -a --export 16EF3F64CB201D9C | apt-key add -
|
Codeblock |
---|
wget http://download.opensuse.org/repositories/home:fusselkater:ffms/Debian_7.0/Release.key
apt-key add - < Release.key
|
Nun sind die benötigten Repos eingetragen und du kannst mit
Codeblock |
---|
aptitude update
|
die Paketquellen aktualisieren.
Notwendige Pakete
Folgende Pakete müssen nun auf deinem Gateway installiert werden:
...
Oder als ein Befehl:
Codeblock |
---|
aptitude install sudo bridge-utils batctl=2013.4.0-1 bird haveged fastd radvd isc-dhcp-server bind9 git alfred alfred-json batman-adv-dkms nagios-nrpe-server ntp
|
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
...
auto lo
iface lo inet loopback
Codeblock |
---|
up ip address add <öffentliche ipv4 die wir vom FF Rheinland erhalten>/32 dev lo
|
...
iface br0 inet static
Codeblock |
---|
address 10.43.0.z
netmask 255.255.0.0
bridge_ports none
|
iface br0 inet6 static
Codeblock |
---|
address 2a03:2260:115::z
netmask 48
|
...
iface bat0 inet6 manual
Codeblock |
---|
pre-up modprobe batman-adv
post-up ip link set dev bat0 up
post-up brctl addif br0 bat0
post-up batctl it 10000
post-up ip rule add from all fwmark 0x1 table 42
|
...
auto tun-ffrl-???
iface tun-ffrl-??? inet static
Codeblock |
---|
address <lokale IPv4 Adresse im Tunnel>
netmask 255.255.255.254
pre-up ip tunnel add $IFACE mode gre local <IPv4 Adresse dieses Servers> remote <IPv4 Adresse der Gegenstelle> ttl 255
post-up ip link set $IFACE mtu 1400
post-down ip tunnel del $IFACE
|
iface tun-ffrl-??? inet6 static
Codeblock |
---|
address <lokale IPv6 Adresse im Tunnel>/64
netmask 64
|
...
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.
...
Wiki-Markup |
---|
<file - iptables.up.rules> *filter :INPUT ACCEPT \[0:0] :FORWARD ACCEPT \[0:0] :OUTPUT ACCEPT \[0:0] COMMIT |
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
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.
...
Und mache sie danach ausführbar:
Codeblock |
---|
chmod +x /etc/network/if-pre-up.d/iptables
|
Jetzt lädst du noch fix einmal die IPtables-Regeln via
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.
...
protocol direct {
Codeblock |
---|
interface "*";
|
};
protocol kernel {
Codeblock |
---|
device routes;
import all;
export all;
kernel table 42;
|
...
protocol device {
Codeblock |
---|
scan time 8;
|
};
function is_default() {
Codeblock |
---|
return (net ~ [0.0.0.0/0]);
|
...
function is_self_net() {
Codeblock |
---|
return (net ~ [ 10.43.0.0/16+ ]);
|
...
function is_freifunk() {
Codeblock |
---|
return net ~ [ 10.0.0.0/8+,
104.0.0.0/8+
];
|
...
filter hostroute {
Codeblock |
---|
if net ~ <Öffentliche IPv4 Adresse vom Rheinland Backbone, 185.66.193.48>/32 then accept;
reject;
|
...
template bgp internal {
Codeblock |
---|
local as <Unsere AS Nummer, 65251>;
import filter {
preference = 99;
accept;
};
export where source = RTS_BGP;
gateway direct;
next hop self;
|
...
protocol bgp gw_??? from internal {
Codeblock |
---|
neighbor <IP-Adresse innerhalb des FF netztes, z.B. 10.43.0.4> as <Unsere AS Nummer, 65251>;
|
...
template bgp uplink {
Codeblock |
---|
local as <Unsere AS Nummer, 65251>;
import where is_default();
export filter hostroute;
next hop self;
multihop 64;
default bgp_local_pref 200;
|
...
protocol bgp ffrl_??? from uplink {
Codeblock |
---|
source address <Unsere IP in GRE Tunnel, 100.64.0.109>;
neighbor <IP der Gegenstelle im GRE Tunnel, z.B. 100.64.0.108> as 201701;
|
...
protocol bgp ffrl_??? from uplink {
Codeblock |
---|
source address <Unsere IP in GRE Tunnel, 100.64.0.109>;
neighbor <IP der Gegenstelle im GRE Tunnel, z.B. 100.64.0.108> as 201701;
|
...
template bgp icvpn {
Codeblock |
---|
local as 65251;
# ignore routes for our own network
import where (is_freifunk() && !is_self_net());
export where is_freifunk();
route limit 10000;
|
...
protocol direct {
Codeblock |
---|
interface "*"; # Restrict network interfaces it works with
|
...
protocol kernel {
Codeblock |
---|
device routes;
import all;
export all; # Default is export none
kernel table 42; # Kernel table to synchronize with (default: main)
|
...
protocol device {
Codeblock |
---|
scan time 10; # Scan interfaces every 10 seconds
|
...
function is_default() {
Codeblock |
---|
return (net ~ [::/0]);
|
}
- own networks
...
filter hostroute {
Codeblock |
---|
if net ~ 2a03:2260:115::/48 then accept;
reject;
|
...
template bgp internal {
Codeblock |
---|
local as <Unsere AS Nummer, 65251>;
import filter {
preference = 99;
accept;
};
export where source = RTS_BGP;
gateway direct;
next hop self;
|
...
protocol bgp gw_??? from internal {
Codeblock |
---|
neighbor <Interne IPv6 Adresse des anderen Gateways, z.B. 2a03:2260:115::6> as <Unsere AS-Nummer, 65251>;
|
...
template bgp uplink {
Codeblock |
---|
local as <Unsere AS Nummer, 65251>;
import where is_default();
export filter hostroute;
gateway recursive;
|
...
protocol bgp ffrl_??? from uplink {
Codeblock |
---|
description "Rheinland Backbone";
source address <Unsere IPv6 Adresse im GRE Tunnel, z.B. 2a03:2260:0:3e::2>;
neighbor <IPv6 Adresse der Gegenstelle im GRE Tunnel, z.B. 2a03:2260:0:3e::1> as 201701;
|
...
protocol bgp ffrl_??? from uplink {
Codeblock |
---|
description "Rheinland Backbone";
source address <Unsere IPv6 Adresse im GRE Tunnel, z.B. 2a03:2260:0:3f::2>;
neighbor <IPv6 Adresse der Gegenstelle im GRE Tunnel, z.B. 2a03:2260:0:3f::1> as 201701;
|
...
template bgp icvpn {
Codeblock |
---|
local as 65251;
# ignore routes for our own network
import where is_freifunk() && !is_self_net();
export where is_freifunk() || (source = RTS_BGP);
route limit 10000;
|
...
Die verwendeten IC-VPN Konfigurationsdaten werden später erzeugt und jetzt erst einmal leer angelegt.
Codeblock |
---|
touch /var/tmp/bird-icvpn.conf
touch /var/tmp/bird6-icvpn.conf
|
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:
Codeblock |
---|
mkdir -p /etc/fastd/vpn/peers
|
Als nächstes erzeugst du die Schlüssel für deinen Server. Dazu führst du folgendes aus:
Codeblock |
---|
fastd --generate-key
|
dieser Befehl zeigt dir die Schlüssel lediglich an. Heißt du musst sie dir aus dem Terminal kopieren, um sie im nächsten Schritt verwenden zu können.
...
- Configure a shell command that is run on connection attempts by unknown peers (true means, all attempts are accepted)
- on verify "true";
on verify "
Codeblock |
---|
/bin/bash /var/gateway-ffms/fastd/verify.sh $PEER_KEY
|
...
- Configure a shell command that is run when fastd comes up
on up "
Codeblock |
---|
chmod ugo+rw /tmp/fastd-status
ip link set dev $INTERFACE address de:ad:be:ef:43:XX
ip link set dev $INTERFACE up
ifup bat0
batctl if add $INTERFACE
batctl gw server DOWNSTREAM/UPSTREAM
batctl vm server
ip rule add from ÖFFENTLICHE-IPv4-ADRESSE/METZMASKE lookup 42
ip -6 rule add from ÖFFENTLICHE-IPv6-ADRESSE/METZMASKE lookup 42
|
...
Nun brauchst du die Peers aus unserem GIT-Repository. Wechsle dazu in das Verzeichnis /var und führe folgendes aus:
Codeblock |
---|
git clone https://github.com/FreiFunkMuenster/gateway-ffms.git
|
Zum testen der fastd-Konfiguration führe folgendes aus:
Codeblock |
---|
fastd -c /etc/fastd/vpn/fastd.conf
|
Anschließend kannst du fastd mit
Codeblock |
---|
service fastd start
|
starten.
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
...
Anschließend wird das Repo https://github.com/freifunk/icvpn auf den lokalen Server geklont.
Codeblock |
---|
cd /var
git clone https://github.com/freifunk/icvpn
|
Anschließend muss das Verzeichnis /etc/tinc/icvpn
erstellt werden.
Codeblock |
---|
mkdir /etc/tinc/icvpn
ln /var/icvpn/hosts /etc/tinc/icvpn/hosts -s
|
Als nächstes werden die Schlüssel für den Server erzeugt.
Die Dateien müssen in dem Verzeichnis /etc/tinc/icvpn
gespeichert werden.
Codeblock |
---|
tinc generate-keys
|
Jetzt folgt die Konfigurationsdatei /etc/tinc/icvpn/tinc.conf
Codeblock |
---|
Name = muensterland<Kürzel des Gateways>
PrivateKeyFile = /etc/tinc/icvpn/rsa_key.priv
Mode = Switch
PingTimeout = 30
Port = 656
Hostnames = yes
|
Im Gleichen Verzeichnis muss auch ein Script /etc/tinc/icvpn/tinc-up
angelegt werden.
Die IP Adresse innerhalb des VPNs muss für den Server muss in der Liste https://wiki.freifunk.net/IC-VPN eingetragen werden.
Codeblock |
---|
#!/bin/sh
/sbin/ip link set dev $INTERFACE up
/sbin/ip addr add dev $INTERFACE 10.207.X.Y/16 broadcast 10.207.255.255 scope link
/sbin/ip -6 addr add dev $INTERFACE fec0::a:cf:X:Y/96 preferred_lft 0
|
In der Datei /etc/tinc/nets.boot
wird anschließend folgende Zeile ergänzt damit Tinc das Netzwerk automatisch startet.
Codeblock |
---|
icvpn
|
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 |
---|
AdvSendAdvert on;
IgnoreIfMissing on;
|
AdvManagedFlag off;
Codeblock |
---|
AdvOtherConfigFlag on;
AdvLinkMTU 1280;
|
Codeblock |
---|
prefix 2a03:2260:115::z/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
|
};
Codeblock |
---|
RDNSS 2a03:2260:115::z {
};
|
...
Als letztes kannst du radvd via
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;
...
subnet 10.43.0.0 netmask 255.255.0.0 {
Codeblock |
---|
range 10.43.zz.1 10.43.zz.254;
|
option routers 10.43.0.x;
Codeblock |
---|
option domain-name-servers 10.43.0.x;
option interface-mtu 1280;
|
...
Nun testest du den DHCP-Server via:
Codeblock |
---|
dhcpd -f -d
|
und anschließend startest du den DHCP-Server via:
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
#
#
...
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
|
...
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)
|
fi
DHCPD_PID="${DHCPD_PID:-/var/run/dhcpd6.pid}"
test_config()
{
Codeblock |
---|
if ! /usr/sbin/dhcpd -6 -t $OPTIONS -q -cf "$DHCPD_CONF" > /dev/null 2>&1; then
echo "dhcpd self-test failed. Please fix $DHCPD_CONF."
echo "The error was: "
/usr/sbin/dhcpd -6 -t $OPTIONS -cf "$DHCPD_CONF"
exit 1
fi
|
...
- single arg is -v for messages, -q for none
check_status()
{
Codeblock |
---|
if [ ! -r "$DHCPD_PID" ]; then
test "$1" != -v || echo "$NAME is not running."
return 3
fi
if read pid < "$DHCPD_PID" && ps -p "$pid" > /dev/null 2>&1; then
test "$1" != -v || echo "$NAME is running."
return 0
else
test "$1" != -v || echo "$NAME is not running but $DHCPD_PID exists."
return 1
fi
|
}
case "$1" in
Codeblock |
---|
start)
test_config
log_daemon_msg "Starting $DESC" "$NAME"
start-stop-daemon --start --quiet --pidfile "$DHCPD_PID" \
|
- -exec /usr/sbin/dhcpd – \
- 6 -q $OPTIONS -cf "$DHCPD_CONF" -pf "$DHCPD_PID" $INTERFACES
Codeblock |
---|
sleep 2
|
if check_status -q; then
Codeblock |
---|
log_end_msg 0
else
log_failure_msg "check syslog for diagnostics."
log_end_msg 1
exit 1
fi
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
start-stop-daemon --stop --quiet --pidfile "$DHCPD_PID"
log_end_msg $?
rm -f "$DHCPD_PID"
;;
restart | force-reload)
test_config
$0 stop
sleep 2
$0 start
if [ "$?" != "0" ]; then
exit 1
fi
;;
status)
echo -n "Status of $DESC: "
check_status -v
exit "$?"
;;
|
- )
Codeblock |
---|
echo "Usage: $0 {start|stop|restart|force-reload|status}"
exit 1
|
...
Danach mache das Script ausführbar und lege es in den Autostart via:
Codeblock |
---|
chmod +x /etc/init.d/isc-dhcp6-server
update-rc.d isc-dhcp6-server defaults
|
...
Als letztes erzeuge die dhcpd6.leases
Datei via:
Codeblock |
---|
touch /var/lib/dhcp/dhcpd6.leases
|
Nun kannst du den DHCPv6-Server starten:
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 |
---|
cd /var
git clone https://github.com/freifunk/icvpn-meta
git clone https://github.com/freifunk/icvpn-scripts
|
Anschließend werden die BGP-Konfigurationen erzeugt und in bird geladen.
Codeblock |
---|
/var/icvpn-scripts/mkbgp -x muenster -p icvpn_ -s /var/icvpn-meta/ -f bird -d icvpn -4 > /var/tmp/bird-icvpn.conf
birdc configure
/var/icvpn-scripts/mkbgp -x muenster -p icvpn_ -s /var/icvpn-meta/ -f bird -d icvpn -6 > /var/tmp/bird6-icvpn.conf
birdc6 configure
|
Als nächstes wird eine DNS Konfigurationsdatei erzeugt
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 |
---|
directory "/var/cache/bind";
|
_ If there is a firewall between you and nameservers you want
Codeblock |
---|
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
|
_ If your ISP provided one or more IP addresses for stable
Codeblock |
---|
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
|
_ forwarders {
Codeblock |
---|
// 0.0.0.0;
// };
|
_
Codeblock |
---|
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
recursion yes;
allow-recursion { localnets; localhost; };
|
allow-notify { 10.43.0.10; };
Codeblock |
---|
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
|
...
include "/var/tmp/named.conf.icvpn"
zone "ffms" {
Codeblock |
---|
type slave;
masters { 10.43.0.10; };
file "/var/tmp/db.ffms.bak";
|
...
zone "nodes.ffms" {
Codeblock |
---|
type slave;
masters { 10.43.0.10; };
file "/var/tmp/db.nodes.ffms.bak";
|
...
zone "gw.freifunk-muenster.de" {
Codeblock |
---|
type slave;
masters { 10.43.0.10; };
file "/var/tmp/db.gw.freifunk-muenster.de.bak";
|
...
Nun kannst du bind9 starten:
Codeblock |
---|
service bind9 restart
|
NRPE Daemon einrichten
Die Gateways werden von einem zentralen Nagios Server überwacht.
Nach der Installation müssen in der Konfigurationsdatei /etc/nagios/nrpe.cfg
die folgenden Zeilen angepasst werden:
Codeblock |
---|
allowed_hosts=10.43.0.13
|
Codeblock |
---|
include_dir=/var/gateway-ffms/nrpe/
|
Zusätzlich benötigt der NRPE-Daemon weitere Berechtigungen die in der /etc/sudoers
vergeben werden müssen:
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.
Zuerst muss Munin noch installiert werden, diese Installtion sollte erst jetzt, nachdem das Gateway komplett konfiguriert ist erfolgen, da die Interface-Konfigurationen für Munin während der Installation automatisch generiert werden, und man sich arbeit spart, wenn die Netzwerkinterfaces bei der Installation alle bereits existieren.
Codeblock |
---|
aptitude install munin-node
|
...
Zum Schluss startest du munin-node via
Codeblock |
---|
service munin-node restart
|
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)
Als erstes erzeuge ein "Schwarzes Loch" im im rsyslogd
Suche in /etc/rsyslog.conf
folgende Zeile:
<file - rsyslog.conf>
.;auth,authpriv.none -/var/log/syslog
</file>
und ersetze sie durch
<file - rsyslog.conf>
.;auth,authpriv.none;local6.none -/var/log/syslog
</file>
Dann suche den Block
<file - rsyslog.conf>
.=info;.=notice;*.=warn;\
Codeblock |
---|
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
|
</file>
und ändere ihn so, daß er wie folgt aussieht
<file - rsyslog.conf>
.=info;.=notice;*.=warn;\
Codeblock |
---|
auth,authpriv.none;local6.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
|
</file>
dann füge noch das Folgende am Ende ein:
<file - rsyslog.conf>
#
BlackHole
#
local6.* /dev/null
</file>
Jetzt den Logdämon restarten mitCodeblock service rsyslog restart
...
Jetzt fehlt nur noch der Nameserver.
Erstelle die Datei /etc/bind/named.conf.logging
mit folgendem Inhalt:
<file - named.conf.logging>
logging {
Codeblock |
---|
channel null { null; };
category default { null; };
|
...
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
- BEGIN INIT INFO
- Provides: delfastdstat
- Required-Start: $local_fs $syslog
- Required-Stop: $local_fs
- Default-Start: 2 3 4 5
- Default-Stop: 0 1 6
- Short-Description: delfastdstat
- Description: Loescht fastd-status nach crash
- END INIT INFO
if test -S /tmp/fastd-status
Codeblock |
---|
then
rm /tmp/fastd-status
else
echo NoOp
|
fi
exit 0
- 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.