Proxmox VE auf HP Microserver Gen8: Netzwerkinstallation (Teil 2)
Nachdem der Proxmox VE Host grundsätzlich installiert ist (siehe Teil 1 der Artikelserie), muss jetzt noch das Netzwerk eingerichtet werden. Dabei sollen in meiner Installation folgende Punkte umgesetzt werden:
- Um die Bandbreite zu erhöhen sollen die beiden Netzwerkkarten des Proxmox VE Hosts zu einem Bond zusammengefasst werden. Das hilft später, wenn beim Backup große Datenmengen an den Server übertragen werden. Außerdem kann dadurch die Ausfallsicherheit erhöht werden: Bricht eine Schnittstelle weg, so kann man immer noch über die zweite Schnittstelle auf das System zugegreifen.
- Das Management-Oberfläche und der SSH-Zugang für den Proxmox VE Host sollen ausschließlich aus einem separaten Management-VLAN erreichbar sein.
- Die virtuellen Maschinen sollen unterschiedlichen VLANs in meinem Netzwerk betrieben werden können.
- Es soll ein Host-internes NEtzwerk eingerichtet werden, auf dem DAten zwischen VMs und Host ausgetauscht werden können, wenn erforderlich.
- IPv4 und IPv6 sollen eingerichtet werden.
Wichtig: Bevor mit den Änderungen an der Netzwerkkonfiguration begonnen wird sollte ein Backup der bisherigen Konfiguration vorgenommen werden (cp /etc/network/interfaces /root/
). Danach nochmal prüfen, ob das System über das ILO-Interface und per Java IRC oder per HTML 5 Console erreichbar ist. Für den Fall, dass bei der der Netzwerkkonfiguration ein Fehler passiert, ist das ggf. eine Möglichkeit wie eine funktionierende Netzwerkkonfiguration aus dem Backup (s.o.) wiederhergestellt werden kann. Ansonsten hilft im Zweifel nur noch Monitor und Tastatur anschließen!
Netzwerk-Bond einrichten
Im Web-Interface des Proxmox VE einloggen und den Menüpunkt Rechenzentrum (Datacenter) > proxmox-knoten > System >
Network
aufrufen. Die bei der Installation angelegte Bridge vmbr0
und im Feld Bridge ports
die Interfaces entfernen, damit die Interfaces für den Netzwerk-Bond freigegeben werden, der gleich erstellt wird:
Jetzt wird auf dem Proxmox-Knoten unter System >
Network > Create > Linux Bond
ein neues Netzwerkinterface mit folgenden Parametern erstellt:
Die Interfaces des Bond müssen dabei lediglich durch ein Leerzeichen getrennt und die IP-Adressen müssen unbedingt freigelassen werden.
Für die Bündelung der Netzwerkinterfaces stehen unterschiedliche Möglichkeiten zur Verfügung:
Modus | Zweck | Beschreibung |
balance-rr | Lastverteilung & Ausfallsicherheit | Die Schnittstellen des Verbundes werden in Senderichtung im Round-Robin-Verfahren Wechselseitig genutzt. Für die Empfangsrichtung kann maximal die Bandbreite eines Interfaces genutzt werden. |
active-backup | Ausfallsicherheit | Es ist im Normalbetrieb nur eine Schnittstelle aktiv. Fällt diese aus, wird eine der anderen Netzwerkkarten des Verbundes verwendet. |
balance-xor | Lastverteilung & Ausfallsicherheit | Der Gegenstelle im Netzwerk wird eine Netzwerkschnittstelle zugeordnet. Dabei wird die zu verwendende Schnittstelle auf Basis der Quell und Ziel-MAC-Adresse per XOR berechnet. |
broadcast | Ausfallsicherheit | Die Daten werden an alle Interfaces gesendet. |
802.3ad | Lastverteilung & Ausfallsicherheit | Mit dem IEEE Standard können mehrere Schnittstellen mit gleichen Geschwindigkeits- und Duplex-Einstellungen zusammengefast werden. Dadurch kann auch eine höhere Bandbreite erreicht werden. Dieser Modus muss auch vom Switch unterstützt werden und alle Interfaces müssen an den selben Switch angeschlossen werden. |
balance-tlb | Lastverteilung | Wie beim Modus balance-xor wird jeder Gegenstelle eine Netzwerkkarte des Verbunds zugeordnet. Der Algorithmus für die Zuordnung soll aber etwas effizienter sein. |
balance-alb | Lastverteilung | Erweitert das balance-tlb Verfahren, so dass auch die eingehenden Verbindungen auf die Interfaces des Verbundes verteilt werden. |
Da mein Switch den 802.3ad
-Modus unterstützt, habe ich mich für diesen Modus entschieden. Daher muss in der Switch-Konfiguration die Link-Aggregation aktiviert werden. Bei einem Ubiquiti Edge Switch müssen dazu lediglich die entsprechenden Switch-Ports zur selben LAG-Gruppe zugeordnet werden:
Danach muss der LAG-Gruppe noch das entsprechende VLAN zugeordnet werden, damit das System weiterhin erreichbar ist.
Das neue Interface bond0
muss nun noch der Bridge vmbr0
zugeordnet werden:
Damit die Einstellungen übernommen werden muss der Proxmox VE Host in der Regel einmal neu gestartet werden.
Hinweis: Wenn das Paket ifupdown2
installiert wurde, so sollten die Einstellungen über den Button Apply Configuration
auch ohne Reboot übernommen werden können. Bevor das Paket jedoch installiert wird, sollten die Hinweise unter https://pve.proxmox.com/wiki/Network_Configuration berücksichtigt werden.
Ist das System nach der Übernahme der Konfiguration nicht mehr erreichbar, so ist wohl was schief gelaufen und die Netzwerkkonfiguration muss mit der Sicherung zurückgesetzt werden.
VLAN Trunk und Mgmt-Interface einrichten
Werden im Netzwerk unterschiedliche VLANs verwendet, so will man in der Regel die Möglichkeit haben die virtuellen Maschinen in unterschiedlichen VLANs zu betreiben. Daher muss der eingerichtete Aggregated Link in der Switch-Konfiguration zu einem Trunk umkonfiguriert werden. Alle VLANs, die am Host für die virtuellen Maschinen verfügbar sein sollen, müssen daher für die Link Aggregation Group als Tagged VLAN eingetragen werden.
Ist das passiert, wird die Netzwerkkonfiguration in der Datei /etc/network/interfaces
angepasst. Mit den folgenden Einträgen wird damit eine Bridge zu einem Management-VLAN (in diesem Beispiel VLAN 999) hergestellt:
iface bond0.999 inet manual
auto vmbr999
iface vmbr999 inet static
address 192.168.177.10/24
gateway 192.168.177.1
bridge-ports bond0.999
bridge-stp off
bridge-fd 0
iface vmbr999 inet6 auto
privext 2
pre-up echo 1 > /proc/sys/net/ipv6/conf/$IFACE/autoconf
pre-up echo 1 > /proc/sys/net/ipv6/conf/$IFACE/accept_ra
pre-up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/disable_ipv6
up ip -6 addr add fd00:1::10/64 dev $IFACE label $IFACE:0
down ip -6 addr del fd00:1::10/64 dev $IFACE label $IFACE:0
up ip -6 addr add fe80::10/64 dev $IFACE label $IFACE:0
down ip -6 addr del fe80::10/64 dev $IFACE label $IFACE:0
Über die so konfigurierte IP-Adresse (im Beispiel 192.168.177.10) erfolgt zukünftig der administrative Zugriff auf den Proxmox-Host per SSH oder per Web-Interface. Außerdem kann die Bridge vmbr999
später auch genutzt werden, um virtuelle Maschinen im Management-Netzwerk (im Beispiel VLAN 999) bereitzustellen.
Danach muss noch die Einstellung für die vmbr0
angepasst werden. Da wir oben die Management-IP-Adresse an die Bridge vmbr999
gebunden haben, muss auf der Bridge vmbr0
keine IP-Adresse zugewiesen werden. Stattdessen werden die zu verwendenden VLANs (ohne das Mgmt-VLAN) auf diesem Interface bereitgestellt werden (hier z.B. VLANs 30-40, 200 und 666; siehe Konfigurationsoption bridge-vids
):
auto vmbr0
iface vmbr0 inet static
bridge-ports bond0
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 30-40 200 666
Host-internes Netzwerk
Für das interne Netzwerk zwischen Proxmox VE Host und virtuelle Clients wird folgender Abschnitt in die /etc/network/interfaces
eingefügt:
auto vmbr00
iface vmbr00 inet static
address 172.16.0.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
Hinweis: In diesem Abschnitt wird auf eine IPv6 Konfiguration verzichtet. Sollte das erforderlich sein, müssen die entsprechenden Parameter noch eingefügt werden.
Zusammenfassung der Netzwerk-Konfiguration
Insgesamt sollte die Netzwerkkonfiguration in der Datei /etc/network/interfaces ungefähr so aussehen:
# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you're doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the 'source' or 'source-directory' directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!
auto lo
iface lo inet loopback
auto eno1
iface eno1 inet manual
auto eno2
iface eno2 inet manual
auto bond0
iface bond0 inet manual
bond-slaves eno1 eno2
bond-miimon 100
bond-mode 802.3ad
bond-xmit-hash-policy layer2
iface bond0.999 inet manual
auto vmbr999
iface vmbr999 inet static
address 192.168.177.10/24
gateway 192.168.177.1
bridge-ports bond0.999
bridge-stp off
bridge-fd 0
iface vmbr999 inet6 auto
privext 2
pre-up echo 1 > /proc/sys/net/ipv6/conf/$IFACE/autoconf
pre-up echo 1 > /proc/sys/net/ipv6/conf/$IFACE/accept_ra
pre-up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/disable_ipv6
up ip -6 addr add fd00:1::10/64 dev $IFACE label $IFACE:0
down ip -6 addr del fd00:1::10/64 dev $IFACE label $IFACE:0
up ip -6 addr add fe80::10/64 dev $IFACE label $IFACE:0
down ip -6 addr del fe80::10/64 dev $IFACE label $IFACE:0
auto vmbr0
iface vmbr0 inet static
bridge-ports bond0
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 30-40 200 666
auto vmbr00
iface vmbr00 inet static
address 172.16.0.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
Anpassungen in der sysctl.conf
Zu guter letzt muss noch die sysctl
Konfiguration angepasst werden, damit die Netzwerkpakete vom Host entsprechend weitergeleitet werden und andere Netzwerk-Probleme vermieden werden (siehe auch Artikel Proxmox VE: Martian Packets beseitigen). Es können daher beispielsweise folgende Einträge an der Datei /etc/sysctl.conf
vorgenommen werden:
#
# /etc/sysctl.conf - Configuration file for setting system variables
# See /etc/sysctl.d/ for additional system variables.
# See sysctl.conf (5) for information.
#
##############################################################3
# Functions previously found in netbase
#
# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
# Uncomment the next line to enable TCP/IP SYN cookies
# See http://lwn.net/Articles/277146/
# Note: This may impact IPv6 TCP sessions too
net.ipv4.tcp_syncookies=1
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
# Uncomment the next line to enable packet forwarding for IPv6
# Enabling this option disables Stateless Address Autoconfiguration
# based on Router Advertisements for this host
net.ipv6.conf.all.forwarding=1
###################################################################
# Additional settings - these settings can improve the network
# security of the host and prevent against some network attacks
# including spoofing attacks and man in the middle attacks through
# redirection. Some network environments, however, require that these
# settings are disabled so review and enable them as needed.
#
# Do not accept ICMP redirects (prevent MITM attacks)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# _or_
# Accept ICMP redirects only for gateways listed in our default
# gateway list (enabled by default)
#net.ipv4.conf.all.secure_redirects = 0
#
# Do not accept IP source route packets (we are not a router)
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
#
# IPv6 related stuff
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.all.accept_ra=2
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.proxy_ndp=1
net.ipv6.conf.all.proxy_ndp=1
###################################################################
# ab hier Häertung gemäß Empfehlungen:
# https://www.cyberciti.biz/tips/linux-unix-bsd-nginx-webserver-security.html
#
# Avoid a smurf attack
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Turn on protection for bad icmp error messages
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Turn on execshild
kernel.exec-shield = 1
kernel.randomize_va_space = 1
# Optimization for port usefor LBs
# Increase system file descriptor limit
fs.file-max = 65535
# as a lot of containers are running: increasing of
# inotify limits is necessary (default 128)
fs.inotify.max_user_instances = 512
# Allow for more PIDs (to reduce rollover problems); may break some programs 32768
kernel.pid_max = 65536
# Increase system IP port limits
net.ipv4.ip_local_port_range = 2000 65000
# Increase TCP max buffer size setable using setsockopt()
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
# Increase Linux auto tuning TCP buffer limits
# min, default, and max number of bytes to use
# set max to at least 4MB, or higher if you use very high BDP paths
# Tcp Windows etc
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1
vm.overcommit_memory = 1
# avoid martian packets due to wrong MAC address distribution
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
Damit die neuen Einstellungen wirksam werden, sollte der Proxmox-Host nochmal neu gebootet werden.
Kommentare