Dynamisches Routing mit OLSR einrichten

Mit einem dynamischem Routing-Protokoll können wir mehrere Anbindungen dazu bringen, dass bei Ausfall einer Leitung die nächste verwendet wird. Wir nutzen das dynamische Routing-Protokoll in unserem Beispiel aber nur dazu, um uns dynamisch einen festen IP-Adressen-Bereich zu routen. Um den Server hinterher stabil in einem Netzwerk einzusetzen, wo mehrere Leitungen ausfallen dürfen, bedarf es noch viel Handarbeit, welche in diesem Tutorial jedoch nicht beschrieben wird.

Für das dynamische Routing verwenden wir in diesem Beispiel das Projekt OLSR. Man könnte auch BGP4, MPLS, OSPF, RIP oder jedes sonstige Routing-Protokoll verwenden, um ein dynamisches Routing realisieren zu können.

Herunterladen und installieren von OLSR

OLSR ist ein Routingprotokoll für mobile Ad-hoc-Netze, das eine an die Anforderungen eines mobilen drahtlosen LANs angepasste Version des Link State Routing darstellt. Es wurde von der IETF mit dem RFC 3626 standardisiert. Bei diesem verteilten flexiblen Routingverfahren ist allen Routern die vollständige Netztopologie bekannt, sodass sie von Fall zu Fall den kürzesten Weg zum Ziel festlegen können. Als proaktives Routingprotokoll hält es die dafür benötigten Informationen jederzeit bereit.

Quelle: Wikipedia.de: Open Link State Routing

Projekt-Seite: http://www.olsr.org/
Source-Code: http://www.olsr.org/releases/0.5/olsrd-0.5.5.tar.bz2 (Version 0.5.5)

Nun downloaden wir den Quellcode und übersetzen ihn zu Binary-Code:

wget http://www.olsr.org/releases/0.5/olsrd-0.5.5.tar.bz2
tar xjf olsrd-0.5.5.tar.bz2
cd olsrd-a5b9cf969979
make
make install

Der Befehl make install installiert alle ausführbaren Dateien nach /usr/sbin/ . Wenn Sie das nicht wünschen, so müssen Sie die Datei Makefile.inc überarbeiten. In Zeile 43-44 ist die Rede von DESTDIR und SBINDIR - die beiden Eigenschaften sind nach belieben zu verändern.

Konfiguration des ROOT-SERVERS und HOME-ROUTERS

Auf beiden Endpunkten installieren wir fast die gleiche Konfigurations-Datei. Beide Endpunkte sollten immer die selbe Version von OLSR, sowie die selbe Konfiguration verwenden. Die einzigste Ausnahme bildet der Bereich HNA4 und HNA6, welcher die Bekanntmachung (announcing) der fixen IP-Adressen und IP-Adressen-Bereiche vornimmt. Zudem müssen eventuell bei den beiden Konfigurations-Dateien jeweils die Bezeichnungen der Schnittstellen geändert werden.

Bearbeiten der Konfigurations-Datei /etc/olsrd.conf auf dem ROOT-SERVER:

# If set to 0 the daemon runs in the background
DebugLevel             0

# IP version to use (4 or 6)
IpVersion              4

# FIBMetric ("flat", "correct", or "approx")
FIBMetric              "flat"

# Clear the screen each time the internal state changes
ClearScreen            yes

# Should olsrd keep on running even if there are
# no interfaces available? This is a good idea
# for a PCMCIA/USB hotswap environment.
# "yes" OR "no"
AllowNoInt             no

# Announce fixed ip-ranges
Hna4
{
    # Push "Default-Gateway" route-information
    0.0.0.0     0.0.0.0
}

# Allow processes like the GUI front-end to connect to the daemon.
IpcConnect
{
    # Disable IPC
    MaxConnections    0
}

# Wether to use hysteresis or not
# Hysteresis adds more robustness to the link sensing but delays neighbor registration.
UseHysteresis          no

# Link quality level
# 0 = do not use link quality
# 1 = use link quality for MPR selection
# 2 = use link quality for MPR selection and routing
LinkQualityLevel       0

# Polling rate in seconds(float).
# Default value 0.05 sec
Pollrate               0.05

# Interval to poll network interfaces for configuration
# changes.
NicChgsPollInt         3.0

# Specifies how much neighbor info should be sent in TC messages
# Possible values are:
#   0 - only send MPR selectors
#   1 - send MPR selectors and MPRs
#   2 - send all neighbors
TcRedundancy           2

# Specifies how many MPRs a node should try select to reach every 2 hop neighbor
# Can be set to any integer > 0
MprCoverage            3

# !!CHANGE THE INTERFACE LABEL(s) TO MATCH YOUR INTERFACE(s)!!
# (eg. wlan0 or eth1):
Interface "bond0"
{
    AutoDetectChanges   yes
    Ip4Broadcast        192.168.10.3

    HelloInterval       2.0
    HelloValidityTime   6.0

    TcInterval          5.0
    TcValidityTime      15.0

    MidInterval         5.0
    MidValidityTime     15.0

    HnaInterval         5.0
    HnaValidityTime     15.0
}

 

Bearbeiten der Konfigurations-Datei /etc/olsrd.conf auf dem HOME-ROUTER:

# If set to 0 the daemon runs in the background
DebugLevel             0

# IP version to use (4 or 6)
IpVersion              4

# FIBMetric ("flat", "correct", or "approx")
FIBMetric              "flat"

# Clear the screen each time the internal state changes
ClearScreen            yes

# Should olsrd keep on running even if there are
# no interfaces available? This is a good idea
# for a PCMCIA/USB hotswap environment.
# "yes" OR "no"
AllowNoInt             no

# Update default-routes in routing-table default
RtTableDefault         253

# Announce fixed ip-ranges
Hna4
{
    # Push "fixed ip-ranges" route-information available through this router
    192.168.20.0     255.255.255.128
    192.168.20.128   255.255.255.128
}

# Allow processes like the GUI front-end to connect to the daemon.
IpcConnect
{
    # Disable IPC
    MaxConnections    0
}

# Wether to use hysteresis or not
# Hysteresis adds more robustness to the link sensing but delays neighbor registration.
UseHysteresis          no

# Link quality level
# 0 = do not use link quality
# 1 = use link quality for MPR selection
# 2 = use link quality for MPR selection and routing
LinkQualityLevel       0

# Polling rate in seconds(float).
# Default value 0.05 sec
Pollrate               0.05

# Interval to poll network interfaces for configuration
# changes.
NicChgsPollInt         3.0

# Specifies how much neighbor info should be sent in TC messages
# Possible values are:
#   0 - only send MPR selectors
#   1 - send MPR selectors and MPRs
#   2 - send all neighbors
TcRedundancy           2

# Specifies how many MPRs a node should try select to reach every 2 hop neighbor
# Can be set to any integer > 0
MprCoverage            3

# !!CHANGE THE INTERFACE LABEL(s) TO MATCH YOUR INTERFACE(s)!!
# (eg. wlan0 or eth1):
Interface "bond0"
{
    AutoDetectChanges   yes
    Ip4Broadcast        192.168.10.3

    HelloInterval       2.0
    HelloValidityTime   6.0

    TcInterval          5.0
    TcValidityTime      15.0

    MidInterval         5.0
    MidValidityTime     15.0

    HnaInterval         5.0
    HnaValidityTime     15.0
}

 

Starten der beiden OLSR-Daemons

Stellen Sie sicher, dass beide vTUNs (Server / Client) miteinander verbunden sind und sich gegenseitig erreichen können. Danach starten wir erst auf beiden Rechnern das dynamische Routing-Protokoll.

/usr/sbin/olsrd -f /etc/olsrd.conf

Nach dem erfolgreichem Start des OLSR-Daemons sollte der Befehl /sbin/ip route show table default auf unserem HOME-ROUTER die Default-Route zu unserem VPN-Gegenstück (default via 192.168.10.1 dev bond0) anzeigen. Sollte dies nicht der Fall sein, so warten Sie noch ein paar Sekunden, nachdem Sie beide OLSR-Daemons gesartet haben. Sollte nach einigen Sekunden immer noch kein Eintrag zu sehen sein, so muss bei der Konfiguration etwas schief gelaufen sein. Überprüfen Sie, ob die Verbindung zwischen den beiden VPN-Tunnel verfügbar ist und ob sich die beiden Enden gegenseitig mittels PING erreichen können.

OLSR verwendet den UDP-Port 698 um seine Routeninformationen unter den Prozessen austauschen zu können. Prüfen Sie Ihre Firewall, ob diese den Kommunikations-Port von OLSR blockiert.

Prüfen Sie anschließend auf dem ROOT-SERVER mit dem Befehl /sbin/ip route show table main, ob die beiden Routen, welche wir durch OLSR bekannt machen (announcing) in dieser Routing-Tabelle auftauchen. Es müssten folgende Zeilen zu erkennen sein:

192.168.20.0/25 via 192.168.10.2 dev bond0
192.168.20.128/25 via 192.168.10.2 dev bond0

 

Seite 1: Bündelung mehrerer Internet-Zugänge zur Steigerung der Geschwindigkeit
Seite 2: Kernel-Module aktivieren, Userspace-Programme einrichten und Grundkonfiguration vornehmen
Seite 3: Routing vorbereiten, Schnittstellen konfigurieren und Routing einrichten
Seite 4: vTUN installieren und einrichten
Seite 5: Dynamisches Routing mit OLSR einrichten
Seite 6: Abschluss