24.9 Netzwerktechnik 

Auch bei der Konfiguration von Netzwerken hält sich Xen an die eigene Devise, so »schlank wie möglich« zu sein. Dies hat zur Folge, dass sich Xen lediglich um die intern verbundenen virtuellen Netzwerkschnittstellen kümmert. Für die Anbindung an die physikalischen Netzwerkschnittstellen sind die gängigen Linux-Tools zuständig.
Alle für das Netzwerk relevanten Einstellungen werden durch Konfigurationsdateien geregelt, die durch Skripte im Verzeichnis /etc/xen/scripts gesteuert werden. Es handelt sich hierbei um einfache Bash-Skripte, so dass jedes geläufige Linux-Tool mit diesen Dateien umgehen können sollte.
24.9.1 Grundlagen 

Die Integration von Xen in Ihre Netzwerkarchitektur ist ein komplizierter Prozess und erfordert abhängig von Ihrer Infrastruktur möglicherweise eine angepasste Konfiguration, um mehrere Ethernet-Schnittstellen einzusetzen und ein Bridging (eine Überbrückung) einzurichten.
Jede Domain-Netzwerkschnittstelle ist mit einer virtuellen Netzwerkschnittstelle via Punkt-zu-Punkt-Verbindung unter dom0 verbunden. Diese Geräte sind vif<domid> und <vifid>. Dabei steht vif1.0 für die erste Schnittstelle in Domain 1 und vif3.1 für die zweite Schnittstelle in Domain 3.
Domain0 handhabt den Datenverkehr auf diesen virtuellen Schnittstellen unter Verwendung von standardmäßigen Linux-Konventionen für das Bridging, das Routing, die Limitierung der Übertragungsrate etc.
Der xend-Daemon verwendet zwei Shell-Skripte, um eine erste Konfiguration Ihres Netzwerks und der neuen virtuellen Schnittstellen durchzuführen. Diese Skripte konfigurieren eine einzelne Brücke (Single Bridge) für alle virtuellen Schnittstellen.
Durch Anpassung dieser Skripte können Sie zusätzliches Routing und Bridging konfigurieren. Die virtuelle Vernetzung wird von den beiden Shell-Skripten network-bridge und vif-bridge kontrolliert. xend ruft diese Skripte bei bestimmten Ereignissen auf. Argumente können an die Skripte weitergegeben werden, um zusätzliche, situationsabhängige Informationen zu liefern.
Die Skripte befinden sich im Verzeichnis /etc/xen/scripts. Sie können die Skript-Eigenschaften ändern, indem Sie die Konfigurationsdatei xend-config.sxp im Verzeichnis /etc/xen modifizieren.
- network-bridge
Wenn xend gestartet oder gestoppt wird, initialisiert oder deaktiviert dieses Skript das virtuelle Netzwerk. Anschließend wird durch die Initialisierung der Konfiguration die Bridge xen--br0 erstellt und eth0 auf diese Bridge verschoben, während gleichzeitig das Routing angepasst wird. Wenn sich xend schließlich beendet, entfernt dieses Skript die Bridge und entfernt eth0. Dabei wird die ursprüngliche IP- und Routing-Konfiguration wiederhergestellt.
- vif-bridge
Dieses Skript wird für jede virtuelle Schnittstelle auf der Domain aufgerufen. Es konfiguriert Firewall-Regeln und kann vif zur entsprechenden Bridge hinzufügen. Es gibt weitere Skripte, die Sie zur Unterstützung bei der Einrichtung von Xen in Ihrem Netzwerk verwenden können. Dazu gehören beispielsweise network-route, network-nat, vif-route und vif-nat. Diese Skripte können auch durch angepasste Varianten ersetzt werden.
Wir werden uns die eben vorgestellten Konzepte jetzt etwas genauer ansehen.
Initialisieren
Bei der Betrachtung der virtuellen Netzwerkschnittstellen möchte ich zwischen Domain 0 und U unterscheiden. Dies ist von Vorteil, um sich mit dem Konzept der virtuellen Schnittstellen und dem Umgang mit ihnen vertraut zu machen.
Domain0
Domain0 stellt 16 virtuelle Netzwerkschnittstellen zur Verfügung. Dabei sind jeweils zwei von ihnen miteinander verbunden. Die physikalisch vorhandenen (realen) Netzwerkkarten werden auf diese Schnittstellen abgebildet:
veth0 – vif0.0 veth1 – vif0.1 veth2 – vif0.2 veth3 – vif0.3 veth4 – vif0.4 veth5 – vif0.5 veth6 – vif0.6 veth7 – vif0.7
Domain0 stellt lediglich diese virtuellen Schnittstellen bereit. Eine Vergabe der notwendigen IP-Adressen und bestimmte Konfigurationen (wie beispielsweise Routing oder Bridging) werden erst später vorgenommen. Die dazu erforderlichen Angaben machen Sie in der Datei /etc/init.d/xend.
Xen sieht vor, dass in der Standardeinstellung die realen mit den virtuellen Schnittstellen ein sogenanntes Bridged Network erstellen. Um dies zu ändern, müssen Sie den Parameter network-script in der Datei /etc/xen/xend-config.sxp ändern. Es stellt sich berechtigterweise die Frage, warum der Kunstgriff über die internen Verbindungen nötig ist. Der Grund ist darin zu sehen, dass einige Netzwerkkonfigurationen wie das Bridging auf einem OSI-Layer 2 arbeiten und dementsprechend nicht auf TCP/IP-Anfragen reagieren können.
OSI-Modell
Als OSI-Modell (auch ISO-OSI-Schichtmodell, OSI-Referenzmodell; englisch Open Systems Interconnection Reference Model) wird ein Schichtenmodell der Internationalen Standardisierungsorganisation (ISO) bezeichnet. Es wurde als Designgrundlage von Kommunikationsprotokollen entwickelt. Die Aufgaben der Kommunikation wurden dazu in sieben aufeinander aufbauende Schichten (layers) unterteilt. Die zweite dieser Schichten ist die sogenannte »Sicherungsschicht«. Die Aufgabe dieser Schicht ist es, eine zuverlässige und fehlerfreie Übertragung zu gewährleisten und den Zugriff auf das Übertragungsmedium zu regeln. Sie erfahren mehr über das Routing und Bridging in den Abschnitten »Routed Network« und »Bridged Network«.
Domain U
Xen teilt jeder Domain U eine eindeutige und fortlaufende ID zu (ID 1, ID 2, ID 3 ...). Dies geschieht unabhängig davon, ob einzelne dieser Domains eventuell gar nicht mehr existieren. Diese Eindeutigkeit in der Benennung macht sich Xen auch für die Netzwerkschnittstellen zunutze. Jede gestartete Domain U stellt Netzwerkschnittstellen mit der Bezeichnung ethX bereit, wobei das X einen fortlaufenden alphanumerischen Wert darstellt. Jede dieser Schnittstellen ist mit einer virtuellen Schnittstelle in der Domain0 verbunden, um eine Kommunikation zwischen Gast und Host zu ermöglichen.
Tipp 282: Das Xen-Netzwerk testen
Den Befehl ifconfig zum Testen der erfolgreich konfigurierten Netzwerkschnittstelle habe ich schon vorgestellt. Eine Alternative dazu ist das universelle Kommando ip, mit dem sämtliche oben beschriebenen Parameter konfiguriert und geprüft werden können: ip addr 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue ... 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc ... inet 192.168.0.1/24 brd 192.168.0.255 scope eth0 inet6 fe80::20e:a6ff:fe86:3cf/64 scope link valid_lft forever preferred_lft forever Im vorliegenden Fall wurden das Loopback-Device lo sowie eine Netzwerkkarte unter der Adresse 192.168.0.1 erkannt. Die Netzmaske wurde im Fall der eth0-Schnittstelle in der Kurzform /24 angegeben. Nun können Sie versuchen, einen weiteren Rechner im gleichen Netzwerk mit dem Befehl ping zu kontaktieren: ping -c 5 192.168.0.103 64 bytes from 192.168.0.103: icmp_seq=1 ttl=128 time=0.154 ms ... 5 packets transmitted, 5 received, 0 % packet loss, time 4000 ms Interessant sind hier zum Abschätzen der Netzwerk-Performance die Angabe der Antwortzeit (in diesem Fall 0,154 ms) sowie der Anteil der verlorenen Pakete (in diesem Fall 0 %). Das vorliegende Netzwerk zeigt somit eine gute Performance. |
Allgemein haben die virtuellen Schnittstellen der Domain0 folgenden Aufbau:
vif<ID der Domain U>.<Schnittstellen-Nummer>
Für die erste gestartete Domain finden wir folgende Zuordnung:
vif1.0 – eth0 vif1.1 – eth1 vif1.2 – eth2 ...
Vergessen Sie nicht: Die Schnittstellen vom Typ vif0.x sind der Domain0 und ihrer »inneren« Verknüpfung vorbehalten.
Für die zweite gestartete Domain sieht die Zuordnung folgendermaßen aus:
vif2.0 – eth0 vif2.1 – eth1 vif2.2 – eth2 ...
Die genannten Einstellungen bezüglich der Schnittstellenzuordnung lassen sich in der Datei /etc/xen/xend-config.sxp modifizieren, vif-script ist hierfür zuständig. Die standardmäßige Einstellung vif-bridge fügt vifY.X der Bridge xenbr0 hinzu.
24.9.2 Routed Network 

Sie können Ihr Netzwerk entweder im Bridged oder im Routed Mode betreiben. Während wir uns im Abschnitt »Bridged Network« mit einem Bridged Network beschäftigen, werfen wir an dieser Stelle einen Blick auf ein alternatives Routed Network. Hierbei handelt es sich um ein klassisches, geroutetes Netzwerk.
Grundlagen
Es kann vorkommen, dass Sie an ein Netzwerk angeschlossen sind, das das Subnetz 192.168.0.x verwendet, Sie aber Ihren persönlichen Rechner lieber mit der IP-Adresse 192.168.1.1 versehen möchten. In diesem Fall müssen die beiden Subnetze miteinander verbunden werden. Diese Verbindung geschieht am einfachsten über die Erweiterung der Subnetzmaske in der Gestalt, dass beide Netzwerke erreicht werden können. Eine manuelle Konfiguration können Sie auf der Kommandozeile mittels ifconfig vornehmen. Anschließend muss das Netzwerk neu gestartet werden:
sudo sudo ifconfig eth0 192.168.1.1 netmask 255.255.0.0 sudo /etc/init.d/networking restart
Selbstverständlich können Sie die obige Einstellung auch mit dem grafischen Netzkonfigurationswerkzeug durchführen. Um den Linux-Rechner von einem anderen Netzwerkteilnehmer aus erreichen zu können, muss dort die Subnetzmaske entsprechend gesetzt werden. Zugegebenermaßen ist dies ein eher künstliches Beispiel, um Ihnen die Technik des Routings zu verdeutlichen.
Skripte
Die Konfiguration eines Routed Networks geschieht über die beiden Parameter network-script und vif-script in der Datei /etc/xen/xend-config.sxp:
... (network-script network-route) (vif-script vif-route) ...
Über den Parameter vif-script wird für jede gestartete Domain das Skript /etc/xen/scripts/vif-route aufgerufen. Als Parameter nimmt es die IP-Adresse entgegen, die Sie in der Konfigurationsdatei der jeweiligen Domain mit dem Parameter vif definieren müssen:
vif = [ 'ip=192.168.1.1' ]
Die Angabe dieser IP-Adresse ist zwingend notwendig, wenn Sie ein Routed Network aufbauen, da ansonsten die betreffende Domain U nicht erreicht werden kann.
Das Skript vif-route kopiert die gegebene IP-Adresse von eth0 auf die jeweilige vif-Schnittstelle und erzeugt damit eine statische Route, die Sie mit dem Befehl ip route kontrollieren können. Des Weiteren wird für die betreffende vif-Schnittstelle das Skript Proxy-ARP eingeschaltet.
Manuell wird das Proxy-ARP beispielsweise für die Schnittstelle eth0 über das /proc-Dateisystem eingeschaltet:
sudo echo 1 > /proc/sys/net/ipv4/neigh/eth0/proxy_arp
ARP
Das Address Resolution Protocol (ARP) ist ein Netzwerkprotokoll, das zu einer Netzwerkadresse der Internetschicht (Layer x nach dem OSI-Modell) die physikalische Adresse der Netzzugangsschicht (Layer y nach dem OSI-Modell) ermittelt. Diese Zuordnung von Netzwerkadressen zu Hardwareadressen wird gegebenenfalls in den sogenannten ARP-Tabellen der beteiligten Rechner hinterlegt.
Es gibt allerdings auch spezielle ARP-Nachrichten. Das sogenannte »Proxy ARP« erlaubt beispielsweise einem Router, ARP-Anforderungen für Hosts zu beantworten. Die Hosts befinden sich dabei üblicherweise in verschiedenen Netzen. Bei der Kommunikation ist der Router transparent. Die Hosts können wie gewöhnlich Pakete über verschiedene Netze hinweg versenden.
Die Funktionsweise ist folgende: Rechner A sendet eine ARP-Anforderung an Rechner B. Anstelle von Rechner B reagiert aber der dazwischenliegende Router mit einer ARP-Antwort und der Hardwareadresse (MAC) des Ports auf dem Router, auf dem die Anfrage empfangen wurde. Der anfragende Rechner A sendet dann seine Daten an den Router, der sie an Rechner B weiterleitet.
24.9.3 Bridged Network 

Xen verwendet die Technik des Bridged Networks als Standard, weil diese für die Benutzer ein Maximum an Komfort mitbringt. Ohne umständliche Konfigurationen können sämtliche Domains untereinander und mit externen Maschinen in Verbindung treten.
Grundlagen
Meist verwendet man die oben beschriebene Lösung des Routings aus Sicherheitsgründen nicht, da man zwei Netzwerke logisch und physikalisch trennen möchte. Ein mögliches Beispiel wäre ein aus zwei Segmenten bestehendes Verwaltungsnetzwerk einer öffentlichen Institution. Beide Segmente sollen zwar miteinander kommunizieren, aber logisch voneinander getrennt sein. In diesem Fall setzen Sie einen Rechner als Bridge (Brücke) ein, der über zwei Netzwerkkarten verfügt, die mit den beiden einzelnen Netzwerken verbunden sind.
Für das folgende Beispiel nehmen wir an, dass den beiden Karten im Bridge-Rechner die Netzwerkadresse 192.168.1.9 bzw. 192.168.0.9 zugewiesen wurde. Die Subnetze liegen entsprechend auf 192.168.1.0 und auf 192.168.0.0.
IP-Forwarding
Zunächst ist es notwendig, für derartige Experimente das IP-Forwarding auf dem Bridge-Rechner zu aktivieren. Dies geschieht mit dem folgenden Befehl:
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
Ob der Befehl erfolgreich war, zeigt ein:
sudo cat /proc/sys/net/ipv4/ip_forward
Hier sollte nun eine 1 ausgegeben werden. Nun muss die Routing-Tabelle auf der Bridge wie folgt ergänzt werden:
sudo route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.9 sudo route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.9
Der Bridge-Rechner fungiert in diesem Fall als Gateway (gw) zwischen den beiden Subnetzen. Mit dem Befehl route überprüfen Sie, ob die Routing-Tabelle erfolgreich geändert wurde. Schließlich können Sie abschließend testen, ob sich die Rechner gegenseitig »anpingen« lassen.
Skripte
Wie ich bereits erwähnt habe, wird das Netzwerk über die Parameter
- network-script und
- vif-script
in der Datei /etc/xen/xend-config.sxp konfiguriert. Bei einem Bridged Network stehen hinter diesen Parametern die Variablen network-bridge bzw. vif-bridge.
Für die detaillierte Umsetzung des Bridged Networks ist das Bash-Skript /etc/xen/scripts/network-bridge in Verbindung mit den beiden Werkzeugen brct1 und ip verantwortlich. Detailliert geschieht beim Ausführen des Skripts Folgendes:
- Die physikalische Schnittstelle eth0 wird in peth0 umbenannt, um diese Bezeichnung für das virtuelle veth0 zur Verfügung zu stellen: veth0 -> eth0 -> peth0. Aus der realen Schnittstelle eth0 ist durch diese Methodik eine virtuelle geworden.
- In diesem Zusammenhang werden die IP- und MAC-Adresse von peth0 auf eth0 zuerst kopiert. In einem zweiten Schritt wird die IP-Adresse von peth0 gelöscht und die MAC-Adresse auf den Wert FE:FF:FF:FF:FF:FF gesetzt. Zusätzlich wird das Address Resolution Protocol (ARP) ausgeschaltet, um auftretende TCP/IP-Anfragen an das virtuelle eth0 weiterzuleiten.
- Die zweite wichtige Funktion des Skripts besteht in der Erstellung der Bridge xenbr0. Zu dieser Bridge werden nun die beiden Schnittstellen peth0 und vif0.0 hinzugefügt. Die Schnittstelle vif0.0 war vorher innerhalb der Domain0 mit veth0 verbunden und stellt somit eine Verbindung über eth0 her. Das bedeutet, dass alle Anfragen, die an die IP-Adresse eth0 gerichtet sind, die Schnittstelle vif0.0 erreichen und somit über die interne Verbindung auch das virtuelle eth0. Umgekehrt werden alle Pakete über peth0 an externe Maschinen geleitet.
Tipp 283: Eine zweite IP-Adresse für die Xen-Domain0 vergeben
Wenn Sie für Domain0 eine zweite IP-Adresse vergeben möchten, muss über das Skript eine weitere vethX-Schnittstelle erstellt und die damit verbundene vif0.X-Schnittstelle der Bridge hinzugefügt werden. Hierzu sind folgende Schritte nötig: sudo ip address add 192.168.0.4/24 dev veth1 sudo ip link set veth1 up sudo ip link set vif0.1 up sudo brctl addif xenbr0 vif0.0 |
Mehrere Bridges
Selbstverständlich können Sie bei der Existenz mehrerer physikalischer Netzwerkgeräte auch mehr als eine Bridge einrichten. Somit ist es möglich, den Netzwerkverkehr gezielt auf eine der realen Schnittstellen zu lenken.
Die erste standardmäßig konfigurierte Bridge mit der Schnittstelle eth0 besitzt die Bezeichnung xenbr0, die über den Parameter bridge im Skript network-bridge gesetzt wird.
Um eine zweite Bridge einzurichten, müssen Sie das Skript folgendermaßen aufrufen:
sudo ./network-bridge netdev=eth1 bridge=xenbr1 start
Wie Sie an den übergebenen Parametern erkennen, nennen wir die neue Bridge xenbr1 und verbinden sie mit der Schnittstelle eth1. Zum Abschluss müssen Sie noch die Konfigurationsdatei /etc/xen/xend-config.sxp modifizieren, damit xend beim Booten des Rechners auch die richtige Bridge erstellt. Tragen Sie hier die neu erstellte Bridge ein.
Der Parameter network-script kann leider nur einmal in der genannten Konfigurationsdatei gesetzt werden. Es ist also prinzipiell nicht möglich, an dieser Stelle zwei Bridges einzutragen. Um dennoch das Starten mehrerer Bridges zu ermöglichen, legen Sie sich ein kleines Skript an, das den Befehl ./network-bridge zweimal ausführt.
Das Skript kann einen beliebigen Namen besitzen, muss aber im Verzeichnis /etc/xen/scripts abgelegt werden. Der Inhalt sollte mindestens Folgendes umfassen:
#!/bin/sh /etc/xen/scripts/network-bridge netdev=eth0 bridge=xenbr0 start /etc/xen/scripts/network-bridge netdev=eth1 bridge=xenbr1 start
Zu guter Letzt müssen Sie dieses Skript ausführbar machen:
sudo chmod 755 <Name>
In der Datei /etc/xen/xend-config.sxp müssen Sie nun selbstverständlich die Angabe der Bridge durch den Namen dieses Skripts ersetzen:
(network-script <Name>)
Tipp 284: Neuen DNS für Xen definieren
Ein Problem, das auftreten kann, ist die gestörte Namensauflösung von Internetseiten. Der sogenannte DNS (Domain Name Server) wird dem Anwender in der Regel dynamisch zugewiesen. Oft sind solche Nameserver jedoch überlastet. Dann tun Sie gut daran, einen weniger frequentierten Server zu definieren. Das kann entweder mit dem Netzwerkkonfigurationswerkzeug oder durch direkte Bearbeitung der Datei /etc/dhcp3/dhclient.conf erfolgen. Der notwendige Eintrag hat folgende Gestalt: prepend domain-name-servers 62.72.64.237 In der Datei ist bereits ein entsprechender Eintrag vorhanden. Entfernen Sie dort das Kommentarzeichen #, und ändern Sie die IP-Adresse. Um die Änderungen ohne Neustart des Systems zu übernehmen, ist noch folgender Befehl erforderlich: sudo /etc/init.d/networking restart Welcher DNS-Server gerade genutzt wird, erfahren Sie durch folgenden Befehl: sudo grep nameserver /etc/resolv.conf Der Befehl dig schließlich testet, ob ein gegebener Nameserver (im folgenden Beispiel 194.25.2.129) eine Anfrage umsetzt: dig @194.25.2.129 www.ubuntulinux.org a ; (1 server found) ;; Query time: 51 msec ;; SERVER: 194.25.2.129#53(194.25.2.129) Wie Sie sehen, können Sie auf diese Weise auch die Reaktionszeit des Nameservers abschätzen. |