Inhaltsverzeichnis

InterCity-VPN

ASN 65433 (Autonomes System)

siehe: https://wiki.freifunk.net/IC-VPN

Öffentliche IPv6-Adressen: 2001:bf7:70::/44 die 70 ist entsprechend Wahlkreis 70 „Pinneberg“ vergeben worden.

Transfernetz IPv6: fec0:a:cf:1e

Registrieren bei NOC Berlin: mailto:noc@berlin.freifunk.net

Konfiguration unter https://github.com/freifunk-pinneberg/icvpn-meta/blob/master/pinneberg, die Daten dort müssen vor Inbetriebnahme aktualisiert werden.

Vorüberlegungen

Basisdaten

Informationen zu den einzelnen am ICVPN teilnehmenden Communities.

Die Metadaten werden in /var/lib/icvpn-meta gespeichert. Der Ursprung ist ein Git-Repository, die Aktualisierung erfolgt durch ein Script mit Cron-Job (s.u.).

Es gibt eine Sammlung von Scripts für ICVPN: icvpn-scripts.

Voraussetzung und Installation

aptitude install python3 python3-yaml
cd /opt
git clone https://github.com/freifunk/icvpn-scripts

Das folgende Script wird mittels eines Cron-Jobs (in cron.daily) täglich ausgeführt, in dieser Version allerdings nur vom Master-Gateway. Die übrigen Systeme bekommen die Daten über lsync weiterverteilt.

icvpn-update
#!/bin/sh
#
# Freifunk Intercity VPN:  Daten aktualisieren
#
 
OWN_COMMUNITY=pinneberg
ICVPN_META_DIR=/var/lib/icvpn-meta
BIRD_CONF=/etc/bird/bird.d/icvpn.conf
NAMED_CONF=/etc/bind/named.conf.icvpn-zones
 
# Basisdaten über Git aktualisieren
cd /etc/tinc/icvpn
git pull -q
cd $ICVPN_META_DIR
git pull -q
 
# Konfigurationsdateien aus den neuen Daten erzeugen
/opt/icvpn-scripts/mkbgp -f bird -4 -s $ICVPN_META_DIR -d peers -x $OWN_COMMUNITY > $BIRD_CONF
/opt/icvpn-scripts/mkdns -f bind -s $ICVPN_META_DIR -x $OWN_COMMUNITY > $NAMED_CONF

Tinc

Infos von tinc erfragen

Bird

Wir konfigurieren die Protokollierung etwas anders als in den übrigen Anleitungen, da ggf. viele Meldungen ausgegeben werden. Ins Syslog kommen nur die wichtigen Nachrichten, alles übrige wird in andere Dateien unter /var/log/bird/ geschrieben

/etc/bird/bird.conf
[...]
log syslog { auth, fatal, bug };
log "/var/log/bird/default.log" { debug, trace, info, remote, warning };
log "/var/log/bird/error.log" { error };
[...]

Sinnvollerweise sollten die Protokolldateien rotiert werden, wir wollen die Logdateien für eine Woche vorhalten, für jeden Tage eine:

/etc/logrotate.d/bird
/var/log/bird/*.log {
    daily
    rotate 7
    missingok
    compress
    create 0640 bird bird
    sharedscripts
    postrotate
        [ -e /var/run/bird/bird.ctl ] && invoke-rc.d bird reload >/dev/null
    endscript
}

Übertragung des Routings an die anderen Gateways:

/etc/bird/bird.d/gateways.conf
protocol bgp gate03 from locals {
    neighbor 10.137.12.1 as 65433;
}
protocol bgp gate04 from locals {
    neighbor 10.137.13.1 as 65433;
}
protocol bgp gate05 from locals {
    neighbor 10.137.14.1 as 65433;
}

Die Konfiguration kann mit birdc überprüft werden. Das Programm kann ohne Parameter aufgerufen werden, dann ist es im interaktiven Modus. Mit ? bekommt man die Hilfe angezeigt.

Alternativ können befehle auch direkt abgesetzt werden:

Invalid NEXT_HOP

Anscheinend ist dies ein komplizierteres Thema.

Zusammenfassung, wer mit welche Adressen im Protokoll auftaucht kann man mit dem folgenden Befehl erhalten:

grep "Invalid NEXT_HOP" /var/log/syslog | cut -f 7,13 -d "> " | sort | uniq -c | sort -n | tail

Namensauflösung mit Bind

Ziel ist es, daß die Namen anderer Communities aufgelöst werden.

TODO Testen bzw. zu Ende konfigurieren

/etc/bind/named.conf
[...]
include "/etc/bind/named.conf.icvpn-zones";

Wenn der folgende Wert auf auto steht (Standardeinstellung), dann funktioniert die Namensauflösung im ICVPN nicht. Deshalb:

/etc/bind/named.conf.options
        dnssec-validation no;

Die ICVPN-Metadaten werden auf die übrigen Gateways übertragen. Momentan ist Gate03 konfiguriert.

/etc/cron.daily/ff-dns-update
#!/bin/sh
#
# Freifunk Intercity  VPN: DNS aktualisieren
#
 
OWN_COMMUNITY=pinneberg
ICVPN_META_DIR=/var/lib/icvpn-meta
NAMED_CONF=/etc/bind/named.conf.icvpn-zones
 
# Konfigurationsdatei neu schreiben
/opt/icvpn-scripts/mkdns -f bind -s $ICVPN_META_DIR -x $OWN_COMMUNITY > $NAMED_CONF
 
# Nameserverdaten neu laden
/usr/sbin/rndc reload