Eine IP, mehrere VM's

InstantSpace

New Member
Guten Abend liebes Forum,

mir stellt sich seit längerem eine Frage. Ich weiß nicht wirklich wonach ich da Googlen soll und entschuldige mich im voraus falls meine Frage in diesem Forum schonmal beantwortet wurde.

Ich habe in meinem Netzwerk ein Host-System auf welchem mehrere VM's laufen. Ich besitze jedoch nur eine feste IPv4-Adresse. Nun kam mir eine Idee mit welcher ich mehrere VM's unter einer festen öffentlichen IP laufen lassen kann, ohne das Sie sich die Ports teilen müssen was einige Einschränkungen mit sich bringt.
Meine Vorstellung war es auf dem Hostsystem eine Anwendung laufen zu lassen, welche prüft, über welchen Hostname der Server aufgerufen wurde. Wurde er Beispielsweise von vm01.test.de aufgerufen soll er die Anfragen aller Ports an vm01 leiten ruft man den Server allerdings über den Hostname vm33.test.de soll er alle anfragen an die vm33 weiterleiten.

Gibt es solch eine Software oder eine Möglichkeit dies zu verwirklichen?

Vielen Dank im voraus für eure Hilfe und

Mit freundlichen Grüßen
InstantSpace
 
Das kannst Du über eine Revers-proxy auf dem Hostsystem realisieren.
Du Hast ja eine externe IP und für die VM's jeweils eine interne IP.

z.B. 1.2.3.4 externe IP / 192.168.2.100 VM1 /192.168.2.101. VM2
Code:
<VirtualHost 1.2.3.4:80>
        HostName vm1.domain.de
        ProxyRequests Off
        <Proxy *>
                Order deny,allow
              Allow from all
        </Proxy>
        ProxyPass / http://192.168.2.100/
        ProxyPassReverse / http://192.168.2.100/

</VirtualHost>

<VirtualHost 1.2.3.4:80>
        HostName vm2.domain.de
        ProxyRequests Off
        <Proxy *>
                Order deny,allow
              Allow from all
        </Proxy>
        ProxyPass / http://192.168.2.101/
        ProxyPassReverse / http://192.168.2.101/

</VirtualHost>

Die Apache Config könnte so aus sehen.
Das ist jetzt nur so eine Idee von mir geht vielleicht auch über Iptables
 
Funktioniert ein Revers-Proxy auch, wenn man Beispielsweise keine feste IP hat sondern nur DynDns oder muss man hier eine andere Möglichkeit anwenden?
 
Das geht auch, die Domain wird ja duch den DynDNS Service zur richtigen IP geroutet.
Code:
<VirtualHost 1.2.3.4:80>
ändern in
Code:
<VirtualHost *:80>
 
Habe ich gerade getestet jedoch läuft auf dem Hostsystem ein Windows mit IIS, ich habe auf einer VM mit Debian und Apache2 die Config-Datei entsprechend angepasst.
Danach habe ich die feste öffentliche IP zur VM durchgeleitet. Wenn ich nun vm01.xxx.de oder vm02.xxx.de aufrufe erhalte ich einen Serverfehler. Die Webseite sei momentan nicht verfügbar.
Woran liegt das?
Lässt sich das ganze auch mit dem IIS realisieren bzw. welche Konfig-Datei muss ich hier bearbeiten und sind das die selben Werte wie in der Config vom Apache? Arbeite eher selten mit dem IIS
 
Sind die Seiten von der Debian VM erreichbar? Wie sind den Die Seiten auf den VM's eingerichtet.

So, habe in der Zwischenzeit einiges ausprobiert und gegooglet, jedoch leider ohne erfolg.
Auf der Debian-VM sind die Seiten problemlos erreichbar. Jedoch erhalte ich dort immer die beschriebene Fehlermeldung beim Aufruf von vm01.xxx.de/vm02.xxx.de.
Ich habe das ganze auch noch mit einer Anleitung über den IIS versucht, jedoch ohne erfolg. Dann habe ich auf einem System zu Testzwecken noch ein XAMPP aufgesetzt. Auch hier erhalte ich eine Fehlermeldung, jedoch einen Internal Server Error.
Wenn ich bei deinem Config-File meine Daten anpasse und dies bei XAMPP so Eintrage startet der Apache nicht mehr. Wenn ich jedoch HostName durch ServerName ersetze startet er, jedoch wie gesagt ein Internal Server Error.
Wahrscheinlich mache ich immer einen Fehler oder trage es in die falschen Dateien ein, bin was Webserver diesbezüglich angeht nicht wirklich ein Profi:)

Mit freundlichen Grüßen
InstantSpace
 
Ich hab es mal getestet, habe mir 3 VM's in Virtualbox mit Ubuntu installiert.

auf dem Proxy müssen folgende Module installiert und aktiviert werden:
Code:
a2enmod proxy
a2enmod proxy_http
service apache2 restart
und apache neustarten

In meinem Config Beispiel war ein Fehler, ich hatte HostName geschrieben muß richtig ServerName heisen
Code:
<VirtualHost *:80>
        [COLOR="Red"]ServerName[/COLOR] vm1.domain.de
        ProxyRequests Off
        <Proxy *>
                Order deny,allow
              Allow from all
        </Proxy>
        ProxyPass / http://192.168.2.100/
        ProxyPassReverse / http://192.168.2.100/

</VirtualHost>

<VirtualHost *:80>
        ServerName vm2.domain.de
        ProxyRequests Off
        <Proxy *>
                Order deny,allow
              Allow from all
        </Proxy>
        ProxyPass / http://192.168.2.101/
        ProxyPassReverse / http://192.168.2.101/

</VirtualHost>
Auch hier den Apache wieder neustarten.
Die DNS-Einträge für vm1.domain.de und vm2.domain.de müssen auf Deine externe IP zeigen (DynDNS)

Bei einigen Speedport-Routern der Telekom ist zu beachten, das diese kein NAT Loopback haben. Das heist mit anderen Worten, Du kannst nicht von intern über die externe Adresse auf deine Portfreigabe zugreifen. Das Config Beispiel bezieht sich auf das DokumentRoot der VM's.

In den VM's in der default.conf
Code:
DocumentRoot /var/www
Verschieden Webseiten auf der gleichen VM einfach in entsprechende Unterordner legen.
Code:
/var/www/web1
/var/www/web2
aufruf im Proxy dann wie folgt:
Code:
<VirtualHost *:80>
        ServerName vm1.domain.de
        ProxyRequests Off
        <Proxy *>
                Order deny,allow
              Allow from all
        </Proxy>
        ProxyPass / http://192.168.2.100/web1
        ProxyPassReverse / http://192.168.2.100/web1

</VirtualHost>

<VirtualHost *:80>
        ServerName vm2.domain.de
        ProxyRequests Off
        <Proxy *>
                Order deny,allow
              Allow from all
        </Proxy>
        ProxyPass / http://192.168.2.100/web2
        ProxyPassReverse / http://192.168.2.100/web2

</VirtualHost>

Es hat so alles funktioniert wie es soll.
 
Last edited by a moderator:
Es hat so alles funktioniert wie es soll.
Habe das nun entsprechend korrigiert.
Die Anfragen an Port 80 werden wie gewünscht an die entsprechende IP weitergeleitet. Allerdings läuft auf einer VM ein SBS2011 mit dem auch eine VPN-Verbindung hergestellt werden muss. Dies funktioniert mit der derzeitigen Konfiguration vom Apache nicht, da ich davon ausgehen das die Anfragen ausschließlich von und an Port 80 weitergeleitet werden. Gibt es eine Möglichkeit einen bestimmten Port-Bereich oder einfach alle Anfragen also alle Ports an die entsprechende IP weiterzuleiten? Oder muss ich hier für jeden Port einen eigenen VirtualHost erstellen? Das wäre ein wenig aufwendig.

Vielen Dank im voraus,

Mit freundlichen Grüßen
 
Last edited by a moderator:
Das ganze geht natürlich nur für http-traffic. Wenn du nur die VPN-Verbindung für eine VM benötigst leite den Port im Route direkt auf die VM.
 
Das ganze geht natürlich nur für http-traffic. Wenn du nur die VPN-Verbindung für eine VM benötigst leite den Port im Route direkt auf die VM.

Das ist ja das eigentliche Problem. Es laufen mehrere Windows Server als VM's auf dem Hostsystem und zu jedem soll eine VPN-Verbindung aufgebaut werden usw. Ich suche eine Möglichkeit wenn die Anfrage von vm01.xxx.de kommt alle Anfragen aller Ports an die VM01 zu leiten. Kommt die Anfrage Beispielsweise von vm02.xxx.de sollen alle Anfragen bzw diese Anfrage an vm02 geleitet werden. Nicht nur der Http-Traffic. Hast du dafür auch eine Lösung?
 
Das kannst Du meine Meinung nach nur über verschiedene externe Ports lösen.
Port Weiterleitung im Router

Beispiel:

VM1: externe IP Port 1723 --> interne IP Port 1723
VM2: externe IP Port 1724 --> interne IP Port 1723
VM3: externe IP Port 1725 --> interne IP Port 1723

Dann brauchst Du nur dir Ports bei den externen Clients anpassen, deine localen Konfigurationen sind dann gleich. Die Hostname sind hier auch Nebensache, da die ja alle auf deine externe IP auflösen.
Das geht dann auch mit anderen Diensten wie HTTP, FTP usw. Der Schönheitsfehler ist halt der abweichende externe Port. Für die Webseiten würde ich Dir die Proxy Lösung empfehlen, geht auch mit Einbinden eines Zertifikates für HTTPS. Weil da muss ein Besucher der Webseiten sonst den abweichenden Port wissen. Für FTP, VPN würde ich Dir die Postweiterleitung nehmen, da ja hier der entsprechende Client nur einmal konfiguriert werden muß.
 
MOD: Bitte keine Fullquotes. Danke!

Darüber habe ich auch schon nachgedacht. Das wäre durchaus eine denkbare Lösung. Jedoch wird das bei 10 VM's und einigen Verschiedenen Ports und Diensten schnell unübersichtlich. Ist es überhaupt Möglich das ganze so zu realisieren wie ich mir das vorstelle? Beispielsweise mit einer Software oder einem Script welches das ganze so realisiert:

Person A ruft vm01.xxxx.de auf. Will Beispielsweise eine VPN-Verbindung herstellen. VM01 antwortet und stellt die Verbindung her.
Person B ruft vm02.xxxx.de auf. Will Beispielweise eine FTP-Verbindung herstellen. VM02 antwortet und stellt die Verbindung her.

vm01.xxx.de und vm02.xxx.de haben beide den selben CName-Record und zeigen somit auf das selbe System. Dort soll ein Scipt oder eine Software laufen, welche erkennt von welchem Host also von welcher Domain das ganze aufgerufen wurde und die Anfrage an die entsprechende interne IP weiterleiten.
 
Last edited by a moderator:
mal eine andere Frage.
Beschreibe doch mal kurz was Du genau vor hast. Vielleicht gibt es ja eine Lösung ohne das man gleich 10 VM's einrichten muß.
 
Ich nutze die VM's jedenfalls die meisten von Ihnen nicht selbst.
Der Anwender der VM möchte natürlich vollen Zugriff auf alle Ports seiner jeweiligen VM. Jedoch sind IPv4-Adressen teuer weshalb ich an die im ersten Post genannte Möglichkeit gedacht habe. Ich weis allerdings nicht ob sich das so verwirklichen und umsetzen lässt und ob es hierfür eine Software gibt.

Mir ist jedoch zwischenzeitlich eine weitere Idee gekommen. Im Endeffekt sollen es VM's zum Üben und Testen sein, welche ich Anbieten möchte. Es würde doch die Möglichkeit bestehen ein VPN-Tunnel zum Host-System aufzubauen und dann die VM's über die interne IP zu erreichen. Die VPN-Anmeldung wird bereits genutzt und läuft über einen SBS2011. Ich möchte allerdings nicht jeden Testbenutzer manuell ins AD erstellen, sondern suche eine Art API bzw ein CMD-Script das mir diese Aufgabe abnimmt. Das CMD-Script kann ich dann weiter verarbeiten.
 
Last edited by a moderator:
Es würde doch die Möglichkeit bestehen ein VPN-Tunnel zum Host-System aufzubauen und dann die VM's über die interne IP zu erreichen
Das sollte funktionieren.
Mit der API und dem Script kann ich Dir allerdings nicht helfen.
 
Back
Top