Ziel dieses Praktikumblatts ist es, einen Service
miniwhoami
als IPv6-Service mit eigener IPv6-Adresse zu deployen. Dies geschieht
in zwei Schritt:
miniwhoami
:
Von der Programmierung in den Wirkbetrieb (Aufgabe 1 bis 4).miniwhoami
in IPv6 (Aufgabe 5 bis 8).Ergebnis ist ein Dockerservice miniwhoami
, der
über eine eigene IPv6-Adresse und eine eigene URL angesprochen werden kann.
Bauen Sie Ihren kleinen Webserver miniserver
zu
einem Webservice miniwhoami
aus, der folgende Eigenschaften
hat:
miniwhoami
zeigt den Hostnamen,
die IP-Adressen (IPv4 und IPv6) des Containers und die Anzahl der Zugriffe an.miniwhoami
ändert sich in Abhängigkeit
vom Hostnamen. miniwhoami
der Hostname geändert
hat, also ein anderer Container geantwortet hat.Ergebnis von Aufgabe 1: Ein fertiges, getestetes Programm
miniwhoami
in einer Programmiersprache Ihrer Wahl.
Im nächsten Schritt, d.h. in dieser Aufgabe, soll die Anwendung
miniwhoami
in einer Dockerumgebung laufen. Als Dockerumgebung
verwenden Sie zunächst Ihr lokales Linux-Desktop-System, auf dem
Sie Docker bereits installiert haben.
miniwhoami
einen Dockerfile und erzeugen Sie damit ein mit miniwhoami
getaggtes Dockerimage
. Geben Sie Ihr Dockerfile
und das Docker-Kommando für die Erstellung des Images an?docker run
eine Instanzen
Ihrer Webanwendung miniwhoami
auf Ihrem Linux-Desktop-System.
Verwenden Sie hierzu den Port 50521
. Wie lautet
Ihr docker-run-Kommando?miniwhoami
auf Ihrem Linux-Desktop-System.
Beide Instanzen sollen über ein dediziertes gemeinsames Netz
verbundenn sein. Verwenden Sie für die drei Container die Ports
50522
und 50523
.Ergebnis von Aufgabe 2: Das Programm miniwhoami
läuft als Container in der lokalen Umgebung und ist dort getestet.
In dieser Aufgabe soll die Anwendung miniwhoami
auf Ihren Laborserver serv-ss21
deployed werden. Hierzu
wird das Image zunächst von Ihrem Linux-Desktop-System in eine Docker-Registry
gepushed. Von dieser kann dann das Image bequem mit docker
run
auf jedem Dockerhost installiert (deployed) werden.
miniwhoami
ein für die Docker-Registry getagtes Dockerimage
. Welches docker-Kommando haben Sie hierzu benutzt?miniwhoami
auf
die Registry von https://git.fslab.de
hoch.docker run
eine Instanz
miniwhoami_50531
Ihrer Webanwendung miniwhoami
auf Ihren Laborserver serv-ss21
. Verwenden Sie
hierzu den Ports 50531
. Welches Kommando verwenden
Sie hierzu?miniwhoami_50532
und miniwhoami_50533
Ihrer Webanwendung miniwhoami
auf Ihren Laborserver
serv-ss21
. Verwenden Sie hierzu die Ports
50532
und 50533
.Meine Lösung:
miniwhoami
-Container miniwhoami_50531
,
miniwhoami_50532
und miniwhoami_50533
besitzen jeweils ein IPv4 Interface eth0
. Erstellen
Sie für Ihre drei miniwhoami
-Container eine Liste
mit den Spalten: Containername, IP-Adresse, Netzmaske, Default
Gateway. Besitzt das Interface eth0
auch eine
IPv6-Adresse?docker network ls
eine Liste der Docker-Netze aus. Mit welchen Netzen sind Ihre
Container jeweils verbunden? Welches Kommando verwenden Sie
zur Analyse?miniwhoami
-Container und
testen Sie, in welchen Containern Sie Zugriff nach außen
haben. Interpretieren Sie Ihr Ergebnis.netshoot
in das Netz,
in dem sich der Container miniwhoami_50531
befindet.
Läßt sich der Container über die IP-Adresse und den Servicenamen
anpingen?netshoot
in das Netz,
in dem sich die Container miniwhoami_50532
und
miniwhoami_50533
befinden. Lassen sich die beiden
Container über die IP-Adresse und den Servicename anpingen?
Jeder von Ihnen hat zu Beginn der Lehrveranstaltung einen
öffentlichen IPv6-Adressraum zur eigenen Verwaltung erhalten.
Ich habe beispielsweise zu meiner Verwendung den öffentlichen
IPv6-Adressraum 2001:638:408:200:fb60::/78
. Für
meinen Dockerhost serv-ss21
benutze ich hieraus
bisher nur die IPv6-Adresse 2001:638:408:200:fb60::1
.
Auf meinem Dockerhost serv-ss21
möchte ich nun
Dockerservices mit einer eigenen IPv6-Adresse in dem mir
zugewiesenen Adressraum betreiben.
Hierzu werden wir in Docker IPv6 aktivieren und so konfigurieren, dass Container mit einer eigenen IPv6-Adresse in dem zugewiesenen öffentlichen IPv6-Subnetz betrieben werden können.
/etc/docker/daemon.json
in geeigneter Weise
konfigurieren. In der Variablen
"fixed-cidr-v6"
soll dem Dockerdämon ein geeignetes /80
Subnetz übergeben werden, das er für die Verwaltung von
Docker-Containern verwenden soll . Dieses IPv6-Subnetz
nehmen Sie aus dem Ihnen zugeteilten /78
IPv6-Subnetz . Teilen Sie dazu den Ihnen zugeteilten
Adressraum in vier kleinere /80-
Subnetze. Geben
Sie diese (Ihnen gehörende) Subnetze an. Wählen Sie aus
diesen vier Subnetzen ein Subnetz aus, in dem nicht die Adresse Ihres Servers
liegt. Dieses Subnetz übergeben Sie dem Dockerdämon über die
Variable
"fixed-cidr-v6"
zur Verwaltung. Welcher Bridge ist
das von ihnen gewählte Subnetz zugeordnet?miniwhoami_50551
am Port
50551
Ihres Servers serv-ss21
. Greifen Sie
mit einem Browser über IPv6 auf diesen Container zu. miniwhoami_50551
im Browser angezeigt? Welches Interface besitzt diese
IPv6-Adresse. Wie ist diese Adresse gebildet?miniwhoami_50551
über diese IPv6-Adresse
per ping erreichbar? Welche IPv6-Addressen können per
ping von miniwhoami_50551
aus
erreicht werden?miniwhoami_50551
mit ip -6 r
die Routingtabelle. Wird
das /80
IPv6-Subnetz richtig geroutet?miniwhoami_50551
über die IPv6-Serveradresse erreicht?miniwhoami_50551
über seine
eigene IPv6-Adresse von außen erreichbar
ist?Meine Lösung:
Damit auf Ihre Container über IPv6 zugegriffen werden kann, muss
das IPv6-Interface des Servers serv-ss21
als NDP-Proxy fungieren. Nur so ist die Auflösung der
IPv6-Adresse eines Containers hinter dem IPv6-Interface möglich.
Der Proxy wickelt also das NDP-Protokoll nach außen für die
Container hinter dem IPv6-Interface ab.
sysctl net.ipv6.conf.ens??.proxy_ndp=1
für das
richtige Interface die NDP-Proxy-Funktion ein. Konfigurieren
Sie mit ip -6 neigh add ...
die
IPv6-Adresse für die die NDP-Proxy-Funktion gelten soll. Wie
lautet in Ihrem Fall das Kommando im Detail? Testen Sie die
NDP-Funktionalität, indem Sie ein ping von außen auf die IPv6-Adresse
des miniwhoami_5
0551 Containers machen (siehe
Aufgabe 5b). ndppd
(siehe
GIT)
wird auch über das Ubuntu-Repo bereitgestellt. Installation
mit apt install ndppd
. Ein Vorlage für die
benötigte Konfigurationsdatei /etc/ndppd.conf
haben Sie in der Datei
/usr/share/doc/ndppd/ndppd.conf-dist
. Sie müssen nur
das Interface und die Regeln (rule 1111::
) anpassen. Konkret müssen Sie 1111::
durch Ihr Subnetz ersetzen (genauer: durch das Subnetz
ersetzen, für das Sie die NDP-Funktion wünschen). Wenn Sie
mehr als ein Subnetz mit NDP ausstatten möchten, geben Sie
mehrere Regeln an. Der Autostart von ndppd
war bei mir schon aktiviert; sonst aktivieren Sie ihn über
systemctl
.
ndppd.conf
an und erklären Sie die wichtigsten Elemente daraus.
Richten Sie in dem Ihnen zugewiesenen Adressraum
2001:638:408:200:FA??::/78
ein zusätzliches öffentliches
IPv6-Subnetz my_IPv6
ein. Dieses Subnetz soll
für dedizierte öffentliche IPv6-Server mit statischen
IPv6-Adressen verwendet werden.
Fragen:
/?
sollte für dieses Netz
gewählt werden? Diskutieren Sie verschiedene Alternativen.my_IPv6
?
Wie lautet Ihr Kommando zur Netzgenerierung?
my_IPv6
. Deployen Sie mit docker run
eine Instanz Ihrer Webanwendung miniwhoami
auf Ihren Laborserver serv-ss21
. Welches Kommando verwenden
Sie hierzu?my_IPv6
. Deployen Sie mit Hilfe eines docker-compose Files zwei Instanzen Ihrer Webanwendung miniwhoami
auf Ihren Laborserver serv-ss21
. Geben Sie Ihr
Compose-File an.miniwhoami1
,
miniwhoami2
und miniwhoami3
, die jeweils über eine eigene IPv6-Adresse
erreichbar sind. Konfigurieren Sie Ihre Domain url.my
so,
dass Ihre Services über miniwhoami1.url.my
,
miniwhoami2.url.my
und miniwhoami3.url.my
erreichbar
sind.miniwhoami1
über
die URL miniwhoami1.servmgmt.de
an. Was fällt
Ihnen auf? Wie interpretieren Sie das Ergebnis?Meine Lösung: