Internet Anbindung von Ubuntu VMs für WebApplications auf einem XenServer

gomme

Newbie
Registriert
Juni 2014
Beiträge
6
Hallo, hoffe, Ihr könnt mir hierbei weiterhelfen, bin wirklich ziemlicher Anfänger, was den ganzen Kram angeht.

Ich habe einen Server im Uni Rechenzentrum mit XenServer 6.2 laufen, dieser erhält per DHCP eine IP etc. Dessen Anbindung ans Internet und Uninetz läuft. Auf diesem Server sollen nun einige Ubuntu Server 14.04 VMs laufen, jede wird für eine kleine Web Application mit ihrem eigenen Apache gebraucht.

Mein Problem ist nun, dass ich nur eine IP vom Rechenzentrum zur Verfügung habe, die mir wie gesagt per DHCP zugeteilt wird, und ich die einzelnen VMs hinter dem XenServer nun ans Internet anbinden will. Diese müssen sowohl in der Lage sein, selbst ins Internet zu gelangen, als auch Anfragen aus dem Netz per http zu erhalten. Sie sollen entsprechend ein eigenes Subnetz auf meinem Server bilden.

Wie stelle ich das nun an? Damit die einzelnene VMs selbst Zugriff von "innen nach außen" aufs Internet haben, könnte ich auf dem XenServer selbst einen DHCP Server laufen lassen, oder? Wie aber werden dann die Anfragen von außen zur passenden VM geleitet?

Ich bitte hierbei um Nachsicht und falls Ihr noch weitere Infos benötigt, um zu helfen, so werde ich sie Euch umgehend liefern.

Danke schon mal!
 
Von innen nach außen wird verhältnismäßig leicht. Ich hab mit Xen noch nicht gearbeitet, aber am Ende musst du "nur" den Xen wie einen Router verwenden.
Von außen nach innen wird deutlich schlimmer. Kannst du den Xen mit einem Webserver (z.B. nem Apache) ausrüsten? Dann richte das Ding als Proxy ein und leite die Requests in Abhängigkeit der gewählten Domain auf die richtige interne Maschine. Das KÖNNTE funktionieren.

Andererseits: Warum mehrere VMs? Warum nicht eine mit Maschine mit Domain Name - basierten VHosts? Das sollte auch klappen udn deutlich leichter zu realisieren sein.
 
Das geht nur wenn du eine statische Portweiterleitung pro VM einrichtest. Also Anfragen auf Port 8001 an Port 80 auf VM1, 8002 an Port 80 auf VM2 etc.
Andernfalls müsstest du die NICs als Bridge konfigurieren damit die VMs direkt IP Adressen vom DHCP der Uni bekommen - was aber wahrscheinlich nicht erlaubt / gewünscht ist.
 
Danke erst mal.

Daaron schrieb:
Von innen nach außen wird verhältnismäßig leicht. Ich hab mit Xen noch nicht gearbeitet, aber am Ende musst du "nur" den Xen wie einen Router verwenden.
Von außen nach innen wird deutlich schlimmer. Kannst du den Xen mit einem Webserver (z.B. nem Apache) ausrüsten? Dann richte das Ding als Proxy ein und leite die Requests in Abhängigkeit der gewählten Domain auf die richtige interne Maschine. Das KÖNNTE funktionieren.

Andererseits: Warum mehrere VMs? Warum nicht eine mit Maschine mit Domain Name - basierten VHosts? Das sollte auch klappen udn deutlich leichter zu realisieren sein.

Hättest Du für deinen Lösungsvorschlag einen Link zu einer guten Anleitung?

Natürlich habe ich mir das Ganze nicht selbst ausgedacht, ich soll das so für den Lehrstuhl realisieren. Die verschiedenen VMs sollen halt jeweils nur die Anforderungen für eine einzige App erfüllen und unabhängig von einander sein. Falls eine abstürzt, sollen die anderen nicht betroffen sein, etc.

Falc410 schrieb:
Das geht nur wenn du eine statische Portweiterleitung pro VM einrichtest. Also Anfragen auf Port 8001 an Port 80 auf VM1, 8002 an Port 80 auf VM2 etc.
Andernfalls müsstest du die NICs als Bridge konfigurieren damit die VMs direkt IP Adressen vom DHCP der Uni bekommen - was aber wahrscheinlich nicht erlaubt / gewünscht ist.

Genau, ich will nicht, dass die hier jedes Mal, wenn sie eine neue VM erstellen, wieder zum Rechenzentrum laufen und eine IP beantragen müssen. Das wäre umständlich und wahrscheinlich auch vom Rechenzentrum aus nicht erwünscht.
An Portforwarding hatte ich auch gedacht, aber dann müsste der Port ja immer in der URL auftauchen. Also Benutzer der einzelnen Apps müssten dann den Port immer mit angeben, oder? Das wäre eine Notlösung, ich hätte es aber gerne "eleganter".

Gäbe es noch weitere Möglichkeiten?
 
Wenn es einzelne VMs sein müssen fällt mir da keine ein. Theoretisch kann man versuchen das mit Apache hinzubekommen oder einem selbstgeschriebenem Tool welches die Anfragen anhand der URL dann an die entsprechende VM weiterreicht aber ich glaube dass das nicht so einfach ist.
Bei meinem Uni Projekt damals musste ich es genau so machen und dann hatte man halt als URL servername:8001 und servername:8002 usw.

Wenn du nur mehrere Domains hosten willst dann brauchst du das ja wie gesagt nichts, aber wenn du zwingen die VMs brauchst dann brauchen die auch "externe" IPs oder eben Portweiterleitungen.
 
Man könnte eine weitere VM als Reverse-Proxy für die einzelnen Webserver einrichten. Bei mehreren Domains wird das aber auch nicht so einfach.
 
So schwer sollte das nicht werden. Im Endeffekt kombinierst du auf einer Maschine, die als Proxy für alle Domains dient, (von Apache ausgehend) mod_proxy mit ner Latte VHost grob nach folgendem Schema.

sei 192.168.2.1 (domain1.example.com) der Proxy, 192.168.2.(2 - n) die verschiedenen Domains/Apps...

Code:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://192.168.2.2/
ProxyPassReverse / http://192.168.2.2/
ServerName domain2.example.com
</VirtualHost>
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://192.168.2.3/
ProxyPassReverse / http://192.168.2.3/
ServerName domain3.example.com
</VirtualHost>
Auf den App-Servern sollte dann mod_rpaf aktiv und konfiguriert sein, damit die Besucher-IP korrekt erhalten bleibt. Ohne landet jeweils nur die IP des Proxys in den Logs und solche Sachen wie IP-basierte Sperren funktionieren nicht.
Natürlich sollte jede <VirtualHost>-Direktive zur besseren Wartbarkeit in eine eigene .conf in /etc/apache2/sites-available und die jeweilige Direktive dann mit "a2ensite SEITENNAME" angeworfen werden.

Für echte faaaancccyyyy-Setups kann auch statt dem normalen mod_proxy gleich der mod_proxy_balancer - Hammer ausgepackt werden. Loadbalancing rockt *G*
 
Daaron schrieb:

Ja, super, ich denke, das sollte so doch schon mal passen. Kann man mit dieser Methode die einzelnen Apps auch über einen Aufruf von z.B. http://servername.de/nameApp1 hinbekommen? Also nicht durch das Aufrufen über nameApp1.servername.de?

Ich habe noch das Problem, dass ich von einer neu eingerichteten VM aus keinen Zugriff aufs Internet habe, vom Server selbst allerdings schon. Wie konfiguriere ich nun den Server richtig, um meinen VMs auch den Zugriff zu ermöglichen?
 
Zuletzt bearbeitet von einem Moderator: (überflüssiges Zitat entfernt)
gomme schrieb:
Kann man mit dieser Methode die einzelnen Apps auch über einen Aufruf von z.B. http://servername.de/nameApp1 hinbekommen? Also nicht durch das Aufrufen über nameApp1.servername.de?
Müsst in etwa so aussehen, wenn ich mich recht erinnere (ungetestet!):
Code:
<VirtualHost *:80>
    <Location /nameApp2>
        ProxyPreserveHost On
        ProxyPass http://192.168.2.2/
        ProxyPassReverse http://192.168.2.2/
    </Location>

    <Location /nameApp3>
        ProxyPreserveHost On
        ProxyPass http://192.168.2.3/
        ProxyPassReverse http://192.168.2.3/
    </Location>
</VirtualHost>
 
Zuletzt bearbeitet:
Zurück
Oben