Dies ist eine alte Version des Dokuments!
Dynamisches Routing zwischen den Segmenten (Work in progress!)
Um nicht auf jedem Gateway zwingend alle Segmente als L2 vorhalten zu müssen, ist ein L3-Routing zwischen den Segmenten erforderlich. Da statische Routen schlecht skalieren, kommt OSPF als Routing-Protokoll zum Einsatz. Die L3-Verbindung erfolgt über ein Tinc-VPN.
Konfiguration
Vorbereitung: Einrichtung Tinc
Tinc, VLAN-Support und bridge-utils installieren:
apt-get install tinc vlan bridge-utils
Tinc konfigurieren:
cd /etc/tinc mkdir ffsVPN mkdir ffsVPN/hosts/
Tinc-Konfigurationsdatei /etc/tinc/ffsVPN/tinc.conf anlegen:
# IPv6 + IPv4 AddressFamily = any # Tinc nur über das öffentliche Netz laufen lassen BindToInterface = eth0 Broadcast = mst ConnectTo = gw02 # Hier sollten alle aktuell verfügbaren GWs stehen Mode = switch name = gw<gwnum> # z.B. gw10 # Kommentare ARE: #Mode = switch #Forwarding = off #IndirectData = no #DirectOnly = yes
In /etc/tinc/ffsVPN/hosts/ liegen die Schlüsseldateien der Tinc-GWs.
Die Schlüsseldatei generieren
tincd -n ffsVPN -K 4096
und die Addresse ergänzen, z.B. /etc/tinc/ffsVPN/hosts/gw10:
Cipher = blowfish Address = gw10.freifunk-stuttgart.de -----BEGIN RSA PUBLIC KEY----- MIICCgKCAgEA4G/ek8KZuHFZPVuNK5HsQvCPAe/lhzYp2ERqVUWa1jHnnG/5fk1E IgicXfVdJV/2j8OGrrKhpZRMfzgXCZtq639fJb7XmB9ZF3OF9I8pceIWGt8E1M5j TUYfyQKrQBj1itz2sn4RqJJJDaXpMFIu3swSJ6stLMumq2MYRxS4BciLwGBrkSaH vVP5Xufd5GG6ZnTBN+8eqnLV4chw2yTsf+Wk1rSA9wZnI0tDH6nkHrKg5H6HRzWB 1/fb/Rt38waSuc+7Kx0eH2CJX8dzMeiB64kR38dKMiwkb84rdtkGthY8oWG3057o EZPzdMOUs2Qnvw1Bol/SWsXU0Qg/fntcbKdgi6PZjdTbHvjoZE+l1OMGGAkf9Ost 7GzM4pC2Pu1mLUHFXlZ7RW6SBLaKX5/tAfTPkLbYsVFPgygpGRSRpGkMZJqgMWMA Lch+imiegXg2TewUrSqauxTxGaN32y+3XdmX914RDx7IlCr/fpmknljcAaAYgy+g w0TWrgxhq8nXoJJ68FL8aPDvPpK6mPnS3YtCRkuaf0AsZonaUBGiQFIT1jtgv8Fv YpY1ve/xyyPj57RepkDAFHa6aUmpR5IcOQ6MXnG+j+CNlwiY9WCWHxmtYUaL7dxR Fdqgnmax0IyY00/IHgMjOq0PS7rfz1ANmg6ubVEZbjIwZmziIbg8cXkCAwEAAQ== -----END RSA PUBLIC KEY-----
Das tinc-Interface konfigurieren (/etc/network/interfaces.d/ffsVPN):
allow-hotplug ffsVPN
auto ffsVPN
iface ffsVPN inet manual
pre-up ifconfig $IFACE up
post-up ifup $IFACE.100
pre-down ifdown $IFACE.100
post-down ifconfig $IFACE down
auto ffsVPN.100
allow-hotplug ffsVPN.100
iface ffsVPN.100 inet static
address 10.191.255.<gwnum>/24 # Z.B. 10.191.255.10
netmask 255.255.255.0
broadcast 10.191.255.255
vlan-raw-device ffsVPN
post-up /sbin/ip rule add iif $IFACE table ffs priority 7000
pre-down /sbin/ip rule del iif $IFACE table ffs priority 7000
Routing-Tabellen anlegen, dazu zwei Zeilen zu /etc/iproute2/rt_tables hinzufügen:
70 ffs 42 icvpn
Um das VPN automatisch zu starten, den entsprechenden Eintrag zu /etc/tinc/nets.boot hinzufügen:
ffsVPN
Einrichtung OSPF
Quagga propagiert Routen grundsätzlich zwischen den Routing-Protokollen und der Kernel-Table main, was für ffs ungeeignet ist. BIRD spricht ebenfalls die relevanten Routing-Protokolle OSPFv[23] und BGP, läßt aber eine Konfiguration der Ziel-Routing-Tabelle zu.
Installation:
apt-get install bird
Da FFS z.Z. noch keinen IPv6-Upstream hat, erfolgt die Einrichtung zuerst nur für IPv4, weshalb zunächst nur der IPv4-Daemon benötigt und der IPv6-Daemon daher deaktivert wird:
systemctl disable bird6
Die Konfiguration von bird erfolgt über /etc/bird/bird.conf:
router id 10.191.255.<gw>; # z.B. 10.191.255.10
protocol kernel {
learn; # Learn all alien routes from the kernel
persist no;
scan time 20; # Scan kernel routing table every 20 seconds
export all; # Default is export none
kernel table 70; # Kernel table to synchronize with (default: main)
export filter { # Propagate routes with low metric into kernel table
krt_metric = 100;
accept;
};
}
# This pseudo-protocol watches all interface up/down events.
protocol device {
scan time 10; # Scan interfaces every 10 seconds
}
protocol ospf ffsBackbone {
preference 100;
rfc1583compat no; # Metrik gem. OSPFv2, RFC 2328
stub router no; # Box macht ggf. auch Transit-Traffic
tick 1; # Topologie-Berechnungen nur alle 1s
ecmp no; # Kein Equal-Cost-Multipath, um Problemen mit unterschiedlichen
# Uplinks aus dem Weg zu gehen
import all;
export filter {
accept;
};
area 0.0.0.0 { # Backbone-Area
external{
0.0.0.0/0;
};
interface "ffsVPN.100" { # Run OSPF over VPN
cost 100;
hello 10;
poll 20;
retransmit 5;
priority 10;
wait 40;
type bcast;
authentication cryptographic;
password "ffsVPN00";
};
interface "br*" { # Don't run OSPF over interface, but propagate networks
stub yes;
};
};
};