technik:gateways:routing

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
technik:gateways:routing [20.09.2015 - 15:33] – [Wie funktionier das ganze?] lamdotechnik:gateways:routing [28.04.2019 - 11:38] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 3: Zeile 3:
 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. 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.
  
 +https://github.com/freifunk-stuttgart/tinc-ffsbb
 ===== Konfiguration ===== ===== Konfiguration =====
  
 ==== Vorbereitung: Einrichtung Tinc ==== ==== Vorbereitung: Einrichtung Tinc ====
  
-Tinc, VLAN-Support und bridge-utils installieren:+Tinc und bridge-utils installieren:
 <code> <code>
-apt-get install tinc vlan bridge-utils+apt-get install tinc bridge-utils
 </code> </code>
  
Zeile 15: Zeile 16:
 <code> <code>
 cd /etc/tinc cd /etc/tinc
-mkdir ffsVPN +mkdir ffsbb 
-mkdir ffsVPN/hosts/+mkdir ffsbb/hosts/
 </code> </code>
  
Zeile 32: Zeile 33:
 Mode = switch Mode = switch
  
-name = gw<gwnum> # z.B. gw10 +name = $HOST
- +
-# Kommentare ARE: +
-#Mode = switch +
-#Forwarding = off +
-#IndirectData = no +
-#DirectOnly = yes+
 </file> </file>
  
-In ''/etc/tinc/ffsVPN/hosts/'' liegen die Schlüsseldateien der Tinc-GWs.+In ''/etc/tinc/ffsbb/hosts/'' liegen die Schlüsseldateien der Tinc-GWs.
  
 Die Schlüsseldatei generieren Die Schlüsseldatei generieren
 <code> <code>
-tincd -n ffsVPN -K 4096+tincd -n ffsbb -K 4096
 </code> </code>
-und die Addresse ergänzen, z.B. ''/etc/tinc/ffsVPN/hosts/gw10'':+und die Addresse ergänzen, z.B. ''/etc/tinc/ffsbb/hosts/gw10'':
 <file> <file>
 Cipher = blowfish Cipher = blowfish
 Address = gw10.freifunk-stuttgart.de Address = gw10.freifunk-stuttgart.de
 +Port = 11100 
 +PMTUDiscovery = yes 
 +Digest = sha256 
 +ClampMSS = yes
 -----BEGIN RSA PUBLIC KEY----- -----BEGIN RSA PUBLIC KEY-----
 MIICCgKCAgEA4G/ek8KZuHFZPVuNK5HsQvCPAe/lhzYp2ERqVUWa1jHnnG/5fk1E MIICCgKCAgEA4G/ek8KZuHFZPVuNK5HsQvCPAe/lhzYp2ERqVUWa1jHnnG/5fk1E
Zeile 67: Zeile 65:
 </file> </file>
  
-Das tinc-Interface konfigurieren (''/etc/network/interfaces.d/ffsVPN''):+Das tinc-Interface konfigurieren (''/etc/network/interfaces.d/ffsbb''):
 <file> <file>
-allow-hotplug ffsVPN +allow-hotplug ffsbb 
-auto ffsVPN +auto ffsbb 
-iface ffsVPN inet manual +iface ffsbb inet static 
-        pre-up ifconfig $IFACE up +        tinc-net ffsbb 
-        post-up ifup $IFACE.100 +        tinc-mlock yes 
-        pre-down ifdown $IFACE.100 +        tinc-pidfile /var/run/tinc.ffsbb.pid
-        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         address 10.191.255.<gwnum>/24    # Z.B. 10.191.255.10
         netmask 255.255.255.0         netmask 255.255.255.0
         broadcast 10.191.255.255         broadcast 10.191.255.255
-        vlan-raw-device ffsVPN + post-up         /sbin/ip rule add iif $IFACE table stuttgart priority 7000 || true 
- post-up         /sbin/ip rule add iif $IFACE table ffs priority 7000 + pre-down        /sbin/ip rule del iif $IFACE table stuttgart priority 7000 || true
- pre-down        /sbin/ip rule del iif $IFACE table ffs priority 7000+
  
 </file> </file>
Zeile 91: Zeile 83:
 Routing-Tabellen anlegen, dazu zwei Zeilen zu ''/etc/iproute2/rt_tables'' hinzufügen: Routing-Tabellen anlegen, dazu zwei Zeilen zu ''/etc/iproute2/rt_tables'' hinzufügen:
 <code> <code>
-70 ffs+70 stuttgart 
 +71      nodefault
 42 icvpn 42 icvpn
-</code> 
- 
-Um das VPN automatisch zu starten, den entsprechenden Eintrag zu ''/etc/tinc/nets.boot'' hinzufügen: 
-<code> 
-ffsVPN  
 </code> </code>
  
Zeile 109: Zeile 97:
 </code> </code>
  
-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: +Die Konfiguration von bird erfolgt über den Generator https://github.com/freifunk-stuttgart/FfsConfigGenerator, hier nur exemplarisch:
-<code> +
-systemctl disable bird6 +
-</code> +
- +
-Die Konfiguration von bird erfolgt über ''/etc/bird/bird.conf'':+
 <file> <file>
 router id 10.191.255.<gw>;      # z.B. 10.191.255.10 router id 10.191.255.<gw>;      # z.B. 10.191.255.10
 +
 +# Define a route filter...
 +filter ffs_filter {
 +    if net ~ 172.21.0.0/16 then accept;
 +    if net ~ 10.190.0.0/15 then accept;
 +    else reject;
 +}
  
 protocol kernel { protocol kernel {
Zeile 123: Zeile 113:
         scan time 20;           # Scan kernel routing table every 20 seconds         scan time 20;           # Scan kernel routing table every 20 seconds
         export all;             # Default is export none         export all;             # Default is export none
 +        import all;
         kernel table 70;        # Kernel table to synchronize with (default: main)         kernel table 70;        # Kernel table to synchronize with (default: main)
         export filter {         # Propagate routes with low metric into kernel table         export filter {         # Propagate routes with low metric into kernel table
Zeile 128: Zeile 119:
                 accept;                 accept;
         };         };
- 
 } }
  
Zeile 143: Zeile 133:
         ecmp no;                # Kein Equal-Cost-Multipath, um Problemen mit unterschiedlichen         ecmp no;                # Kein Equal-Cost-Multipath, um Problemen mit unterschiedlichen
                                 # Uplinks aus dem Weg zu gehen                                 # Uplinks aus dem Weg zu gehen
-        import all+        import filter ffs_filter # filtert alle andern IPs 
-        export filter +        export filter ffs_filter # filtert alle andern IPs 
-                accept+
-        };+
         area 0.0.0.0 {          # Backbone-Area         area 0.0.0.0 {          # Backbone-Area
             external{             external{
Zeile 152: Zeile 141:
             };             };
  
-           interface "ffsVPN.100" {   # Run OSPF over VPN+           interface "ffsbb" {   # Run OSPF over VPN
                 cost            100;                 cost            100;
                 hello           10;                 hello           10;
Zeile 164: Zeile 153:
            };            };
  
-           interface "br*" {    # Don't run OSPF over interface, but propagate networks +#           interface "br*" {    # Don't run OSPF over interface, but propagate networks 
-                stub yes; +#                cost 1000; 
-           };+               stub yes; 
 +          }; 
 +#           interface "ffs-br" {    # Don't run OSPF over interface, but propagate networks 
 +#                cost 1000; 
 +#                stub yes; 
 +#           }; 
 +           stubnet 172.21.28.0/22;      # eigener DHCP Range Segment 0 
 +           stubnet 10.190.48.0/21;      # eigener DHCP Range Segment 1 
 +           stubnet 10.190.112.0/21;     # eigener DHCP Range Segment 2 
 +           stubnet 10.190.176.0/21;     # eigener DHCP Range Segment 3 
 +           stubnet 10.190.240.0/21;     # eigener DHCP Range Segment 4           
        };        };
 }; };
Zeile 172: Zeile 171:
 </file> </file>
  
-==== Wie funktionier das ganze? ====+==== Wie funktioniert das ganze? ====
  
 Über das VPN bauen die bird-Instanzen OSPF-Adjacencies auf und tauschen darüber Informationen über die bekannten Netze aus. Jede OSPF-Instanz berechnet dann für sich, wie dieses Netz am besten erreicht werden kann. Da OSPF ein Link-State-Protokoll ist und alle Instanzen die gleichen Informationen haben und den gleichen Algorithmus verwenden, kommt es dabei auch nicht zu Loops. Über das VPN bauen die bird-Instanzen OSPF-Adjacencies auf und tauschen darüber Informationen über die bekannten Netze aus. Jede OSPF-Instanz berechnet dann für sich, wie dieses Netz am besten erreicht werden kann. Da OSPF ein Link-State-Protokoll ist und alle Instanzen die gleichen Informationen haben und den gleichen Algorithmus verwenden, kommt es dabei auch nicht zu Loops.
  
 Bird ist so konfiguriert, dass es zwei Arten von Routen propagiert: Bird ist so konfiguriert, dass es zwei Arten von Routen propagiert:
-  - Statische Kernel-Routen in der FFS-Tabelle. Hierüber können andere Gateways den lokalen Uplink (egal, ob per VPN oder über lokale Ausleitung realisiert) nutzen, ohne dass das auf den anderen GWs konfiguriert werden muss.+  - Statische Kernel-Routen in der stuttgart-Tabelle. Hierüber können andere Gateways den lokalen Uplink (egal, ob per VPN oder über lokale Ausleitung realisiert) nutzen, ohne dass das auf den anderen GWs konfiguriert werden muss.
   - Lokal auf den Interfaces br* konfigurierte Netze. Hierüber werden die am lokalen GW vorhandenen Segmente netzweit propagiert   - Lokal auf den Interfaces br* konfigurierte Netze. Hierüber werden die am lokalen GW vorhandenen Segmente netzweit propagiert
  
  • technik/gateways/routing.1442763211.txt.gz
  • Zuletzt geändert: vor 5 Jahren
  • (Externe Bearbeitung)