http://ovm-kassel.de | Lernjob | |
---|---|
Lernjob IT-BS-VM-LJ-3.2 |
|
Code |
IT-BS-VM-LJ-3.2 |
Autor |
André Bauer |
Datum |
22. Mai 2018 |
Links |
|
Verwandte Literatur |
|
Lizenz |
|
Netzwerke mit Virtualbox
Wie können virtuelle Netzwerke zwischen Virtuellen Maschinen (VMs) aufgebaut und mithilfe von Shell-Befehlen getestet werden?
Virtualbox bietet sechs verschiedene Modi an, wie ein Netzwerkadapter verbunden werden kann, die bis auf den sechsten im Folgenden vorgestellt und beispielhaft verwendet werden:
-
NAT
-
Internes Netzwerk
-
NAT-Netzwerk
-
Netzwerkbrücke
-
Host-only-Adapter
-
Nicht angeschlossen
Im Fachgespräch wird von Ihnen erwartet, dass Sie die Konfiguration der verschiedenen Netzwerk-Modi und den Einsatz der Test-Werkzeuge auch vorführen können. |
1. NAT mit Port-Weiterleitung
Bei der Einstellung NAT erhält der Adapter des Gasts per NAT (NAT steht für Network Address Translation) Zugriff auf das Netzwerk, an das der Host angeschlossen ist, der Gast kann aber umgekehrt von außen oder vom Hostsystem nicht erreicht werden.
In den VM-Einstellungen richtet man unter Netzwerk bei einem Adapter mit der Einstellung NAT unter „Erweitert“ eine Portweiterleitung ein. Zum Beispiel eine Weiterleitung des Host-Ports 8080 auf den Gast-Port 8000, womit der Gast auf diesem Port erreichbar wird.
Mit Ruby kann man ohne vorherige Konfiguration einen Webserver (WEBrick-HTTP-Server) in einer Virtuelle Maschine (VM) betreiben. Falls Ruby noch nicht installiert sein sollte, kann dies unter debian-basierten Systemen wie Ubuntu mit den folgenden beiden Befehlen eingerichtet werden:
$ sudo apt update
$ sudo apt install ruby
Nun kann ein Verzeichnis srv
mit einer Datei index.html
angelegt
werden und mit Ruby ein Webserver gestartet werden.
$ sudo hostname saturn (1)
$ mkdir srv
$ echo "Hello from `hostname`." > srv/index.html (2)
$ ruby -run -e httpd srv -p 8000 (3)
1 | Setzt den Hostnamen auf saturn . |
2 | Erstellt eine einfache Textdatei im Ordner srv . |
3 | Startet WEBrick auf Port 8000 mit srv als Wurzelverzeichnis
(Documentroot). |
Die Portweiterleitung kann mit curl
auf dem Hostsystem getestet werden. Das Programm ist für
alle gängigen Betriebssysteme verfügbar.
In dem Buch „Everything curl“ ist
eine umfassende Dokumentation des Befehls
curl
enthalten.
Unter debian-basierten Systemen kann curl mit
$ sudo apt update
$ sudo apt install curl
installiert werden.
$ curl localhost:8080
Hello from saturn.
Eine zweite Möglichkeit ist, die Adresse http://localhost:8080 in einem Browser auf dem Hostsystem aufzurufen.
Die Portweiterleitung ist aber nicht nur lokal über die
Loopback-Schnittstelle gültig, sondern
auch über die Netzwerkschnittstelle des Hosts, die mit dem
pysischen Netzwerkadapter verknüpft ist.
Diese kann mit ipconfig
(Windows), ifconfig
(Max OS X) oder
ip -4 addr
(Linux) ermittelt werden.
$ ip -4 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 192.168.178.21/24 brd 192.168.178.255 scope global enp0s25
valid_lft forever preferred_lft forever
$ curl 192.168.178.21:8080
Hello from saturn.
$ curl 192.168.178.21:8080
Hello from saturn.
Aufgabe 1
2. Internes Netzwerk
Ein internes Netzwerk ist ein virtuelles Netzwerk, an dem ausschließlich Virtuelle Maschinen angebunden werden können. Im VirtualBox Manager wird dazu zwei oder mehreren ausgeschalteten VMs ein zusätzlicher Netzwerk-Adapter mit demselben internen Netzwerknamen hinzugefügt. Im Gegensatz zu der Standardoption NAT erhalten die Schnittstellen zunächst keine IP-Adressen, so dass diese entweder manuell vergeben werden müssen (siehe unten) oder ein DHCP-Server für dieses interne Netz eingerichtet werden muss. Insofern eignet sich dieser Modus besonders, um z. B. die Einrichtung eines DHCP-Servers oder eines Domänencontrollers in einem virtuellen Netzwerk auszuprobieren und zu testen.
Im folgenden werden zwei Linux-VMs benötigt, dazu kann z. B. eine bestehende, ausgeschaltete VM im Virtualbox Manager geklont werden.
Die Systeme haben nun eine zusätzliche Netzwerkschnittstelle,
der noch keine IPv4-Adresse zugeordnet wurde.
Um Informationen über Netzwerkschnittstellen zu erhalten und diese
zu konfigurieren, gibt es unter unix-artigen Systeme u. a. den Befehl
ip
.
Unter Windows gibt es den Befehl
ipconfig
, der eine
ähnliche Funktionalität hat.
Im Beispiel hat die neue Schnittstelle den Namen enp0s8
.
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo (1)
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:07:74:c5 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3 (2)
valid_lft 86186sec preferred_lft 86186sec
inet6 fe80::3bbb:2d8e:1e5:dea6/64 scope link
valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:f3:87:36 brd ff:ff:ff:ff:ff:ff (3)
1 | Die Loopback-Schnittstelle erhält per Konvention die IPv4-Adresse
127.0.0.1/8 sowie die IPv6-Adresse ::1/128 . |
2 | Der Schnittstelle enp0s3 ist die IP-Adresse 10.0.2.15 zugeordnet. |
3 | Der Schnittstelle enp0s8 ist bislang keine IP-Adresse zugeordnet. |
Nun wird beiden Gästen den Schnittstellen, die am internen
Netzwerk angeschlossen sind, jeweils mit ip
eine
IP-Adresse zugeordnet. Das verwendete Netzwerk darf noch nicht
vergeben sein. Da die Schnittstelle enp0s3
per NAT bereits mit dem
Netzwerk 10.0.2.0/24
verbunden ist, wird mit der IP-Adresse 10.0.3.10/24
ein Netzwerk gewählt, dass noch frei ist.
$ sudo ip addr add 10.0.3.10/24 dev enp0s8 valid_lft forever (1)
$ ip addr show enp0s8 (2)
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:f3:87:36 brd ff:ff:ff:ff:ff:ff
inet 10.0.3.10/24 scope global enp0s8 (3)
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fef3:8736/64 scope link
valid_lft forever preferred_lft forever
$ ip route (4)
default via 10.0.2.2 dev enp0s3 proto static metric 100
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100
10.0.3.0/24 dev enp0s8 proto kernel scope link src 10.0.3.10 (5)
169.254.0.0/16 dev enp0s3 scope link metric 1000
1 | Der Schnittstelle enp0s8 wird die IP-Adresse 10.0.3.10 in
dem Subnetz 10.0.3.0/24 (CIDR-Notation) zugeordnet.
Die Gültigkeit der IP-Adresse wird mit valid_lft forever als unbegrenzt
gesetzt. Ohne diese Angabe wird die IP-Adresse nach einiger Zeit
automatisch wieder verworfen, was in diesem Zusammenhang ein
unerwünschtes Systemverhalten wäre. Falls nötig, kann
mit sudo ip addr del 10.0.3.10/24 dev enp0s8 die Zuordnung der IP-Adresse
wieder entfernt werden. |
2 | Durch Angabe des Schnittstellennamens gibt ip addr nur die Informationen
für enp0s8 aus. |
3 | In der Ausgabe kann man nachvollziehen, dass die Netzwerkschnittstelle
enp0s8 nun die IP-Adresse 10.0.3.10/24 erhalten hat. |
4 | Der Befehl ip route gibt die
Routingtabelle
des Systems aus. |
5 | Diese Zeile legt fest, dass alle Ziele aus dem Subnetz 10.0.3.0/24
über die Schnittstelle enp0s8 weitergeleitet werden. |
Die zweite VM erhält die IP-Adresse 10.0.3.11/24
.
Mit dem Befehl ping
kann schließlich
überprüft werden, ob die erste VM unter der IP-Adresse 10.0.3.10/24
erreichbar ist.
$ sudo ip addr add 10.0.3.11/24 dev enp0s8 valid_lft forever (1)
$ ping 10.0.3.10 (2)
PING 10.0.3.10 (10.0.3.10) 56(84) bytes of data.
64 bytes from 10.0.3.10: icmp_seq=1 ttl=64 time=0.972 ms
64 bytes from 10.0.3.10: icmp_seq=2 ttl=64 time=0.649 ms
64 bytes from 10.0.3.10: icmp_seq=3 ttl=64 time=0.584 ms
64 bytes from 10.0.3.10: icmp_seq=4 ttl=64 time=0.630 ms
^C (3)
--- 10.0.3.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3052ms
rtt min/avg/max/mdev = 0.584/0.708/0.972/0.157 ms
1 | Das zweite System erhält mit 10.0.3.11/24 auch eine IP-Adresse aus dem
Subnetz 10.0.3.0/24 . |
2 | Mit Ping wird auf der Ebene des TCP-Protokolls, dem Internet Control Message Protocol (ICMP), geprüft, ob das System mit der angegebenen IP-Adresse erreichbar ist. |
3 | Mit der Tastenkombination Strg+C wird ping abgebrochen. |
Aufgabe 2
3. NAT-Netzwerk
Zunächst wird im VirtualBox Manager unter Datei → Einstellungen → Netzwerk
ein NAT-Netzwerk eingerichtet, z. B. mit dem Subnetz 10.0.5.0/24
und DHCP. Bei den VMs muss nun jeweils an einem Netzwerk-Adapter die
Einstellung NAT-Netzwerk gesetzt werden.
Aufgrund der DHCP-Unterstützung werden
den Schnittstellen automatisch IP-Adressen zugeordnet.
Die angeschlossenen Gäste können über das NAT-Netzwerk sowohl untereinander
kommunizieren als auch Systeme außerhalb des
Netzwerkes erreichen, die über die Netzwerkadapter des Hosts-Systems erreichbar
sind. Die Gäste sind aber umgekehrt von außen oder dem Hostsystem
ohne Port-Weiterleitung nicht erreichbar.
$ ip -4 addr (1)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
valid_lft 86116sec preferred_lft 86116sec
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 10.0.5.4/24 brd 10.0.5.255 scope global dynamic enp0s8 (2)
valid_lft 916sec preferred_lft 916sec
1 | Mit der Option -4 zeigt ip addr nur IPv4-Adressen an. |
2 | Die am NAT-Netzwerk angeschlossene Schnittstelle enp0s8 hat per
DHCP die IP-Adresse 10.0.5.4/24 erhalten. |
$ ip -4 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
valid_lft 85808sec preferred_lft 85808sec
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 10.0.5.5/24 brd 10.0.5.255 scope global dynamic enp0s8 (1)
valid_lft 1196sec preferred_lft 1196sec
$ ping 10.0.5.4 (2)
PING 10.0.5.4 (10.0.5.4) 56(84) bytes of data.
64 bytes from 10.0.5.4: icmp_seq=1 ttl=64 time=0.272 ms (3)
64 bytes from 10.0.5.4: icmp_seq=2 ttl=64 time=0.322 ms
64 bytes from 10.0.5.4: icmp_seq=3 ttl=64 time=0.647 ms
^C
--- 10.0.5.4 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2044ms
rtt min/avg/max/mdev = 0.272/0.413/0.647/0.167 ms
1 | Die Schnittstelle enp0s8 hat per DHCP die IP-Adresse 10.0.5.5/24
erhalten und befindet sich im gleichen Subnetz wie enp0s8 von Gast 1. |
2 | Gast 1 erhält ICMP-Anfragen mit ping. |
3 | Antworten von Gast 1 auf ICMP-Anfragen werden fotlaufend ausgegeben. |
Aufgabe 3
4. Netzwerkbrücke
Bei der Netzwerkbrücke erhält der Gast direkten Zugriff auf das Host-Netzwerk, so als wäre er dort direkt angeschlossen. Falls auf dem Host-Netzwerk ein DHCP-Server die IP-Adressen verwaltet, so erhält der Gast auch eine eigenständige IP-Adresse, die vom Hostsystem abweicht. Aufgrund der direkten Anbindung an das Host-Netzwerk ist die Netzwerkbrücke für einige Experimente, insbesondere mit DHCP, nicht geeignet.
Aufgabe 4
5. Host-only-Adapter
Ähnlich wie beim internen Netzwerk muss im Virtualbox Manager unter „Globale Tools“ zunächst ein Host-only-Netzwerk (optional mit DHCP-Server) erstellt werden. Dann kann in den Einstellungen der abgeschalteten VMs jeweils ein Adapter als Host-only-Adapter konfiguriert werden.
Auch das Hostsystem erhält automatisch eine virtuelle Netzwerk-Schnittstelle und, falls der DHCP-Server für das Host-only-Netzwerk aktiviert ist, auch automatisch eine IP-Adresse für diese Schnittstelle.
Die angeschlossenen Gäste und das Hostsystem haben nun ein gemeinsames internes Netzwerk, das mit anderen Netzen nicht verbunden ist. Dieser Modus eignet sich wie auch das interne Netzwerk oder das NAT-Netzwerk sehr gut für Experimente. Das Host-only-Netzwerk ermöglicht es, dass man auch das Hostsystem ohne Port-Weiterleitung zum Testen und zur Diagnose einsetzen kann.