Servicemanagement in Netzen - Leischner

Praktikumsblatt 4 - IPv6

Hinweis:

In den nachfolgenden Aufgaben erstellen Sie auf Ihrem Server serv-ws22 Services, die von außen über eine genau bestimmte IPv6-Adresse aus Ihrem IPv6-Subnetz erreichbar sind. Bitte lassen Sie diese Services durchgehend auf Ihrem Server  laufen.

Dass Ihre Services auch wirklich laufen, können Sie mit dem taskchecker (LEA: https://lea.hochschule-bonn-rhein-sieg.de/goto.php?target=webr_1305668&client_id=db_040811 ) überprüfen.

Die laufenden Services sind Teil der Prüfungsvorleistung (H-BRS) bzw. des ULP (TH-Köln).

 

Aufgabe 1 - Remote Deployment von miniwhoami

In Praktikumsblatt 2, Aufgabe 2, haben Sie für Ihr Programm miniwhoami lokal auf Ihrem Linux-Desktop-System ein Image erstellt. Dieses lokale Image soll nun in eine öffentlich zugängliche Docker-Registry gepushed werden. Von dieser aus kann dann das Image bequem mit dem Kommando docker run auf jedem Dockerhost installiert (deployed) werden.

  1. Auf Ihrem Gitlab-Account (https://git.fslab.de) besitzen Sie bereits eine Docker Registry (docker.fslab.de). Machen Sie sich mit der Bedienung dieser Registry vertraut. Testen Sie insbesondere den Zugriff auf diese Registry. (Link hierzu: https://docs.gitlab.com/ee/user/packages/container_registry/ )
  2. Erzeugen Sie für Ihre Webanwendung miniwhoami ein für diese Docker-Registry getagtes Dockerimage . Welches docker-Kommando können Sie hierzu verwenden?
  3. Pushen Sie Ihr Image mit der App miniwhoami auf die Registry von https://git.fslab.de hoch.
  4. Deployen Sie mit docker run einen Container miniwhoami_20411 Ihrer Webanwendung miniwhoami auf Ihren Laborserver serv-ws22. Verwenden Sie hierzu den Port 20411. Welches Kommando verwenden Sie hierzu?
  5. Deployen Sie mit Hilfe eines docker-compose Files zwei Services miniwhoami_20412 und miniwhoami_20413 Ihrer Webanwendung miniwhoami auf Ihren Laborserver serv-ws22. Verwenden Sie hierzu die Ports 20412 und 20413. Beide Container sollen über ein gemeinsames Netz mynetwork miteinander verbunden sein.
  6. Wie beurteilen Sie den Aufwand für das Deployment? Könnte das Deployment noch weiter vereinfacht werden?

Meine Lösung:

Anmerkung: Nachdem Sie IPv6 auf serv-ws22 aktiviert haben (siehe Aufgabe 3), sehen Sie auch die IPv6-Adresse Ihres Containers, wenn er welche hat.

 

Aufgabe 2 - Untersuchung von Netzstrukturen

  1. Ihre drei miniwhoami-Container miniwhoami_20411, miniwhoami_20412 und miniwhoami_20413 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?
  2. Geben Sie mit dem Kommando docker network ls eine Liste der Docker-Netze aus. Mit welchen Netzen sind Ihre Container jeweils verbunden? Welches Kommando verwenden Sie, um dies festzustellen ?
  3. Gehen Sie in Ihre miniwhoami-Container und testen Sie, in welchen Containern Sie Zugriff nach außen haben. Interpretieren Sie Ihr Ergebnis.
  4. Warum können Sie die Container überhaupt mit IPv6 von außen erreichen?
  5. Gehen Sie mit dem Tool netshoot in das Netz, in dem sich der Container miniwhoami_20411 befindet. Läßt sich der Container über die IP-Adresse und den Servicenamen anpingen?
  6. Gehen Sie mit dem Tool netshoot in das Netz mynetwork, in dem sich die Container miniwhoami_20412 und miniwhoami_20413 befinden. Lassen sich die beiden Container über die IP-Adresse und den Servicename anpingen?
  7. Testen Sie mit dig die dockerinterne DNS-Auflösung der Services miniwhoami_20412 und miniwhoami_20413.
    Wie ist Ihr konkretes Vorgehen dabei und was ist das Ergebnis?

 

Docker+IPv6

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:ff00::/78 . Für meinen Dockerhost serv-ws22 benutze ich aus diesem Adressraum bisher nur die IPv6-Adresse 2001:638:408:200:ff00::1. Auf meinem Dockerhost serv-ws22 möchte ich nun Dockerservices mit eigenen IPv6-Adressen betreiben.

Hierzu werden wir nun in Docker IPv6 aktivieren und so konfigurieren, dass Container mit eigenen IPv6-Adressen betrieben werden können.

 

Aufgabe 3 - Docker IPv6-Aktivierung

  1. Aktivieren Sie auf Ihrem Server für Ihre Dockerinstallation IPv6, indem Sie die Datei /etc/docker/daemon.json erstellen und 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 explizit in der Lösung dieser Aufgabe 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?
  2. Greifen Sie mit einem Browser über IPv6 auf Ihren Container miniwhoami_20411 zu.
    Fragen:
    • Welche IPv6-Adresse wird Ihnen beim Aufruf von miniwhoami_20411 im Browser angezeigt? Welches Interface besitzt diese IPv6-Adresse. Wie ist diese Adresse gebildet?
    • Von wo aus ist der Container miniwhoami_20411 über diese IPv6-Adresse per ping erreichbar? Welche IPv6-Addressen können per ping von miniwhoami_20411 aus erreicht werden?
    • Überprüfen Sie im Container miniwhoami_20411 mit ip -6 r die Routingtabelle. Wird das /80 IPv6-Subnetz richtig geroutet? Welches Routing-Problem ergibt sich, analyseeren Sie die Situation?
    • Warum wird der Container miniwhoami_20411 über die IPv6-Serveradresse (trotzdem) erreicht?
    • Welche Voraussetzung müssen gegeben sein, damit der Container miniwhoami_20411 über seine eigene IPv6-Adresse von außen erreichbar ist?

 

Aufgabe 4 - Docker IPv6-NDP

Damit auf Ihre Container über IPv6 zugegriffen werden kann, muss das IPv6-Interface des Servers serv-ws22 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.

  1. Manuelle Konfiguration der NDP-Funktion:
    Schalten Sie zunächst mit 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_20421 Containers machen (siehe Aufgabe 5b).
  2. Installation eines NDP-Proxies:
    Der NDP Proxy Daemon 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.
  3. Geben Sie die von Ihnen verwendete Konfigurationsdatei ndppd.conf an und erklären Sie die wichtigsten Elemente daraus.

 

Aufgabe 5 - Öffentliches IPv6-Subnetz

In dem Ihnen zugewiesenen Adressraum 2001:638:408:200:ff??::/78 soll ein öffentliches IPv6-Docker-Subnetz my_ipv6 eingerichtet. Dieses Subnetz wird für dedizierte öffentliche IPv6-Server mit statischen IPv6-Adressen verwendet.

Der Adressraum dieses IPv6-Subnetzes my_ipv6 soll konkret wie folgt festgelegt werden: 2001:638:408:200:ff??:cafe::/96. (?? = möglichst niedrige Adresse.)

Beispiel: Mein konkreter Adressraum für das IPv6-Subnetz my_ipv6 ist: 2001:638:408:200:ff00:cafe::/96 .

  1. Ist die Größe dieses Subnetzes ausreichend? Begründen Sie Ihre Antwort.
  2. Richten Sie Ihr IPv6-Subnetz my_ipv6 auf Ihrem Server serv-ws22 ein. Wie lautet das Kommando zur Netzgenerierung?
  3. Passen Sie die Konfigurationsdatei ndppd.conf so an, dass der NDP Proxy Daemon ndppd auch Adressen aus dem IPv6-Subnetz my_ipv6 auflöst.

 

Aufgabe 6 - Services mit öffentlicher IPv6-Adresse

In Ihrem  IPv6-Subnetz my_ipv6 besitzen Sie folgende drei globalen IPv6-Adressen:

  • ipv6_1:  2001:638:408:200:ff??:cafe::1111/96
  • ipv6_2: 2001:638:408:200:ff??:cafe::2222/96
  • ipv6_3: 2001:638:408:200:ff??:cafe::3333/96

Die Zeichen ?? stehen für die beiden Hex-Zahlen des Ihnen zugeteilten öffentlichen IPv6-Adressraum 2001:638:408:200:ff??::/78.

  1. Deployen Sie mit docker run Ihre Webanwendung miniwhoami als Container mit der globalen IP-Adresse ipv6_1 auf Ihren Laborserver serv-ws22. Welches Kommando verwenden Sie hierzu?
  2. Deployen Sie mit Hilfe eines docker-compose Files zwei weitere Instanzen Ihrer Webanwendung miniwhoami mit den globalen IP-Adresse ipv6_2 und ipv6_3  auf Ihren Laborserver serv-ws22. Geben Sie Ihren Compose-File an.
  3. Sie haben jetzt drei Services miniwhoami1, miniwhoami2 und miniwhoami3 deployed, die jeweils über eine eigene IPv6-Adresse erreichbar sind. Konfigurieren Sie Ihre Domain url.my in Cloudflare so, dass Ihre Services über miniwhoami1.yourDomain.xyminiwhoami2.yourDomain.xy und  miniwhoami3.yourDomain.xy erreichbar sind.
  4. Pingen Sie meinen Service miniwhoami1 über die URL miniwhoami1.servmgmt.de an. Was fällt Ihnen auf? Wie interpretieren Sie das Ergebnis?

Meine Lösung:

 

Aufgabe 7 - Lokales IPv6-Subnetz

  1. Erzeugen Sie auf Ihrem Dockerhost serv-ws22 ein lokales IPv6-Netz loc_ipv6 mit dem Adressraum fd00:dead:beef::/48 . Welchen Befehl verwenden Sie hierzu? Im Netz loc_ipv6 werden unsere lokalen IPv6-Services laufen.
  2. Erläutern Sie die Adresse fd00:dead:beef::/48 gemäß RFC4193.
  3. Gehen Sie mit dem Tool netshoot in das Netz loc_ipv6. Welche IP-Adressen besitzt das Tool netshoot im Netz loc_ipv6 und welche Default-Routen sind für das Netz loc_ipv6 eingetragen?
  4. Untersuchen Sie mit ping, welche Verbindungen auf Ihrem Dockerhost serv-ws22 zwischen Netzen und Containern mit IPv4 und IPv6 möglich sind.

 

 

 

 

 

Impressum | Datenschutz | leischner.inf.h-brs.de, last modification: 10.10.2022-18.00