{"id":3495,"date":"2023-05-22T07:00:00","date_gmt":"2023-05-22T05:00:00","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=3495"},"modified":"2023-12-30T14:26:34","modified_gmt":"2023-12-30T13:26:34","slug":"dokumentation-meines-proxmox-setups","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/dokumentation-meines-proxmox-setups\/","title":{"rendered":"Dokumentation meines Proxmox-Setups"},"content":{"rendered":"\n<p>Dies ist die l\u00fcckenhafte Dokumentation meines Proxmox-Setups.<\/p>\n\n\n\n<p>Als langj\u00e4hriger Administrator von VMware vSphere probiere ich etwas Neues aus. Mein Setup und erste Erkenntnisse halte ich in diesem Artikel fest. Ich werde ihn in der Zukunft weiter ausgestalten und erg\u00e4nzen.<\/p>\n\n\n\n<p>Ich m\u00f6chte euch nicht vom Lesen abhalten, doch erwartet nicht zu viel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Betreiber, Standort und Server-Hardware<\/h2>\n\n\n\n<p>F\u00fcr den Betrieb von Labor-Umgebungen habe ich mir einen Server mit folgender Hardware-Ausstattung in <a href=\"https:\/\/www.hetzner.com\/de\/\">Hetzners<\/a> <a href=\"https:\/\/www.hetzner.com\/de\/sb\">Serverb\u00f6rse<\/a> gemietet.<\/p>\n\n\n\n<p><strong>Ausstattung:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.intel.de\/content\/www\/de\/de\/products\/sku\/186605\/intel-core-i99900k-processor-16m-cache-up-to-5-00-ghz\/specifications.html\">Intel Core i9-9900K<\/a> (8 Cores\/16 Threads)<\/li>\n\n\n\n<li>2x SSD M.2 NVMe 1 TB<\/li>\n\n\n\n<li>4x RAM 32768 MB DDR4<\/li>\n\n\n\n<li>NIC 1 Gbit Intel I219-LM<\/li>\n\n\n\n<li>Standort: Deutschland, FSN1<\/li>\n\n\n\n<li>Rescue-System (Englisch)<\/li>\n\n\n\n<li>1 x Prim\u00e4re IPv4<\/li>\n\n\n\n<li>1x \/64-Subnetz IPv4<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Installation<\/h2>\n\n\n\n<p>Auf der Hardware habe ich eine <a href=\"https:\/\/wiki.debian.org\/de\/Debootstrap\">Debootstrap<\/a>-Installation mit <a href=\"https:\/\/wiki.debian.org\/DebianBullseye\">Debian 11 (Bullseye)<\/a> durchgef\u00fchrt, bei der alle Datentr\u00e4ger mit Ausnahme von \/boot <a href=\"https:\/\/wiki.ubuntuusers.de\/LUKS\/\">LUKS<\/a>-verschl\u00fcsselt sind. Dazu bin ich der hervorragenden Anleitung meines Kollegen Steffen gefolgt: \u201e<a href=\"https:\/\/blog.scheib.me\/2023\/05\/01\/debootstrapping-debian.html\">Manually installing Debian 11 (Bullseye) with fully encrypted LUKS (besides \/boot) using debootstrap<\/a>\u201c<\/p>\n\n\n\n<p>Anschlie\u00dfend habe ich die Proxmox-Paketquellen eingebunden und <a href=\"https:\/\/www.proxmox.com\/de\/proxmox-ve\">Proxmox VE<\/a> installiert. Ich wei\u00df nicht mehr genau, welchem Tutorial ich gefolgt bin. Daher habe ich in [<a href=\"#quellen-links\">1-3<\/a>] ein paar vielversprechend erscheinende Suchergebnisse verlinkt.<\/p>\n\n\n\n<p><em>Hinweis:<\/em> Die aktuelle Netzwerkkonfiguration ist im Abschnitt <a href=\"#net-config-2023-12-29\">Netzwerkkonfiguration ab 2023-12-29<\/a> dokumentiert. Die vorhergehenden Konfigurationen belasse ich im Artikel, um die Historie nachvollziehen zu k\u00f6nnen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Netzwerkkonfiguration bis 2023-07-21<\/h2>\n\n\n\n<p>Die physikalische <a href=\"https:\/\/de.wikipedia.org\/wiki\/Netzwerkkarte\">NIC<\/a> meines Hosts wird mit meiner \u00f6ffentlichen IPv4 und einer IPv6-Adresse f\u00fcr die Au\u00dfenanbindung konfiguriert. Im Betriebssystem erstelle ich eine <a href=\"https:\/\/de.wikipedia.org\/wiki\/Bridge_(Netzwerk)\">Bridge<\/a>, an welche sp\u00e4ter die virtuellen Maschinen (VMs) angeschlossen werden. \u00dcber diese Bridge haben die VMs Zugriff auf das Internet und sind vom Internet aus zu erreichen.<\/p>\n\n\n\n<p>Das folgende Bild stellt die Konfiguration exemplarisch dar. Statt IPv4-Adressen verwende ich f\u00fcr die Bridge und VMs jedoch ausschlie\u00dflich IPv6-Adressen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/pve.proxmox.com\/pve-docs\/images\/default-network-setup-routed.svg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Quelle: <a href=\"https:\/\/pve.proxmox.com\/wiki\/Network_Configuration#sysadmin_network_routed\">Proxmox-Wiki &#8211; Routed Configuration<\/a><\/figcaption><\/figure>\n\n\n\n<p>Die Datei \/etc\/network\/interfaces meines Hosts hat folgenden Inhalt. Die realen IP-Adressen habe ich dabei durch Adressen aus <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc3849\">RFC 3849<\/a> und <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc5737\">RFC 5737<\/a> ersetzt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ cat \/etc\/network\/interfaces\n# network interface settings; autogenerated\n# Please do NOT modify this file directly, unless you know what\n# you're doing.\n#\n# If you want to manage parts of the network configuration manually,\n# please utilize the 'source' or 'source-directory' directives to do\n# so.\n# PVE will preserve these directives, but will NOT read its network\n# configuration from sourced files, so do not attempt to move any of\n# the PVE managed interfaces into external files!\n\nsource \/etc\/network\/interfaces.d\/*\n\nauto lo\niface lo inet loopback\n\nauto eth0\niface eth0 inet static\n\taddress 198.51.100.38\/27\n\tgateway 198.51.100.33\n\tpre-up \/sbin\/ip addr flush dev eth0 || true\n\niface eth0 inet6 static\n\taddress 2001:db8:dead:beef::1\n\tnetmask 128\n\tgateway fe80::1\n\tup sysctl -w net.ipv6.conf.all.forwarding=1\n\tup sysctl -p\n\nauto vmbr0\niface vmbr0 inet6 static\n\taddress 2001:db8:dead:beef::2\n\tnetmask 64\n\tup ip -6 route add 2001:db8:dead:beef::\/64 dev vmbr0\n\tbridge-ports none\n\tbridge-stp off\n\tbridge-fd 0<\/code><\/pre>\n\n\n\n<p>Erl\u00e4uterungen dazu folgen ggf. sp\u00e4ter. Als Einstieg empfehle ich einen Blick in die interfaces(5).<\/p>\n\n\n\n<p>Damit eine VM auf das Routing-Netzwerk zugreifen und dar\u00fcber das Internet erreichen kann, wird diese an die Bridge <code>vmbr0<\/code> angeschlossen. Anschlie\u00dfend wird dieser eine IPv6-Adresse aus dem \/64-Addressblock konfiguriert, wie es der folgende Code-Block exemplarisch darstellt, wobei <code>static-ipv6<\/code> der Name der Verbindung und <code>ens192<\/code> der Name der NIC ist:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># nmcli con add con-name static-ipv6 ifname ens192 type ethernet\n# nmcli con mod static-ipv6 ipv6.addresses 2001:db8:dead:beef::3\/128 ipv6.method manual ipv6.gateway 2001:db8:dead:beef::2\n# nmcli con up static-ipv6<\/code><\/pre>\n\n\n\n<p>Zur Verwendung von <code>nmcli<\/code> habe ich die Red Hat Dokumentation unter [<a href=\"#quellen-links\">4<\/a>] zu Rate gezogen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Netzwerkkonfiguration ab 2023-07-21 bis 2023-12-29<\/h2>\n\n\n\n<p>Urspr\u00fcnglich habe ich die Absicht verfolgt, alle VMs auf meinem Hetzner-Server ausschlie\u00dflich mit IPv6 zu betreiben. Wir schreiben ja schlie\u00dflich das Jahr 2023. Da sollte das doch problemlos m\u00f6glich sein. W\u00e4re da nicht (mindestens) <a href=\"https:\/\/access.redhat.com\/solutions\/465613\">ein Dienst<\/a>, der IPv6 nicht unterst\u00fctzt.<\/p>\n\n\n\n<p>Da es offenbar nicht ganz ohne IPv4 geht, habe ich mir bei Hetzner eine zweite IPv4-Adresse gemietet [<a href=\"#quellen-links\">5<\/a>] und bin der Anleitung<a href=\"https:\/\/community.hetzner.com\/tutorials\/install-and-configure-proxmox_ve\/de#schritt-2---netzkonfiguration\"> Netzwerkkonfiguration f\u00fcr Proxmox VE<\/a> in der Hetzner-Community gefolgt. Da die Anleitung mein bestehendes Setup f\u00fcr IPv6 nicht ber\u00fccksichtigt, waren ein paar Anpassungen notwendig. Der folgende Code-Block stellt den Inhalt der Dateien <code>\/etc\/network\/interfaces<\/code> und <code>\/etc\/network\/interfaces.d\/vmbr0-extra<\/code> dar, wobei die IP-Adressen ersetzt wurden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ cat \/etc\/network\/interfaces\n# network interface settings; autogenerated\n# Please do NOT modify this file directly, unless you know what\n# you're doing.\n#\n# If you want to manage parts of the network configuration manually,\n# please utilize the 'source' or 'source-directory' directives to do\n# so.\n# PVE will preserve these directives, but will NOT read its network\n# configuration from sourced files, so do not attempt to move any of\n# the PVE managed interfaces into external files!\n\nsource \/etc\/network\/interfaces.d\/*\n\nauto lo\niface lo inet loopback\n\niface eth0 inet manual\n\tpre-up \/sbin\/ip addr flush dev eth0 || true\n\nauto vmbr0\niface vmbr0 inet static\n\taddress 198.51.100.38\/27\n\tgateway 198.51.100.33\n\tbridge-ports eth0\n\tbridge-stp off\n\tbridge-fd 0\n\niface vmbr0 inet6 static\n\taddress 2001:db8:dead:beef::1\/64\n\tgateway fe80::1\n\n$ cat \/etc\/network\/interfaces.d\/vmbr0-extra \niface vmbr0 inet static\n\thwaddress &lt;zweite MAC-Adresse aus dem Kundenportal&gt;<\/code><\/pre>\n\n\n\n<p>Die virtuelle Netzwerkkarte der VM, welche \u00fcber die zweite IPv4-Adresse erreichbar sein soll, wird an die Bridge <code>vmbr0<\/code> angeschlossen. Das Interface <code>ens18<\/code> im Gastbetriebssystem wurde wie folgt konfiguriert:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># nmcli\nens18: connected to ens18\n        \"Red Hat Virtio\"\n        ethernet (virtio_net), 00:50:56:00:8C:22, hw, mtu 1500\n        ip4 default, ip6 default\n        inet4 198.51.100.36\/32\n        route4 198.51.100.33\/32 metric 100\n        route4 default via 198.51.100.33 metric 100\n        inet6 fe80::250:56ff:fe00:8c22\/64\n        inet6 2001:db8:dead:beef::2\/64\n        route6 2001:db8:dead:beef::\/64 metric 100\n        route6 default via fe80::1 metric 100\n        route6 fe80::\/64 metric 1024\n\n# cat \/etc\/resolv.conf\n# Generated by NetworkManager\nnameserver 185.12.64.1\nnameserver 185.12.64.2\nnameserver 2a01:4ff:ff00::add:1<\/code><\/pre>\n\n\n\n<p>Getestet habe ich die Konfiguration, indem ich eine Webseite einmal \u00fcber IPv4 und einmal \u00fcber IPv6 abgerufen habe. Dies kann man recht einfach mit <code>curl<\/code> nach folgendem Muster erledigen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ curl -4 &#91;URL]\n$ curl -6 &#91;URL]<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"net-config-2023-12-29\">Netzwerkkonfiguration ab 2023-12-29<\/h2>\n\n\n\n<p>Leider bin ich mit der letzten Netzwerkkonfiguration in ein neues Problem gelaufen. Hetzner erlaubt nur registrierte MAC-Adressen auf seinen Switches. Mit dem letzten Setup erschienen jedoch auch die MAC-Adressen meiner virtuellen Maschinen auf den Switches und ich erhielt MAC-Absue-Meldungen.<\/p>\n\n\n\n<p>Um das Problem zu beheben, habe ich mich vom Bridged-Modus verabschiedet und die Konfiguration gem\u00e4\u00df der <a href=\"https:\/\/community.hetzner.com\/tutorials\/install-and-configure-proxmox_ve\/de#netzwerkkonfiguration-hostsystem-routed\">Hetzner-Anleitung Abschnitt \u201eNetzwerkkonfiguration Hostsystem Routed\u201c<\/a> umgesetzt.<\/p>\n\n\n\n<p>F\u00fcr meine Proxy-VM habe ich eine individuelle IPv4-Adresse bestellt und dieser eine separate MAC-Adresse zugewiesen. Damit die IPv4-Kommunikation dieser VM im routed-Setup funktioniert, musste ich die separate MAC-Adresse zur\u00fccksetzen. Seitdem k\u00f6nnen die VMs wieder kommunizieren, ohne MAC-Abuse-Meldungen zu verursachen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Erster Eindruck<\/h2>\n\n\n\n<p>Wie ESXi und vSphere verf\u00fcgt auch Proxmox VE \u00fcber ein WebUI zur Administration der Umgebung und zur Erstellung virtueller Maschinen.<\/p>\n\n\n\n<p>Selbstverst\u00e4ndlich gibt es einige Unterschiede und nicht alles wirkt sofort vertraut. Bisher konnten die <a href=\"https:\/\/pve.proxmox.com\/pve-docs\/\">Proxmox-Dokumentation<\/a> und das <a href=\"https:\/\/pve.proxmox.com\/wiki\/Main_Page\">Proxmox-Wiki<\/a> meine Fragen jedoch schnell beantworten.<\/p>\n\n\n\n<p>Eine erste VM war schnell erstellt, installiert und in ein Template umgewandelt. Interessanterweise kann man Templates im WebUI nicht wieder in VMs umwandeln, was bei vSphere kein Problem ist.<\/p>\n\n\n\n<p>Im Gegenzug k\u00f6nnen ISO-Images oder sonstige Dateien einfach per <code>rsync<\/code> auf den Proxmox-Host kopiert werden, was gerade beim erneuten \u00dcbertragen vorhandener Dateien eine enorme Zeitersparnis mit sich bringt. Hier muss bei vSphere und ESXi zum Upload von Dateien in den Datenspeicher das WebUI, SCP oder die Powershell bem\u00fcht werden und erneut zu kopierende Dateien werden jedes Mal komplett \u00fcbertragen. Was bei Netzwerkgeschwindigkeiten im Datacenter nicht so dramatisch ist, nervt doch sehr, wenn man gro\u00dfe ISO-Images \u00fcber eine Internetleitung \u00fcbertragen muss.<\/p>\n\n\n\n<p>Der erste Eindruck ist zufriedenstellend. Als n\u00e4chstes werde ich mich mal damit besch\u00e4ftigen, wie man VMs mit Ansible auf Proxmox provisioniert. Das <a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/collections\/community\/general\/proxmox_kvm_module.html#ansible-collections-community-general-proxmox-kvm-module\">community.general.proxmox_kvm<\/a>-Modul scheint daf\u00fcr ein guter Einstiegspunkt zu sein.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"quellen-links\">Quellen und weiterf\u00fchrende Links<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/pve.proxmox.com\/wiki\/Install_Proxmox_VE_on_Debian_11_Bullseye\">Install Proxmox VE on Debian 11 Bullseye<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/jannik-scheewe.de\/post\/so-installieren-sie-proxmox-auf-einem-debian-11-server#\">So installieren Sie Proxmox auf einem Debian 11-Server<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/raspberrytips.com\/install-proxmox-on-debian\/\">How To Install Proxmox On Debian 11 \u2013 A Step-By-Step Guide<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux\/9\/html\/configuring_and_managing_networking\/configuring-an-ethernet-connection_configuring-and-managing-networking#configuring-an-ethernet-connection-with-a-static-ip-address-by-using-nmcli_configuring-an-ethernet-connection\">Configuring an Ethernet connection with a static IP address by using nmcli<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.hetzner.com\/de\/robot\/dedicated-server\/ip\/additional-ip-adresses\/\">Zus\u00e4tzliche IP-Adressen bei Hetzner<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/community.hetzner.com\/tutorials\/install-and-configure-proxmox_ve\/de#schritt-2---netzkonfiguration\">Proxmox VE Netzwerkkonfiguration<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Dies ist die l\u00fcckenhafte Dokumentation meines Proxmox-Setups. Als langj\u00e4hriger Administrator von VMware vSphere probiere ich etwas Neues aus. Mein Setup und erste Erkenntnisse halte ich in diesem Artikel fest. Ich werde ihn in der Zukunft weiter ausgestalten und erg\u00e4nzen. Ich m\u00f6chte euch nicht vom Lesen abhalten, doch erwartet nicht zu viel. Betreiber, Standort und Server-Hardware<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/dokumentation-meines-proxmox-setups\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[51],"tags":[],"class_list":["post-3495","post","type-post","status-publish","format-standard","hentry","category-linux"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=3495"}],"version-history":[{"count":7,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3495\/revisions"}],"predecessor-version":[{"id":3747,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3495\/revisions\/3747"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=3495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=3495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=3495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}