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; }; }; };