Archiv der Kategorie: DevOps Tutorials

UNBLOG Tutorials for DevOps & Scripting Deploying and Technical contribution for Professionals.

Virtuelle Maschinen mit Vagrant

Vagrant, eine freie Anwendung in Ruby zum Erstellen und Verwalten von virtuellen Maschinen

Virtuelle Maschinen mit Vagrant

DevOps-Teams sehen sich zunehmend der Herausforderung gestellt, den Kunden neue Funktionen in kurzer Zeit zur Verfügung zu stellen, dabei stellen Cloud-Anbieter Lösungen durch skalierbare Plattformen mit Befehlszeilen- und API-Integrationen zur Verfügung. Mit nativen Tools können DevOps-Teams individuell angepasste Docker und Vagrant Lösungen für jeden Cloud-Provider bereitstellen.

Was ist Vagrant ?

Das Open-Source Projekt „Vagrant“ ist für den Aufbau kompletter Entwicklungsumgebungen konzipiert. Mit einem benutzerfreundlichen Workflow und dem Fokus auf Automatisierung. Zum Erstellen und Verwalten von Umgebungen mit virtuellen Maschinen (VM), und dies in einem einzigen Arbeitsablauf.

Vagrant bietet ein einheitliches Konfigurationsformat, mit einer Befehlszeile und einem gemeinsamen Provision-Provider, bereitgestellt für virtuelle Maschinen auf Hypervisoren oder als Cloud-VMs, für die Installation und Konfigurationen von Software.

Vagrant und Docker verfolgen dieselben Ziele, nämlich wiederholbare Umgebungen zu schaffen, das tun sie auf unterschiedliche, aber sich ergänzende Weise. In diesem Tutorial erfährst du, wie das quelloffene Werkzeug Vagrant zum fernsteuern bei der Virtualisierung eingesetzt werden kann.

Was ist Docker ?

Docker ermöglicht Software und unterstützende Konfigurationen in Images zu verpacken, die über mehrere Plattformen hinweg konsistent ausgeführt werden können. DevOps-Teams können mit Docker darauf setzen, dass die Software auf einem lokalen Arbeitsplatzrechner genauso läuft wie auf einer verwalteten Cloud-Plattform.

Die Kubernetes Plattform die auf Docker basiert, ermöglicht die Orchestrierung von Containern im umfangreichen Maßstab. Darüber hinaus unterstützten Cloud-Plattformen die Möglichkeit, Docker-Container in seinen Platform-as-a-Service (PaaS) zu betreiben.

Vagrant Installation

Vagrant ist in den Standard-Repos der meisten Linux-Distributionen enthalten. Sollte das Paket einmal nicht im Repository sein, oder es steht eine neuere Version im Vordergrund, so findet man die Binary’s auf der offiziellen Webseite mit den Links zum Herunterladen der Pakete für macOS, Windows und Linux.

Vagrant für Linux

Unter Debian und Ubuntu wird Vagrant wie folgt bereitgestellt.

$ wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
$ sudo apt update && sudo apt install vagrant

quote  eine aktuelle Version von Ruby kann erforderlich sein.

Vagrant anwenden

Vagrant speichert und liest sämtliche Informationen für die zu erstellenden VMs aus der Konfigurationsdatei „Vagrantfile“. Dazu legt man erst ein Verzeichnis an, in diesem ein neues Vagrant Projekt erstellt wird.

Der erste Befehl vagrant init erstellt ein Vagrantfile im aktuellen Ordner, welche dann den eigenen Anforderungen entsprechend bearbeitet werden kann.

$ vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

Als Standard provider wird VirtualBox verwendet. In der Konfigurationsdatei bei config.vm.provider kann angeben werden, welcher provider angewendet werden soll um eine VM oder ein Container zu erstellen.

Vagrant mit docker

config.vm.provider "docker" do |d|
    d.image = "helloworld"
end

Hier wird docker als provider verwendet und die Variable d für den Container wird festgelegt mit welcher weitere Einstellungen vorgenommen werden können (zB. docker-Images).

Vagrant mit Hyper-V

Nutzt man in Windows Hyper-V ist als provider „hyperv“ zu wählen.

config.vm.provider "hyperv" do |h|
  h.vm_integration_services = {
    guest_service_interface: true,
    CustomVMSRV: true
  }
end

Vagrant Box Installation

Anstatt eine virtuelle Maschine von Grund auf zu erstellen, verwendet Vagrant ein Basis-Image, um eine virtuelle Maschine schnell zu klonen. Diese Basisbilder werden in Vagrant als „Box“ bezeichnet. Die Angabe der für eine Vagrant-Umgebung zu verwendenden Box ist immer der erste Schritt nach dem Erstellen einer neuen Vagrant-Datei. Hier als Hostsystem wird Windows mit Hyper-V eingesetzt.

vagrant box add hashicorp/bionic64

Vagrant fordert uns nun auf ein provider zu wählen.

==> box: Loading metadata for box 'hashicorp/bionic64'
    box: URL: https://vagrantcloud.com/hashicorp/bionic64
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) virtualbox
3) vmware_desktop

Als provider wähle 1) für Hyper-V was in Windows aktiviert sein muss.

Vagrant.configure("2") do |config|
  config.vm.box = "generic/debian12"
  config.vm.box_url = "https://vagrantcloud.com/hashicorp/bionic64"
end

Die Konfigurationsdatei Vagrantfile

Nun ein Command Prompt als Administrator öffnen, in Windows 11 ist es Windows Terminal, und den folgenden Befehl ausführen.

vagrant up --provider=hyperv

quote  Möglicherweise erscheint zusätzlich zur Bestätigung ein Hinweis.

Bringing machine 'default' up with 'hyperv' provider...
==> default: Verifying Hyper-V is enabled...
The Hyper-V cmdlets for PowerShell are not available! Vagrant
requires these to control Hyper-V. Please enable them in the
"Windows Features" control panel and try again.

Sollte Hyper-V noch nicht vorliegen, ist die Hyper-V-Plattform und Hyper-V-Verwaltungstools für PowerShell wie folgt bereitzustellen.

Die Windows-Features werden aktiviert, mit Start Windows + R den Befehlcontrol appwiz.cpl,,2ausführen.

Windows Features Hyper-V-Plattform

Das Cmdlet kann auch aus der PowerShell aktiviert werden.

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

quote Die PowerShell als Administrator starten. Nach der aktivierung muss Windows neu gestartet werden.

Virtuelle Maschine Starten

Im einfachsten Fall ist das bereits alles, was für das Erzeugen und Starten einer virtuellen Maschine erforderlich ist. Nun folgt der Aufruf in der Konsole mitvagrant up

$ vagrant up
Bringing machine 'default' up with 'hyperv' provider...
==> default: Verifying Hyper-V is enabled...
==> default: Verifying Hyper-V is accessible...
==> default: Importing a Hyper-V instance
    default: Creating and registering the VM...
    default: Successfully imported VM
    default: Configuring the VM...
    default: Setting VM Enhanced session transport type to disabled/default (VMBus)
==> default: Starting the machine...
==> default: Waiting for the machine to report its IP address...
    default: Timeout: 120 seconds
    default: IP: 172.19.29.83
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 172.19.29.83:22
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!

Um zu überprüfen, ob die VM wirklich läuft, genügt das Kommando.

vagrant status

Es wird als Status wie erwartet running gezeigt und gibt zudem einige Hinweise aus. Wie man die virtuelle Maschine wieder beenden kann, zeigt der Befehl wie folgt.

vagrant halt

Amelden

Für den Zugriff auf die virtuelle Maschine leitet Vagrant den Port 22 auf den Port 2222 des Hostsystems weiter, sodass sich eine SSH-Verbindung herstellen lässt. Benutzernamen und Port müssen nicht stets von Hand eingeben werden, es steht zudem ein Kommando zur Verfügung, das die Anmeldung automatisch vornimmt.

vagrant ssh

Die Verbindung zur virtuellen Maschine ist hergestellt, die VM kann ohne Einschränkungen verwendet und für weitere Anforderungen konfiguriert werden. Das Verzeichnis des Hostsystems, das die Datei „Vagrantfile“ enthält, bindet Vagrant in der virtuellen Maschine als Pfad /vagrant ein. Damit ist ein einfacher Austausch von Dateien zwischen Host und Gast möglich.

Vagrant stellt zahlreiche Kommands bereit. Ein Blick in die Vagrant Help Ausgabe mit vielen Kommands lohnt sich.

vagrant -h

Zu den Allgemeinen Kommands stehen weitere Unterbefehle zur Verfügung, die jedoch entweder komplexer sind oder nicht häufig verwendet werden. Um alle Unterbefehle in der Konsole auszugeben, führe den Befehlvagrant list-commandsaus.

Vagrant Box

Auf der Webseite von Vagrant wird eine Auswahl von Box Abbilder im Katalog zum direkten Download zur Verfügung gestellt. Alternativ gilt die darauf spezialisierte Webseite Vagrantbox.es als weitere Anlaufstelle.

Eine Vagrant Box auf Debian 12 wird wie folgt bereitgestellt.

vagrant init generic/debian12
vagrant up

Die Vagrant Box auf Rocky Linux 9 erhält man mit diesen zwei Zeilen.

vagrant init generic/rocky9
vagrant up

Hyper-V Manager

Bei der nutzung von Hyper-V als provider für Vagrant, können die erstellen VM im Hyper-V Manager verwaltet werden.

Hyper-V Manager, Virtuelle Maschinen mit Vagrant

Netzwerkprobleme beheben mit tcpdump in Windows

TcpDump ist ein Tool um Netzwerkprobleme zu beheben, wie tcpdump ist WinDump für Windows. Es ist ein freies Programm für die Befehlszeile, zur Auswertung und Überwachung von Netzwerkverkehr. Es hilft bei der Analyse und als Unterstützung für die Fehlerbehebung sowie als Sicherheitstool.

TcpDump ist ein leistungsstarkes und vielseitiges Werkzeug, das viele Optionen und Filter enthält und in einer Vielzahl von Fällen ihre Anwendung findet. Als Befehlszeilentool eignet sich die Anwendung auf Server oder Geräte die ohne Grafische Benutzeroberfläche (GUI) auskommen. Die Netzwerk Pakete können aufgezeichnet werden, um sie später analysieren zu können.

Netzwerkprobleme mit WinDump in Windows beheben, wie mit tcpdump

TcpDump ist als BSD-Lizenz verfügbar und ist bei den meisten unixoiden Betriebssysteme wie FreeBSD und Linux bereits im Grundsystem vorinstalliert. Für Windows gibt es anstelle von TcpDump die Portierung mit dem Namen WinDump die ebenfalls frei verfügbar ist.

In diesem Tutorial wird die Installation und Anwendung von WinDump unter Windows 11 gezeigt.

INSTALLATION

Als Systemvoraussetzung wird WinPcap benötigt, die als Freeware verfügbare Programmbibliothek besteht aus einem Treiber, der Zugriff auf die Netzwerkkarte ermöglicht. Die WinPcap Programmbibliothek basiert auf der von Unix/Linux her bekannten „libpcap“ Bibliothek, bei dieser die pcap-Schnittstelle implementiert wurde. Die Netzwerk Pakete werden durch die WinPcap-Module unter Umgehung des Protokollstacks abgefangen und weitergeleitet.

WinPcap installieren

Zuerst wird der Treiber WinPcap hier heruntergeladen und installiert.

WinPcap Installation, Netzwerkprobleme beheben tcpdump Windows

Der WinPcap Setup Assistent führt mit drei Klicks durch die Installation, dabei kann man die vorgeschlagenen Einstellungen übernehmen. Nach der Installation von WinPcap muss der Rechner nicht neu gestartet werden. Die Netzwerkschnittstelle wird durch WinPcap in den Promiscuous-Modus versetzt, wodurch alle Pakete auf dieser Schnittstelle „mitgehört“ werden, und an den Netzwerkstack weitergeleitet werden, womit die Auswertung mit WinDump ermöglicht wird.

WinDump installieren

Nachdem WinPcap installiert ist, kann WinDump hier heruntergeladen werden. WinDump ist ein Kommandozeilentool dieses nicht installiert werden muss, die Datei WinDump.exe kann beispielsweise einfach unter Programme in ein neu erstellten Ordner WinDump kopiert werden, oder man kopiert WinDump.exe direkt in die SystemRoot (C:\Windows), dabei kann hierbei auf den Suchpfad Eintrag verzichtet werden.

WinDump kann nun ausgeführt werden, dazu öffnet man eine Eingabeaufforderung als Administrator, mit drücken der Windows Taste auf der Tastatur und Klick auf Als Administrator ausführen.

Eingabeaufforderung als Administrator ausfuehren

Netzwerk Interface finden

Mit der Option -D zeigt WinDump eine Liste mit den auf dem System verfügbaren Netzwerkschnittstellen, auf diesen WinDump Pakete abhören kann. Windows vergibt jeder dieser Netzwerkschnittstelle eine GUID.

WinDump -D Netzwerkschnittstellen anzeigen

Welche GUID hat nun welche Netzwerkschnittstelle? bei meinem Laptop möchte ich mit WinDump die Pakete vom WLAN-Adapter erfassen.

Hier hilft das Befehlszeilentool netsh dieses die Information liefert.

  Um Pakete vom LAN Ethernet Anschluss über Kabel erfassen zu können, muss der DOT3SVC-Dienst ausgeführt werden, ist der Dienst nicht gestartet, kann dieser mit folgendem Befehl gestartet werden.

net start DOT3SVC

  Für WLAN muss der WLANSVC-Dienst gestartet sein.

net start WLANSVC

Somit ist die Voraussetzung geschaffen damit netsh uns die gewünschte Information liefert, mit folgendem Befehl für das LAN Ethernet Interface in der Eingabeaufforderung.

netsh lan show interfaces

Hier an meinem Laptop nutze ich die WLAN Netzwerkschnittstelle.

netsh wlan show interfaces

Der Befehl zeigt uns die GUID der WLAN Netzwerkschnittstelle.

netsh wlan show interfaces

Die GUID meines WLAN-Interface ist hier rot eingerahmt. Zur Erinnerung, mit dem Befehl WinDump -D erschient das Interface hier im Beispiel in der Zeile 4.

WinDump -D Netzwerkschnittstellen 4

WinDump soll also bei meinem Laptop auf Interface 4 mithören (WinDump -D). Mit der Option -i gefolgt von \Device\NPF_{GUID}.

Netzwerkprobleme beheben mit tcpdump in Windows
WinDump.exe -i "\Device\NPF_{B13697A3-3CD0-4D84-BA5D-179F708500D3}"

TCP flags und filters

So weit so gut, die Pakete werden angezeigt, dann kommt jetzt der Moment wo Flags und Filter zur Anwendung kommen, damit erhöhen sich die Chancen das überhaupt ein Fehler gefunden werden kann.

TCP Flags Netzwerkprobleme beheben mit tcpdump in Windows

TCP-Flags werden innerhalb der TCP-Paketübertragung verwendet, um im Kontext des Three-Way-Handshake einen Verbindungsstatus bekanntzugeben oder zusätzliche Informationen bereitzustellen. Sie können zur Fehlerbehebung oder zur Steuerung der Verbindung verwendet werden. Die TCP-Flags die am häufigsten verwendet werden sind SYN, ACK und FIN.

Pakete analysieren und anzeigen die eines der TCP-Flags enthalten, wie hier das TCP Flag ACK.

windump -i "\Device\NPF_{B13697A3-3CD0-4D84-BA5D-179F708500D3}" "tcp[13] & 16 != 0"

Ein TCP-Flag entspricht einer Größe von 1 Bit. Die folgende Liste beschreibt jedes Flag ausführlicher.

SYN = "tcp[13] & 2 != 0"
FIN = "tcp[13] & 1 != 0"
URG = "tcp[13] & 32 != 0"
PSH = "tcp[13] & 8 != 0"
RST = "tcp[13] & 4 != 0"

Netzwerkprobleme in Windows mit tcpdump beheben

In folgendem Beispiel sollen nur ausgehende Verbindungen erfasst werden. Um TCP-Pakete zu erfassen, die auf unserem Rechner initiiert werden, weisen wir WinDump an, nur solche Pakete auszugeben, bei denen das SYN-Flag gesetzt ist. Wir müssen dabei aber auch Pakete ausschließen, bei denen das ACK-Flag gesetzt ist, da wir sonst auch die Antworten des externen Hosts erhalten.

windump -i "\Device\NPF_{B13697A3-3CD0-4D84-BA5D-179F708500D3}" "tcp[tcpflags] & (tcp-syn) != 0" and "tcp[tcpflags] & (tcp-ack) == 0"

Die Standardausgabe von WinDump verwendet Unix-Zeitstempel. Mit der Option-tttt erscheinen die Pakete mit einem vom Menschen lesbaren Zeitstempel.

windump -i "\Device\NPF_{B13697A3-3CD0-4D84-BA5D-179F708500D3}" -tttt -c 4 -vv

Die Option -c 4 begrenzt die Ausgabe auf 4 Pakete (4 Zeilen).
Die Option -v für ausführlichen Dump, -vv mehr ausführlicher Dump.

Standardmäßig löst WinDump IP-Adressen in Hostnamen auf und verwendet auch Dienstnamen anstelle von Portnummern. Wenn kein DNS verfügbar ist, oder man einfach die Portnummer haben möchte, kann die Option -n verwenden werden.

WinDump Filterausdrücke

Mit Filter wählen welche Paket-Header ausgegeben werden sollen. Wenn keine Filter angewendet werden, werden alle Paket-Header ausgegeben. Häufig verwendete Filter sind port, host, src, dst, tcp, udp, icmp.

windump -i "\Device\NPF_{B13697A3-3CD0-4D84-BA5D-179F708500D3}" -n "udp port 53 or tcp port 53"

Der Filter wird auf udp Port 53 und tcp Port 53 angewendet, damit werden nur DNS Pakete ausgegeben.

Filterausdrücke können mit den Operatoren AND, OR und NOT kombiniert werden. Auf diese Weise lassen sich Pakete genauer isolieren.

windump -i "\Device\NPF_{B13697A3-3CD0-4D84-BA5D-179F708500D3}" "src 10.10.10.11 and dst port 22"

Im nächsten Beispiel alle Pakete ausser tcp Pakete ausgeben.

windump -i "\Device\NPF_{B13697A3-3CD0-4D84-BA5D-179F708500D3}" "not tcp"

Die Ausgabe von WinDump kann sehr schnell über den Bildschirm scrollen, dafür lassen sich die Paket-Header in eine Datei speichern mit der Option -w. Die Dateien werden in das pcap-Format gespeichert und haben die Erweiterung .pcap. Die so gespeicherten pcap-Dateien können zB. in Wireshark geöffnet und so später erneut dekodiert werden.

windump -i "\Device\NPF_{B13697A3-3CD0-4D84-BA5D-179F708500D3}" -n -c 20 -w dump.pcap

Der Befehl speichert 20 Ausgabezeilen in die Datei icmp.pcap.

Hilfe und Angaben zur Version gibt es mit ausführen von -help.

C:\>windump -help
windump version 3.9.5, based on tcpdump version 3.9.5
WinPcap version 4.1.3 (packet.dll version 4.1.0.2980), based on libpcap version 1.0 branch 1_0_rel0b (20091008)
Usage: windump [-aAdDeflLnNOpqRStuUvxX] [ -B size ] [-c count] [ -C file_size ]
                [ -E algo:secret ] [ -F file ] [ -i interface ] [ -M secret ]
                [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
                [ -W filecount ] [ -y datalinktype ] [ -Z user ]
                [ expression ]

Fazit

Mit WinDump kann man Netzwerkprobleme mit Windows beheben, wie mit tcpdump. WinDump ist einfach einzurichten, ist man mit den verschiedenen Flags und Filter nach einigen versuche einmal vertraut, können Netzwerkprobleme schnell gelöst werden, und die Sicherheit im Netzwerk überprüft und optimiert werden.