Inhaltsverzeichnis

RIP-Laborübung mit VMs

IN ARBEIT

Hinweis-Seite:

Offizielle Dokumentation zu quagga: http://www.nongnu.org/quagga/docs.html

HowTo: http://opentodo.net/2012/08/configuring-routing-protocols-with-quagga/

Allgemeine Informationen zu quagga

Unter Linux kann das Software-Paket quagga verwendet werden, um die einzelnen Routing Protokolle zu steuern. Folgende Module stehen unter quagga zur Verfügung:

Protokoll Modulname in quagga
Konfiguration-Frontend für quagga zebra1)
RIPv1/RIPv2 für IPv4 ripd2)
RIPv1/RIPv2 für IPv6 ripngd3)
OSPFv2/OSPFv3 für IPv4 ospfd4)
OSPFv2/OSPFv3 für IPv6 ospf6d5)
BGP für IPv4/IPv6 bgpd6)
IS-IS für IPv4/IPv6 isisd7)

Daneben gibt es noch die Module babeld, osrd, ldpd und bfdd auf die hier nicht weiter eingegangen wird.

Die gesamte Architektur sieht wie folgt aus:

BILD mit quagga-Modulen

Der zebra-Daemon8) stellt als Routing-Manager die übergeordnete Schnittstelle zu den Untermodulen dar. Das zebra-Modul stößt u.a. die Aktualisierung der Kernel-Routing-Table Einträge an, beobachten die Schnittstellen und tauschen Routing-Informationen zwischen den Routing Modulen aus.

Routing aktivieren (FORWARDING)

Um einen PC zum Router zu machen, muss dieser in den FORWARDING-Modus versetzt werden. Das heißt der PC kann Datenpakete über Schnittstellen hinweg weiterleiten. Normalerweise behandelt ein PC jede Schnittstelle getrennt und würde die Datenpakete nicht weiterleiten.

Unter Linux geschieht dies über den folgenden Befehl:

sudo sysctl net.ipv4.ip_forward=1

Über den folgenden Befehl kann der aktuelle Status des FORWARDING überprüft werden:

cat /proc/sys/net/ipv4/ip_forward
1: FORWARDING aktiviert
0: FORWARDING deaktiviert

Einrichten der virtuellen Maschine

Es muss als Router eine VM genutzt werden, die mindestens zwei Schnittstellen besitzt.

Quagga einrichten

Der quagga-Daemon speichert seine Konfiguration unter /etc/quagga/. Dort liegen nach der Installation zu nächst nur zwei Dateien:

Dateiname Bedeutung
/etc/quagga/daemons Hier werden die einzelnen Module mit yes/no aktiviert/deaktiviert
/etc/quagga/debian.conf Hier werden die Ports und IP-Adressen der einzelne Konfigurationsschnittstellen gesetzt.

Damit überhaupt ein Routing Protokoll gestartet wird, muss das entsprechende Modul in der /etc/quagga/daemons auf yes gesetzt werden.

zebra=yes
...
ripd=yes 
...

Damit die einzelnen Module wissen, was zu tun ist, benötigen auch diese eine Konfigurationsdatei. Am besten nutzt mal als Ausgangspunkt die mitgelieferten Beispielkonfigurationen. Diese liegen im folgenden Ordner:

/usr/share/doc/quagga/examples/

Mit dem folgenden Befehl, werden die beiden Beispielkonfigurationen für zebra und ripd in den /etc/quagga/-Ordner kopiert.

sudo cp /usr/share/doc/quagga/examples/zebra.conf.sample /etc/quagga/zebra.conf
sudo cp /usr/share/doc/quagga/examples/ripd.conf.sample /etc/quagga/ripd.conf

HINWEIS: Wichtig ist, dass die Dateien im /etc/quagga/-Ordner korrekt geschrieben werden, da sie ansonsten nicht gefunden werden.

Nun kann der quagga-Daemon gestartet werden, so dass dieser die gewünschten Module startet.

sudo /etc/init.d/quagga [start/restart/stop]

HINWEIS: In den eckigen Klammern werden alle möglichen Commands an den quagga aufgeführt. Es kann jeweils nur EINER verwendet werden.

Die folgende Ausgabe zeigt, dass die Konfiguration von zebra offensichtlich fehlt (not started without config file), aber die Konfiguration von ripd (ripd sonst nichts) vorhanden ist.

Loading capability module if not yet done.
Starting Quagga daemons (prio:10): zebra (not started without config file) ripd.
Starting Quagga monitor daemon: watchquagga.

Um zu überprüfen, ob der Daemon korrekt läuft kann man sich den entsprechenden Prozess anzeigen lassen:

ps aux | grep quagga 

HINWEIS: ps aux listet alle Prozesse inklusiver der Auslastung auf. Mit | wird diese Ausgabe an den grep-Befehl weitergeleitet, der wiederum in der Ausgabe den String quagga sucht.

Die Ausgabe könnte so aussehen:

ps aux | grep quagga

quagga    5496  0.0  0.0  24288   980 ?        Ss   17:30   0:00 /usr/lib/quagga/ripd --daemon -A 127.0.0.1
root      5501  0.0  0.0  15364   508 ?        Ss   17:30   0:00 /usr/lib/quagga/watchquagga --daemon zebra ripd
root      5503  0.0  0.0  16660   904 pts/6    S+   17:35   0:00 grep --color=auto quagga

Konfiguration des zebra-Moduls

Man muss sich die einzelnen Module wie einen „Standalone“-Router vorstellen, der per Remote-Zugriff konfiguriert wird. Da man direkten Zugriff auf die Maschine selbst hat, ist die remote-Adresse der eigene Rechner also localhost:

telnet localhost 2601

AUSGABE:

Hello, this is Quagga (version 0.99.22.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.


User Access Verification

Password: 

Als Passwort verwendet man zebra bzw. das Passwort, das man in der zebra-Konfigurationsdatei (/etc/quagga/zebra.conf9) ) gesetzt hat.

Die folgende Tabelle zeigt die wichtigsten Befehle des zebra-Moduls. Mit ? bzw. list kann jederzeit die Hilfe angezeigt werden (vgl. STP-Übung).

Befehl Funktion Beispiel
show Zeigt die aktuelle Konfiguration an z.B. die Routing-Tabelle show ip route
enable/disable Aktiviert/deaktiviert den Router enable oder disable
configure terminal Wechseln in den Konfigurationsmodus. Neues Prompt:Router(config) configure terminal
interface Auswählen der Schnittstelle, die konfiguriert werden soll. Im Prompt:Router(config) interface eth0
ip/no ip Setzen/Löschen einer IP-Adresse für das ausgewählte Interface. Im Prompt: Router(config-if): ip address 10.0.0.1/8
shutdown/no shutdown Schnittstelle aktivieren/deaktivieren. Im Prompt: Router(config-if): no shutdown
hostname Setzen des Router-Namens. hostname <NEUERNAME>
write Dauerhaftes Speichern der aktuellen (running-config). Ansonsten wird nach dem nächsten Restart alles zurückgesetzt. write

Beispiel Befehlsfolge im CLI10):

telnet localhost 2601
Password: zerbra

Router>enable
Password: zebra
Router#configure terminal
Router(config)#interface eth0
Router(config-if)#ip address 10.0.0.1/8
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#hostname tralala
tralala(config-if)#show running-config

Current configuration:
!
hostname tralala
password zebra
enable password zebra
!
interface eth0
 ip address 10.0.0.1/8
 ipv6 nd suppress-ra
!
interface eth1
 ipv6 nd suppress-ra
!
interface lo
!
!
!
line vty
!
end

Alternativ zur direkten Eingabe der Kommandos, kann auch eine Textdatei als Konfigurationsdatei herangezogen werden. Der Befehlt show running-config gibt die aktuelle Konfiguration aus, die für die Textdatei genutzt werden kann. Für das obige Beispiel würde demnach folgender Inhalt darin stehen:

zerbra.conf_sample
!
hostname tralala
password zebra
enable password zebra
!
interface eth0
 ip address 10.0.0.1/8
 ipv6 nd suppress-ra
!
interface eth1
 ipv6 nd suppress-ra
!
interface lo
!
!
!
line vty
!
end

Damit diese Datei verwendet wird, muss dem quagga-Daemon dies mitgeteilt werden. Über den Kommandozeilenparameter -f kann dies geschehen. Konfiguriert wird dies in der Datei /etc/quagga/debian.conf

Konfiguration des ripd-Moduls

Das RIP-Modul ripd wird ähnlich konfiguriert. Hier legt man fest, auf welchen Schnittstellen das RIP-Protokoll ausgeführt werden soll. Bei der Telnet-Verbindung muss allerdings der Port 2602 verwendet werden.

Hier ein Auszug der wichtigsten Befehle:

Befehl Funktion Beispiel
show Zeigt die aktuelle Konfiguration an z.B. die Routing-Tabelle show running-config
enable/disable Aktiviert/deaktiviert den Router enable oder disable
configure terminal Wechseln in den Konfigurationsmodus. Neues Prompt:Router(config) configure terminal
hostname Setzen des Router-Namens. hostname <NEUERNAME>
router Auswahl des Routers. Im Prompt:Router(config) router rip oder router zebra
version Version des RIP-Protokolls. Im Prompt:Router(config) version 2
network <SUBNETZ> Subnetz für das RIP aktiviert werden soll. Im Prompt:Router(config) network 10.0.0.0/8
network <SCHNITTSTELLE> Schnittstelle für die RIP aktiviert werden soll. Im Prompt:Router(config) network eth0
passive-interface/no passive-interface

no sendet das Interface aktiv. | no passive-interface eth0 | | ip split-horizon/no ip split-horizon | Das Split-Horizon wird aktiviert(DEFAULT)/deaktiviert. | no passive-interface eth0 | Beispiel Befehlsfolge im CLI11): <code> telnet localhost 2602 <code>telnet localhost 2602</code>

1)
Kernel-Interface, Statische Routen
2)
ripd: Routing Information Protocol Daemon
3)
ripngd: Routing Information Protocol Next Generation Daemon
4)
osfpd: Open Shortest Path First Daemon
5)
osfp6d: Open Shortest Path First IPv6 Daemon
6)
bgpd: Border Gateway Protocol Daemon
7)
isisd: Intermediate System to Intermediate System Daemon
8)
Daemon: Ein Daemon stellt unter Linux einen Dienst bereit. Z.B. Der Druckerwarteschlagen-Daemon cups
9)
hier kann auch der Name des Routers gesetzt werden
10) , 11)
CLI: command line interface; Kommandozeile des zebra/ripd-Daemons