XEN: Netzwerksetup

Das häufigste Setup für XEN ist, dass man alle Domains an eine virtuelle Bridge anschließt, zu der auch das Ethernetinterface gehört, das den Kontakt zur Außenwelt herstellt. Da bei den Alturo-Servern nur eine öffentliche IP dabei war, fiel diese Variante leider weg.

Da ich die Domains recht bequem auch zwischen beiden Servern verschieben können wollte (also ohne dort erst einmal die Netzwerkeinstellungen anzupassen) legte ich auf beiden Servern in der Domain-0 zwei Bridges an.
xen-intbr ist die Bridge für das Netzwerk zu dem alle Domains gehören, und über das auch später die Domains auf den verschiedenen Servern miteinander kommunizieren können. xen-inetbr ist die Bridge die jeweils lokal die gleiche IP hat (10.0.5.1) und das Gateway mit NAT bereitstellt.
In /etc/network/interface

...
# Internal Bridged Network.
auto xen-intbr
iface xen-intbr inet static
pre-up brctl addbr xen-intbr
post-down brctl delbr xen-intbr
address 10.0.10.3
netmask 255.255.255.0
network 10.0.10.0
broadcast 10.0.10.255
bridge_fd 0
bridge_hello 0
bridge_stp off

# Internal Bridged Network for Internet
auto xen-inetbr
iface xen-inetbr inet static
pre-up brctl addbr xen-inetbr
post-down brctl delbr xen-inetbr
address 10.0.5.1
netmask 255.255.255.0
network 10.0.5.0
broadcast 10.0.5.255
bridge_fd 0
bridge_hello 0
bridge_stp off

Achtung, das „Interface“ xen-intbr“ muss auf jedem Server eine andere IP haben

Danach passt man noch ein wenig die /etc/xen/xend-config.sxp an

# Xend configuration file.

# Port xend should use for the HTTP interface.
(xend-port         8000)

# Port xend should use for the event interface.
(xend-event-port   8001)

# Address xend should listen on for HTTP connections.
# Specifying 'localhost' prevents remote connections.
# Specifying the empty string '' allows all connections.
(xend-address      'localhost')

# The port xend should start from when allocating a port
# for a domain console.
(console-port-base 9600)

# Address xend should listen on for console connections.
# Specifying 'localhost' prevents remote connections.
# Specifying the empty string '' allows all connections.
(console-address   'localhost')

## Use the following if VIF traffic is routed.
# The script used to start/stop networking for xend.
(network-script     network-route)
# The default script used to control virtual interfaces.
#(vif-script         vif-route)

## Use the following if VIF traffic is bridged.
# The script used to start/stop networking for xend.
#(network-script    network)
# The default bridge that virtual interfaces should be connected to.
(vif-bridge        xen-intbr)
# The default script used to control virtual interfaces.
(vif-script        vif-bridge)

# Whether iptables should be set up to prevent IP spoofing for
# virtual interfaces. Specify 'yes' or 'no'.
(vif-antispoof     no)

# Setup script for file-backed block devices
(block-file block-file)

# Setup script for enbd-backed block devices
(block-enbd block-enbd)

nach einem Reboot oder einfacher einem ifup der Interfaces , sollten die beiden Bridges in ifconfig auftauchen.

Um das Netzwerk auf den beiden Servern zu verbinden installiert man openvpn, und fügst in /etc/openvpn/xenlan.conf folgendes ein:

dev tap42

local IP-des-lokalen-Rechners
remote IP-des-entfernten-Rechners

lport 7890
rport 7890

persist-key
persist-tun
user nobody
group nogroup

comp-lzo

ping 15

#verb 9

Das erzeugt einen unverschlüsselten Tunnel zwischen den beiden Servern, auf eine verschlüsselung sollte man im Providerlan verzichten können, er kann kann bei Bedarf auch einfacher an die Daten kommen.

Durch anlegen weiterer Konfigurations-Dateien kann man dann bei Bedarf auch einen VPN-Zugang von Zuhause anlegen.

Nachdem das VPN gestartet wurde (/etc/init.d/openvpn), existieren nun auf beiden Servern tap-Interfaces mit dem Namen tap42. Diese müssen nun noch der Bridge xen-intbr hinzugefügt werden. Manuel geht das mit den Kommandos

ifconfig tap42 0.0.0.0
brctl addif xen-intbr tap42

Oder man bastelt sich sich ein Skript welches dieses & die Einrichtung von NAT (SNAT & DNAT) selber erledigt.

#! /bin/sh
#
set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Eigene offizielle IP herausfinden

ownIP=$( ifconfig eth0 | head -n 2 | tail -1 | cut -d : -f 2 | cut -d " " -f 1 )

# Liste mit einträgen fürs DNAT, Port_auf_Server-IP_des_Ziels-Port_des_Ziels

DNATlist="25-10.0.5.7-25 465-10.0.5.7-465 80-10.0.5.9-80"

case "$1" in
  start)
        echo -n "vpn "
        ifconfig tap42 0.0.0.0
        brctl addif xen-intbr tap42
        echo -n "SNAT "
        iptables -t nat -A POSTROUTING -o eth0 -s 10.0.5.0/24 -j SNAT --to $ownIP
        echo -n "DNAT "
        for entry in $DNATlist ; do
            oport=$( echo $entry | cut -d "-" -f 1 )
            dip=$( echo $entry | cut -d "-" -f 2 )
            dport=$( echo $entry | cut -d "-" -f 3 )
            iptables -t nat -A PREROUTING -p tcp --dport $oport -d $ownIP -i eth0 -j DNAT --to $dip":"$dport
        done

        ;;
  stop)
        echo -n "vpn "
        brctl delif xen-intbr tap42

        echo -n "NAT "
        iptables -F -t nat
        ;;


  *)
        exit 1
        ;;
esac

exit 0

Dies Skript sollte dann im Startprozess vor dem Startskript der Domains eingebunden werden.

Nun sollte man problemlos die andere private (10.0.10.x) IP anpingen können.

Dieser Beitrag wurde unter Allgemein, Internet, Linux, Technik veröffentlicht. Setze ein Lesezeichen auf den Permalink.

21 Responses to XEN: Netzwerksetup

  1. Hi,

    ich habe das hier nur zufaellig via google gefunden, weil ich momentan ein paar probleme beim brigde-setup fuer mehrere bridges habe, aber:

    Genial!

    Ich habe auf eine Maschine bei Alturo, und hatte dieses Setup nur leise im Hinterkopf geplant, cool, dass Du das hinbekommen und auch dokumentiert hast!

  2. Dominik Bonsch sagt:

    Du hast meine Tag gerettet , das war genau das was ich gesucht habe ,

    gruß Dominik

  3. Denny sagt:

    Habe ich dich auch über google gefunden und nutze selbst Xen. Ich habe ebenfalls das Problem, das ich nur eine IP besitze und mir der Provider das Netz dichtmacht, sobald eine Private Adresse an den Switch gelangt. Jetzt schlug man mir vor, ich sollte ein geroutetes Netz verwenden, statt über die Bridge. Hast du davon auch eine Ahnung?

    Wenn ja, würde ich das gern in unserem Wiki Dokumentieren.

  4. johannes sagt:

    Lies einfach (noch?) einmal den Artikel hier 🙂

    Bei dem Setup bekommt der Provider nur die öffentliche IP zur Gesicht.

  5. Denny sagt:

    hmm, was ich nicht verstehe, worüber kommunizieren die DomUs untereinander auf der selben Dom0?

    Wenn ich definierte Ports von eth0 (der externen IP) an einen DomU weiterleiten möchte, wie sähe das dann aus?

    Auch beim rebooten müßte Xen ja gestartet werden bevor das Netzwerk hochgezogen wird. Denn sonst gibt es die Fehlermeldung, das xen-intbr und xen-inetbr nicht gestartet werden können, weil es schlicht diese nicht gibt.

    Bei Schlund wird die IP per DHCP verteilt, kann sie also nur als iface eth0 inet dhcp angeben.

    Ich stelle mir auch das Firewall Setup recht kompliziert vor. Soviele Fragen ….

  6. johannes sagt:

    Die DomUs kommunizieren über die beiden Bridges miteinander (bzw. wenn man clevererweise nur die ‚richtige‘ IP nutzt nur über die xen-intbr)

    Die Weiterleitung von Ports macht du mit DNAT (siehe auch das Skript im Artikel).

    Vertrau mir, das funktioniert, sonst würdest du das gar nicht lesen können 🙂

  7. Denny sagt:

    Ich mache mir nur sorgen, das die mir wieder den Port dichtmachen, weil doch noch irgendwas von meinen privaten adressen (in diesem Fall 192.168.x.x) durchgerutscht ist.

  8. johannes sagt:

    Wenn eth0 nicht der/den Bridge(s) angehört, und das S-NAT ordentlich funktioniert haben die IPs keine Chance.

  9. Also, Danke nochmal. Es hat alles geklappt. Die Leitung steht noch. Der Provider hat also nichts gemerkt 🙂

  10. Pingback: Johannes Formanns Webseite » XEN 3.0.1 auf Alturo-Webserver installieren

  11. johannes sagt:

    Bei XEN 3.0 die Hinweise hier beachten

  12. schroedi sagt:

    Wirklich ein richtig gutes Tutorial, wieviel Zeit hat dich das ganze gekostet? Ich habe es mal in unserem forum verlinkt.

    schroedi

  13. johannes sagt:

    Das eigentliche Schreiben nicht soviel, alles beim ersten ‚mal herauszufinden dann doch etwas mehr 🙂

  14. Pingback: Johannes Formanns Webseite » Aktuelle Serverkonfiguration

  15. modules sagt:

    Mit dem Skript ist die Kommunikation zwischen den beiden Servern möglich?

    Wie sieht es den mit dem Zugriff auf die einzelnen DomUs aus dem Inet aus, geht das auch?

  16. johannes sagt:

    Ja, die Server können direkt miteinander kommunizieren, da alle an der xen-intbr-Bridge angeschlossen sind, und bei mehreren Servern diese per OpenVPN gekoppelt sind.

    Für den Internetzugriff ist in der Konfiguration die xen-inetr-Bridge zuständig, und wird mittels NAT realisiert, wobei man bei ausreichend vielen echten IPs das auch anders machen kann.

  17. querelen sagt:

    Ist es auch möglich zusätzlich noch vif-route/network-route für andere Instanzen zu nutzen?

    Wie sieht dann die Konfiguration für die dom0 bzw. domU aus?

  18. johannes sagt:

    Ntwork-* ist natürlich nur einmal pro Server möglich, vif-* kann individuell pro Domain in der Konfiguration gesetzt werden. in der xend-config wird nur der Default festgelegt.

  19. matthias sagt:

    Vielen Dank für die super Anleitung! Ich habe meine beiden Server genau wie hier beschrieben aufgesetzt und alles funktioniert. Da ich etwas Zeit Netzwerk Setup der DomUs verbraten habe, hier mal meine Config:

    /etc/xen/web.cfg … vif = [ ‚bridge=xen-inetbr‘,’bridge=xen-intbr‘ ] …

    In der domU selbst schaut das Netzwerk Setup bei mir so aus:

    web:~# cat /etc/network/interfaces

    The loopback network interface

    auto lo iface lo inet loopback

    The primary network interface

    auto eth0 iface eth0 inet static address 10.0.5.80 gateway 10.0.5.1 netmask 255.255.255.0

    The primary network interface

    auto eth1 iface eth1 inet static address 10.0.10.80 netmask 255.255.255.0

    Wie gesagt, es funktioniert. Ich kann jetzt z.B. aus der DomU beide xen-intbr’s anpingen (die auf dem entfernten Server über das VPN) und auch NAT und Routing funktioniert für die 10.0.5.* Adressen.

    Hat irgend jemand noch eine andere Variante?

  20. chris sagt:

    Funktioniert das auch, wenn der zweite Server in einem anderen Rechenzentrum steht bzw. eine komplett andere externe IP hat?

    Danke schonmal

  21. johannes sagt:

    Ja, intern sorgt die openvpn-Verbindung für die notwendige Transparenz, und bei dem Setup muss ja bei einem „Umzug“ eines vServers so oder so der DNS geändert werden, und wohin die Änderung zeigt ist egal.

Kommentare sind geschlossen.