Netzwerk/Super-Node Backbone Anbindung: Unterschied zwischen den Versionen

Aus Freifunk Rheinland e.V.
Zur Navigation springen Zur Suche springen
(→‎Anbindung an das Layer2 Netz via tinc: Kommentare und chmod +x für tinc-up)
 
(31 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
= Anbindung von Supernodes an den Freifunk Rheinland Backbone =
Dieser Artikel erläutert, wie eine [[Super-Node]] an den [[Backbone]] des Freifunk Rheinland angeschlossen werden kann.
Dieser Artikel soll erläutern wie eine Supernode an den Backbone des Freifunk Rheinland angeschlossen werden kann.


== Anbindung an das Layer2 Netz via tinc ==
== Netzwerkdiagram ==
[https://forum.freifunk-rheinland.net/uploads/default/170/326136dea60dc3de.png Im Forum, Stand 4.10.2014]


Zuerst einmal ist das Paket tinc auf dem Super-Node zu installieren.
== tinc ==


  mkdir -p /etc/tinc/rheinland
Die Super-Nodes und die Router bilden ein vermaschtes VPN (Layer 2) per tinc.


  # < /etc/tinc/rheinland/tinc.conf
Zuerst das Paket tinc installieren.
  AddressFamily ipv4
  BindToInterface <public IPv4 Interface>
  Broadcast direct
  DeviceType tap
  DirectOnly yes
  Forwarding off
  HostNames no
  Interface bb0
  Mode switch
  Name <hostname>
  PingInterval 15
  PingTimeout 5
  PrivateKeyFile /etc/tinc/rsa_key.priv
  ConnectTo = rheinland0
  ConnectTo = rheinland1
  Debug 3


  # < /etc/tinc/rheinland/hosts/rheinland0
# pacman -S tinc
  Address=78.47.35.141
  -----BEGIN RSA PUBLIC KEY-----
  MIIBCgKCAQEAxaewx1cZPPjeRLomoO2z0GN/Lioc0bwEoM9cB++lzqfhfEbNLDbU
  hMkn2Q/2uR51h2ZJ5tgUcU1wCa2lrPXVO8e8oZo7RTJi+rYJyDtosC2W693GtLxK
  GYDQOyPmrcc55X4j0UeyFNP2dKH8qmRH2cs2VM1sJslKOGheJVSXxo2xBQy2EiQw
  AMITubAW6NaG/tB5hwehyvcp11B/EXuWl1UByEi3R8TCQPPyyuyhmVswnSUZzbsU
  UMkazbrbaK322DmuHT8txn4DK6/DLSz0MzPwe0AGB8ReQA5wKS2JgnRmZ0HKLJ9K
  awnBNLV2ate25FZuvjHkD6yyjQcCsoryMwIDAQAB
  -----END RSA PUBLIC KEY-----


  # < /etc/tinc/rheinland/hosts/rheinland1
Das Verzeichnis für die Backbone-Konfiguration und die Schlüssel anlegen. Der Name dieser Instanz lautet: ''rheinland''.
  Address=78.47.35.139
  -----BEGIN RSA PUBLIC KEY-----
  MIIBCgKCAQEA2xz9NGY9XUkrsciIZ5AucrtGnlXcD257/jYDyyCVLDNuS16cA3vF
  bsH5Br3zjYRsN+AZjvgUbfCyrM4qxWBoSTmcFOH5uQLt0RD+p8dpq/p/9B0vRMI2
  eGLK6C+2EylLEui9lrwpXF27530uIlXxORsjEgGjgJMegkTQoU/yFpt8kXr0N+Zg
  sCdLyVByzS6FqmZOuFJiNTC/IggkRHqqKLoj9Kp4L/qqdTCeszWVtkNQpljXhiEq
  4OR9nreH+icns+GrvWAqhMUyVTJrOr1nPDgFT5FytGjmudN/tSpp7PE4OZbvpIg/
  ZxMfmKM7Qs/+xPLry7SB7NJzJSJVOR6fDQIDAQAB
  -----END RSA PUBLIC KEY-----


Skript zum Setzen der Adressen. Bitte XXX und XXXX durch zugewiesene Werte ersetzen!
# mkdir -p /etc/tinc/rheinland/hosts


  # < /etc/tinc/rheinland/tinc-up
Die tinc-Konfiguration für tinc ablegen. Hier das externe Interface des Servers unter $INTERFACE und den Hostnamen unter $HOSTNAME eintragen.
  #/bin/sh
 
  ip link set up dev $INTERFACE
  ip -4 addr add 10.78.0.XXX/22 dev $INTERFACE
  ip -6 addr add 2001:470:72da::XXXX/64 dev $INTERFACE
  ip -6 addr add 2001:470:7861::XXXX/64 dev $INTERFACE


Ausführbar machen
# > /etc/tinc/rheinland/tinc.conf
AddressFamily ipv4
BindToInterface $INTERFACE
Broadcast direct
DeviceType tap
DirectOnly yes
Forwarding off
HostNames no
Interface bb0
Mode switch
Name $HOSTNAME
PingInterval 15
PingTimeout 5
PrivateKeyFile /etc/tinc/rsa_key.priv
ConnectTo = rheinland0
ConnectTo = rheinland1
Debug 3


  # chmod +x /etc/tinc/rheinland/tinc-up
Dann eine Datei mit Adresse und Schlüssel des einen Routers anlegen.


Public/private key pair erzeugen. Wir nehmen die Standardlänge von 2048 bit und den vorgeschlagenen Pfad zu den Dateien (/etc/tinc/rsa_key.priv und /etc/tinc/rsa_key.pub).
# > /etc/tinc/rheinland/hosts/rheinland0
Address=78.47.35.139
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA2xz9NGY9XUkrsciIZ5AucrtGnlXcD257/jYDyyCVLDNuS16cA3vF
bsH5Br3zjYRsN+AZjvgUbfCyrM4qxWBoSTmcFOH5uQLt0RD+p8dpq/p/9B0vRMI2
eGLK6C+2EylLEui9lrwpXF27530uIlXxORsjEgGjgJMegkTQoU/yFpt8kXr0N+Zg
sCdLyVByzS6FqmZOuFJiNTC/IggkRHqqKLoj9Kp4L/qqdTCeszWVtkNQpljXhiEq
4OR9nreH+icns+GrvWAqhMUyVTJrOr1nPDgFT5FytGjmudN/tSpp7PE4OZbvpIg/
ZxMfmKM7Qs/+xPLry7SB7NJzJSJVOR6fDQIDAQAB
-----END RSA PUBLIC KEY-----


  # tincd -K
Und noch eine Datei mit Adresse und Schlüssel des anderen Routers.


Tincd starten. (per Init, Systemd,...)
# > /etc/tinc/rheinland/hosts/rheinland1
Address=78.47.35.141
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAxaewx1cZPPjeRLomoO2z0GN/Lioc0bwEoM9cB++lzqfhfEbNLDbU
hMkn2Q/2uR51h2ZJ5tgUcU1wCa2lrPXVO8e8oZo7RTJi+rYJyDtosC2W693GtLxK
GYDQOyPmrcc55X4j0UeyFNP2dKH8qmRH2cs2VM1sJslKOGheJVSXxo2xBQy2EiQw
AMITubAW6NaG/tB5hwehyvcp11B/EXuWl1UByEi3R8TCQPPyyuyhmVswnSUZzbsU
UMkazbrbaK322DmuHT8txn4DK6/DLSz0MzPwe0AGB8ReQA5wKS2JgnRmZ0HKLJ9K
awnBNLV2ate25FZuvjHkD6yyjQcCsoryMwIDAQAB
-----END RSA PUBLIC KEY-----
 
Ein Skript zum Setzen der Adressen beim Start des VPN anlegen.. Bitte $SUFFIX durch das Suffix der Super-Node ersetzen (z.B. ''13'' für Rheinufer).
 
# > /etc/tinc/rheinland/tinc-up
#/bin/sh
ip link set up dev $INTERFACE
ip -4 addr add 10.78.0.$SUFFIX/22 dev $INTERFACE
ip -6 addr add 2001:470:72da:$SUFFIX::1/64 dev $INTERFACE
ip -6 addr add 2001:470:7861:$SUFFIX::1/64 dev $INTERFACE
 
Das Skript ausführbar machen
 
# chmod +x /etc/tinc/rheinland/tinc-up
 
Ein Paar aus öffentlichem und privaten Schlüssel erzeugen. Wir nehmen die Standardlänge von 2048 bit und den vorgeschlagenen Pfad zu den Dateien (/etc/tinc/rsa_key.priv und /etc/tinc/rsa_key.pub).
 
# tincd -K
 
Den public keys des Hosts linken (hier wieder $HOSTNAME durch den Hostnamen ersetzen).
 
# ln -s /etc/tinc/rsa_key.pub /etc/tinc/rheinland/hosts/$HOSTNAME
 
Der öffentliche Schlüssel soll auf der Wiki-Seite der Super-Node dokumentiert und den Admins der Router mitgeteilt werden. Wenn die Admins den Schlüssel eingetragen haben, tincd aktivieren und starten.
 
# systemctl enable tincd@rheinland
# systemctl start tincd@rheinland


== Adressierung der Supernodes im Backbone ==
== Adressierung der Supernodes im Backbone ==
Zeile 78: Zeile 99:
Adressen sind [[Netzwerk/Backbone Adressierung | hier]] zu verwalten.
Adressen sind [[Netzwerk/Backbone Adressierung | hier]] zu verwalten.


== Konfiguration von dynamischem Routing ==
== Routing ==


Innerhalb des Backbones des Freifunk Rheinland wird das Routingprotokoll [http://en.wikipedia.org/wiki/Open_Shortest_Path_First OSPF] verwendet.
Innerhalb des Backbones wird das Routing-Protokoll [http://en.wikipedia.org/wiki/Open_Shortest_Path_First OSPF] verwendet. So werden die Subnetze automatisch verteilt.
Als Routing Software kommt derzeit Quagga zum Einsatz. Quagga ist in den Paketsammlungen der üblichen Linux Distributionen bereits enthalten.
Die Konfigurationen für IPv4 und IPv6 finden getrennt statt.


=== Konfiguration Zebra ===
Als Routing-Dienst kommt derzeit Quagga zum Einsatz. Die Konfigurationen für IPv4 und IPv6 finden getrennt statt. Quagga ist in den Paketsammlungen der üblichen Linux Distributionen bereits enthalten.
Zebra ist ein Dienst aus dem Quagga Paket welches von den verschiedenen Routing Daemonen Routen annimmt und im Kernel installiert.
Eine einfache Konfiguration kann wie folgt aussehen:


  !
  # pacman -S quagga
! Zebra configuration saved from vty
 
  !  2014/01/27 23:38:55
=== zebra ===
!
 
  hostname <hostname>-zebra
zebra synchronisiert die Routing-Tabellen des Kernels. Dazu benötigen wir nur eine minimale Konfiguration. Hier $HOSTNAME durch den Hostname ersetzen:
 
  # > /etc/quagga/zebra.conf
  hostname $HOSTNAME-zebra
  password zebra
  password zebra
!
  ip forwarding
  ip forwarding
  ipv6 forwarding
  ipv6 forwarding
!
!
  line vty
  line vty
!


Es wird lediglich ein Hostname sowie ein Passwort für die Zebra Shell gesetzt und IP Forwarding aktiviert.
Es wird lediglich ein Hostname sowie ein Passwort für die Zebra Shell gesetzt und IP Forwarding aktiviert. Mittels <tt>telnet 127.0.0.1 2601</tt> kann zebra auch interaktiv konfiguriert werden. Die Konfiguration ähnelt der von Routern mit Cisco IOS.
Mittels telnet 127.0.0.1 2601 kann Zebra auch interaktiv konfiguriert werden. Die Konfiguration ähnelt der von Routern mit Cisco IOS.
 
Den Dienst aktivieren und starten
 
  # systemctl enable zebra
  # systemctl start zebra
 
=== ospf6d ===


=== Konfiguration OSPF für IPv6 ===
ospf6d teilt zebra die Routing-Tabellen für IPv6 mit. Folgende Konfiguration verwendet für die Routing-Map das Interface br0, auf dem das Freifunk-Netzwerk liegt. Bei $HOSTNAME kommt wieder der hostname hinein:
OSPF für IPv6 wird in Quagga durch den Dienst ospf6d bereitgestellt. Dieser teilt Zebra die Routinginformationen mit welche in die Kernel Routingtabelle installiert werden sollen.
Eine einfache Konfiguratuion wie folgt aussehen:


  !
  # > /etc/quagga/ospf6d.conf
! Zebra configuration saved from vty
  hostname $HOSTNAME-ospf6d
!  2014/01/05 12:17:57
!
  hostname <hostname>-ospf6d
  password ospf6d
  password ospf6d
!
  interface bb0
  interface bb0
   ipv6 ospf6 hello-interval 1
   ipv6 ospf6 hello-interval 1
   ipv6 ospf6 dead-interval 4
   ipv6 ospf6 dead-interval 4
!
  router ospf6
  router ospf6
   redistribute connected route-map bat0
   redistribute connected
   interface bb0 area 0.0.0.0
   interface bb0 area 0.0.0.0
!
   interface br0 area 1.0.0.0
route-map bat0 permit 10
   match interface bat0
!
  line vty
  line vty
  !
  log syslog
 
Den Dienst aktivieren und starten


=== Konfiguration OSPF für legacy IP (IPv4) ===
  # systemctl enable ospf6d
OSPF für IPv4 wird in Quagga durch den Dienst ospfd bereitgestellt. Dieser teilt Zebra die Routinginformationen mit welche in die Kernel Routingtabelle installiert werden sollen.
  # systemctl start ospf6d
Eine einfache Konfiguratuion wie folgt aussehen:


!
=== ospfd ===
! Zebra configuration saved from vty
 
  !  2013/12/19 21:59:29
IPv4-Routing wird per ospfd (analog zum ospf6d) konfiguriert. Hier $NETWORK durch das IP-Netz der Domäne (und wieder $HOSTNAME durch den Hostnamen) ersetzen.
!
 
  hostname <hostname>-ospf
  # > /etc/quagga/ospfd.conf
  hostname $HOSTNAME-ospf
  password ospfd
  password ospfd
!
!
  interface bb0
  interface bb0
   ip ospf hello-interval 1
   ip ospf hello-interval 1
   ip ospf dead-interval 4
   ip ospf dead-interval 4
!
  router ospf
  router ospf
   auto-cost reference-bandwidth 100000
   auto-cost reference-bandwidth 100000
Zeile 151: Zeile 162:
   no passive-interface bb0
   no passive-interface bb0
   network 10.78.0.0/22 area 0.0.0.0
   network 10.78.0.0/22 area 0.0.0.0
   network <IP-Range of Domain> area 0.0.0.0
   network $NETWORK area 0.0.0.0
!
  line vty
  line vty


Die Konfiguration aktiviert OSPF auf der Schnittstelle zum Backbone und auf der Schnittstelle zur Domäne. Durch passive-interface default wird in Richtung batman jedoch kein OSPF gesprochen, das Netz aber in Richtung Backbone angekündigt.
Den Dienst aktivieren und starten
 
  # systemctl enable ospfd
  # systemctl start ospfd
 
So werden beide Tunnel-Interfaces zu unseren Netzwerken für OSPF verwendet. Ankündigungen für Routen werden jedoch nur ins Backbone-Netz geschickt, nicht über ein anderes Interface.

Aktuelle Version vom 5. Oktober 2014, 16:26 Uhr

Dieser Artikel erläutert, wie eine Super-Node an den Backbone des Freifunk Rheinland angeschlossen werden kann.

Netzwerkdiagram

Im Forum, Stand 4.10.2014

tinc

Die Super-Nodes und die Router bilden ein vermaschtes VPN (Layer 2) per tinc.

Zuerst das Paket tinc installieren.

# pacman -S tinc

Das Verzeichnis für die Backbone-Konfiguration und die Schlüssel anlegen. Der Name dieser Instanz lautet: rheinland.

# mkdir -p /etc/tinc/rheinland/hosts

Die tinc-Konfiguration für tinc ablegen. Hier das externe Interface des Servers unter $INTERFACE und den Hostnamen unter $HOSTNAME eintragen.

# > /etc/tinc/rheinland/tinc.conf
AddressFamily ipv4
BindToInterface $INTERFACE
Broadcast direct
DeviceType tap
DirectOnly yes
Forwarding off
HostNames no
Interface bb0
Mode switch
Name $HOSTNAME
PingInterval 15
PingTimeout 5
PrivateKeyFile /etc/tinc/rsa_key.priv
ConnectTo = rheinland0
ConnectTo = rheinland1
Debug 3

Dann eine Datei mit Adresse und Schlüssel des einen Routers anlegen.

# > /etc/tinc/rheinland/hosts/rheinland0
Address=78.47.35.139
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA2xz9NGY9XUkrsciIZ5AucrtGnlXcD257/jYDyyCVLDNuS16cA3vF
bsH5Br3zjYRsN+AZjvgUbfCyrM4qxWBoSTmcFOH5uQLt0RD+p8dpq/p/9B0vRMI2
eGLK6C+2EylLEui9lrwpXF27530uIlXxORsjEgGjgJMegkTQoU/yFpt8kXr0N+Zg
sCdLyVByzS6FqmZOuFJiNTC/IggkRHqqKLoj9Kp4L/qqdTCeszWVtkNQpljXhiEq
4OR9nreH+icns+GrvWAqhMUyVTJrOr1nPDgFT5FytGjmudN/tSpp7PE4OZbvpIg/
ZxMfmKM7Qs/+xPLry7SB7NJzJSJVOR6fDQIDAQAB
-----END RSA PUBLIC KEY-----

Und noch eine Datei mit Adresse und Schlüssel des anderen Routers.

# > /etc/tinc/rheinland/hosts/rheinland1
Address=78.47.35.141
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAxaewx1cZPPjeRLomoO2z0GN/Lioc0bwEoM9cB++lzqfhfEbNLDbU
hMkn2Q/2uR51h2ZJ5tgUcU1wCa2lrPXVO8e8oZo7RTJi+rYJyDtosC2W693GtLxK
GYDQOyPmrcc55X4j0UeyFNP2dKH8qmRH2cs2VM1sJslKOGheJVSXxo2xBQy2EiQw
AMITubAW6NaG/tB5hwehyvcp11B/EXuWl1UByEi3R8TCQPPyyuyhmVswnSUZzbsU
UMkazbrbaK322DmuHT8txn4DK6/DLSz0MzPwe0AGB8ReQA5wKS2JgnRmZ0HKLJ9K
awnBNLV2ate25FZuvjHkD6yyjQcCsoryMwIDAQAB
-----END RSA PUBLIC KEY-----

Ein Skript zum Setzen der Adressen beim Start des VPN anlegen.. Bitte $SUFFIX durch das Suffix der Super-Node ersetzen (z.B. 13 für Rheinufer).

# > /etc/tinc/rheinland/tinc-up
#/bin/sh

ip link set up dev $INTERFACE
ip -4 addr add 10.78.0.$SUFFIX/22 dev $INTERFACE
ip -6 addr add 2001:470:72da:$SUFFIX::1/64 dev $INTERFACE 
ip -6 addr add 2001:470:7861:$SUFFIX::1/64 dev $INTERFACE

Das Skript ausführbar machen

# chmod +x /etc/tinc/rheinland/tinc-up

Ein Paar aus öffentlichem und privaten Schlüssel erzeugen. Wir nehmen die Standardlänge von 2048 bit und den vorgeschlagenen Pfad zu den Dateien (/etc/tinc/rsa_key.priv und /etc/tinc/rsa_key.pub).

# tincd -K

Den public keys des Hosts linken (hier wieder $HOSTNAME durch den Hostnamen ersetzen).

# ln -s /etc/tinc/rsa_key.pub /etc/tinc/rheinland/hosts/$HOSTNAME

Der öffentliche Schlüssel soll auf der Wiki-Seite der Super-Node dokumentiert und den Admins der Router mitgeteilt werden. Wenn die Admins den Schlüssel eingetragen haben, tincd aktivieren und starten.

# systemctl enable tincd@rheinland
# systemctl start tincd@rheinland

Adressierung der Supernodes im Backbone

IPv6

SLAAC ist zu verwenden.

Legacy IP (IPv4)

Der Adressbereich 10.78.0.0/22 ist für den Backbone reserviert. Adressen sind hier zu verwalten.

Routing

Innerhalb des Backbones wird das Routing-Protokoll OSPF verwendet. So werden die Subnetze automatisch verteilt.

Als Routing-Dienst kommt derzeit Quagga zum Einsatz. Die Konfigurationen für IPv4 und IPv6 finden getrennt statt. Quagga ist in den Paketsammlungen der üblichen Linux Distributionen bereits enthalten.

# pacman -S quagga

zebra

zebra synchronisiert die Routing-Tabellen des Kernels. Dazu benötigen wir nur eine minimale Konfiguration. Hier $HOSTNAME durch den Hostname ersetzen:

# > /etc/quagga/zebra.conf
hostname $HOSTNAME-zebra
password zebra
ip forwarding
ipv6 forwarding
line vty

Es wird lediglich ein Hostname sowie ein Passwort für die Zebra Shell gesetzt und IP Forwarding aktiviert. Mittels telnet 127.0.0.1 2601 kann zebra auch interaktiv konfiguriert werden. Die Konfiguration ähnelt der von Routern mit Cisco IOS.

Den Dienst aktivieren und starten

 # systemctl enable zebra
 # systemctl start zebra

ospf6d

ospf6d teilt zebra die Routing-Tabellen für IPv6 mit. Folgende Konfiguration verwendet für die Routing-Map das Interface br0, auf dem das Freifunk-Netzwerk liegt. Bei $HOSTNAME kommt wieder der hostname hinein:

# > /etc/quagga/ospf6d.conf
hostname $HOSTNAME-ospf6d
password ospf6d
interface bb0
 ipv6 ospf6 hello-interval 1
 ipv6 ospf6 dead-interval 4
router ospf6
 redistribute connected
 interface bb0 area 0.0.0.0
 interface br0 area 1.0.0.0
line vty
log syslog

Den Dienst aktivieren und starten

 # systemctl enable ospf6d
 # systemctl start ospf6d

ospfd

IPv4-Routing wird per ospfd (analog zum ospf6d) konfiguriert. Hier $NETWORK durch das IP-Netz der Domäne (und wieder $HOSTNAME durch den Hostnamen) ersetzen.

# > /etc/quagga/ospfd.conf 
hostname $HOSTNAME-ospf
password ospfd
interface bb0
 ip ospf hello-interval 1
 ip ospf dead-interval 4
router ospf
 auto-cost reference-bandwidth 100000
 passive-interface default
 no passive-interface bb0
 network 10.78.0.0/22 area 0.0.0.0
 network $NETWORK area 0.0.0.0
line vty

Den Dienst aktivieren und starten

 # systemctl enable ospfd
 # systemctl start ospfd

So werden beide Tunnel-Interfaces zu unseren Netzwerken für OSPF verwendet. Ankündigungen für Routen werden jedoch nur ins Backbone-Netz geschickt, nicht über ein anderes Interface.