27.
Dezember
2010
Per E-Mail kam eine Anfrage wie ich es geschafft habe vom Host aus auf den Server zuzugreifen, welcher bei mir mittels VirtualBox als Mailserver agiert. Bisher hatte ich dies tatsächlich nicht weiter beschrieben, daher ein paar Zeilen dazu wie ich es gelöst habe beziehungsweise wieso ich abgesehen von IMAP
, SMTP
und HTTP
auch noch per SSH
auf den Server zugreife.
Zunächst einmal benötigt das Gastsystem zwei (virtuelle) Netzwerkkarten. Über NAT (network address translation) wird ermöglicht, dass das Gastsystem über die Netzwerkverbindung des Wirtsystems ins Internet zugreifen kann. Über diese Verbindung kann das Wirtsystem jedoch nicht auf den Gast zugreifen.
Die IP erhält das Gastsystem dabei über den von VirtualBox gestellten DHCP-Server. Der entsprechende Eintrag über die grafische Benutzeroberfläche von VirtualBox (auf dem Bild ist der Dialog der Version 4.0 zu sehen) sieht wie folgt aus:
Im Gastsystem ist anschließend die erste Netzwerkkarte im System per DHCP mit den entsprechenden Daten versorgt worden. Sowohl die Daten für IPv4 wie auch für IPv6 wurden dem Adapter zugewiesen. Hier wie es sich unter dem Server (Ubuntu 10.10) nach einer Abfrage an der Konsole darstellt. Die Tastatureingaben sind auf dieser Seite in den Fenstern jeweils fett dargestellt, alle anderen Angaben stammen sind Ausgaben des Systems.
root@farnsworth:~# ifconfig eth0
eth0 Link encap:Ethernet Hardware Adresse 08:00:27:c9:ca:e9
inet Adresse:10.0.2.15 Bcast:10.0.2.255 Maske:255.255.255.0
inet6-Adresse: fe80::a00:27ff:fec9:cae9/64 Gültigkeitsbereich:Verbindung
Für die Verbindung zwischen Gastsystem und Wirtsystem ist zusätzlich ein unter VirtualBox als »host-only«-Netzwerkadapter[1] notwendig. Dieser (virtuelle) Netzwerkanschluss kann von VirtualBox ebenfalls per DHCP dem Gastsystem eine IP zuweisen. Zunächst jedoch erst einmal ein Blick auf die Einstellung in der grafischen Benutzeroberfläche von VirtualBox für den zweiten (virtuellen) Netzwerkadapter:
Während der Installation von VirtualBox wird am Wirtsystem dafür ein zusätzliches (virtuelles) Netzwerk-Interface eingerichtet. Dies hat anschließend bei der Verwendung eines »host-only«-Adapters für das Wirtsystem die Funktion einer Netzwerkkarte, welche das Wirtsystem mit dem (virtuellen) Netzwerk des beziehungsweise der Gäste verbindet. Ein Zugriff weiterer (physikalischer) Rechner im Netzwerk auf den Gast ist nicht möglich, dies suggeriert bereits der Name »host-only«-Netzwerkadapter.
VirtualBox kann für das Gastsystem auch beim »host-only«-Adapter als DHCP-Server agieren. Die Einstellungen können auch hier wieder bequem über die grafische Oberfläche vorgenommen werden. Da ich jedoch beim Wechsel von Linux und Windows als Wirtsystem Probleme mit dem DHCP-Server hatte, habe ich die zweite Netzwerkkarte im System mit einer festen IP versehen, weiter unten auf dieser Seite mehr dazu.
Im Normalfall, wenn also kein regelmäßiger Wechsel des Wirtsystems vorliegt, wird es normalerweise zu keinen Problemen kommen. Daher kann der DHCP-Server für den »host-only«-Adapter normalerweise problemlos verwendet werden.
Dennoch der Hinweis auf ein anderes Problem, welches ich im Zusammenhang mit wechselnden Wirtsystemen bereits beschrieben habe: VirtualBox: Netzwerkkarte unter Linux plötzlich eth1. Sollte sich beim Wechsel des Wirtsystems die Zuweisung der Netzwerkkarteneinstellungen des Gastsystems verändern, sollte diese Seite aufgerufen werden.
Auch nach dem Lösen des oben verlinkten Problems mit unterschiedlichen MAC der (virtuellen) Netzwerkadapter hatte ich beim Verwenden von VirtualBox unter Windows (7) als Wirtsystem immer wieder Probleme mit dem DHCP-Server für den »host-only«-Adapter.
Mal wurde wie gewünscht per DHCP eine IPv4-Adresse zugewiesen, dann wieder nicht. Unter Linux als Wirtsystem hatte ich nie Probleme.
Nach dem Studium diverser Threads, welche eben diese Problematik im Web ebenfalls beschreiben habe ich den einfachen Weg gewählt: Ich habe dem zweiten Netzwerkadapter im Gastsystem selbst einfach fest eine IP zugeordnet.
Damit war jegliche DHCP-Problematik ausgeschlossen und ich habe nun in jedem Fall sowohl unter Linux wie auch unter Windows aus Wirtsystem die gleiche IP, über welche ich auf das Gastsystem zugreifen kann.
Hier die vollständige /etc/network/interfaces
meines Ubuntu Servers (Gastsystem):
root@farnsworth:~# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
# The VirtualBox host-only network interface
auto eth1
iface eth1 inet static
address 192.168.56.102
netmask 255.255.255.0
network 192.168.56.0
broadcast 192.168.56.255
Wichtig: Keinen Standardgateway für eth1
eingeben. Ansonsten versucht das Gastsystem nicht mehr über NAT, sondern über den angegebenen Gateway die Verbindung ins Internet vorzunehmen.
Die Ausgabe für den zweiten Netzwerkadapter im System fällt dementsprechend aus:
root@farnsworth:~# ifconfig eth1
eth1 Link encap:Ethernet Hardware Adresse 08:00:27:c1:a6:65
inet Adresse:192.168.56.102 Bcast:192.168.56.255 Maske:255.255.255.0
inet6-Adresse: fe80::a00:27ff:fec1:a665/64 Gültigkeitsbereich:Verbindu
Wie man anhand der Ausgabe erkennen kann hat der Adapter eth1
vom VirtualBox-Host mittels DHCP noch eine IPv6-Adresse zugewiesen bekommen. Da ich IPv6 bislang nicht verwende ist dies zwar ganz nett, jedoch spielt es für die Konfiguration des »host-only«-Adapters keine Rolle.
Abschließend nun noch das Beispiel für die Einträge in der /etc/hosts
(Linux) beziehungsweise %SystemRoot%\System32\drivers\etc\hosts
(Windows). Zunächst wie die Einträge unter Linux beim Wirtsystem bei mir aussehen:
amy@turanga:~$ cat /etc/hosts
192.168.243.123 turanga # Added by NetworkManager
127.0.0.1 localhost.localdomain localhost
::1 turanga localhost6.localdomain6 localhost6
127.0.1.1 turanga
192.168.56.102 farnsworth.futurama
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
Unter Windows (7) etwas nüchterner (da mit nur einem aktiven Eintrag versehen):
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
192.168.56.102 farnsworth.futurama
Eingangs habe ich erwähnt, dass ich abgesehen von der eigentlichen Funktion als Mailserver mit integriertem Webmailer (Roundcube[2]) auch noch anderweitig auf das Gastsystem zugreife. Diese Zugriffe dienen primär der Konfiguration beziehungsweise der Wartung.
Ich habe auf dem Ubuntu Server mittels OpenSSH
eine sogenannte SecureSHell
installiert. Darüber kann ich auf sichere Art und Weise dank der verschlüsselten Netzwerkverbindung mit dem Gastsystem eine Verbindung zur Konsole herstellen.
Ist das nicht ein wenig übertrieben? Host-Only und dann auch noch eine SSH? Nun ja, der Sicherheitsgedanke spielte weniger eine Rolle als vielmehr »ich wollte es einfach mal einrichten«.
Völlig paranoid das ich mir selbst nicht mehr trauche bin ich also auch nicht.
Wie sieht so ein Aufruf eigentlich aus? Hier als Beispiel der Versuch mich vom Wirtsystem aus beim Gastsystem einzuloggen. Der Name des Servers »farnsworth.futurama« ist dabei in der Hosts-Datei des Wirtsystems hinterlegt:
amy@turanga:~$ ssh -l root farnsworth.futurama
Warning: Permanently added the RSA host key for IP address '192.168.56.102' to the list
of known hosts.
root@farnsworth.futurama's password:
Permission denied, please try again.
Der Versuch sich direkt als Benutzer root
einzuloggen schlägt fehl, da der Server (Ubuntu 10.10) dies über ssh
nicht direkt erlaubt. Es muss der Weg über einen unprivilegierten Benutzer genommen werden. Im Beispiel heißt dieser Benutzer amy
:
amy@turanga:~$ ssh -l amy farnsworth.futurama
amy@farnsworth.futurama's password:
Linux farnsworth.futurama 2.6.35-24-generic #42-Ubuntu SMP Thu Dec 2 01:41:57 UTC 2010
i686 GNU/Linux Ubuntu 10.10
Welcome to Ubuntu!
* Documentation: https://help.ubuntu.com/
No mail.
Last login: Mon Dec 27 00:14:39 2010
amy@farnsworth:~$ sudo su -
[sudo] password for amy:
root@farnsworth:~#
Schön, aber warum sollte man sich die Mühe machen per ssh
auf den Gast zuzugreifen? Das geht doch direkt über das Fenster welches VirtualBox vom Client ohnehin geöffnet hält?
Die Antwort ist simpel: In das von VirtualBox geöffnete Fenster des aktuell gestarteten Gastsystems kann ich – zumindest unter VirtualBox 4.0 ohne Installation der sogenannten »Guest Additions« – nicht einfach per Maus copy&paste betreiben.
In einem Terminal in welchem ich unter Linux via ssh
oder unter Windows mit PuTTY [3] funktioniert dies jedoch problemlos. Anstatt größere Textblöcke für Konfigurationsdateien abschreiben zu müssen, beispielsweise weil ich sie aus Anleitungen im Web übernehme, kann ich sie bequem und einfach mit einem Mausklick einfügen.
X_FISH