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 vmbr0und im Feld Bridge ports die Interfaces entfernen, damit die Interfaces für den Netzwerk-Bond freigegeben werden, der gleich erstellt wird:

 Netzwerkbridge vmbr0 anpassen

Jetzt wird auf dem Proxmox-Knoten unter System >Network > Create > Linux Bond ein neues Netzwerkinterface mit folgenden Parametern erstellt:

Linux Bond erstellen

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:

ModusZweckBeschreibung
balance-rrLastverteilung & AusfallsicherheitDie 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-backupAusfallsicherheitEs ist im Normalbetrieb nur eine Schnittstelle aktiv. Fällt diese aus, wird eine der anderen Netzwerkkarten des Verbundes verwendet. 
balance-xorLastverteilung & AusfallsicherheitDer Gegenstelle im Netzwerk wird eine Netzwerkschnittstelle zugeordnet.  Dabei wird die zu verwendende Schnittstelle auf Basis der Quell und Ziel-MAC-Adresse per XOR berechnet. 
broadcastAusfallsicherheitDie Daten werden an alle Interfaces gesendet.
802.3adLastverteilung & AusfallsicherheitMit 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-tlbLastverteilungWie beim Modus balance-xor wird jeder Gegenstelle eine Netzwerkkarte des Verbunds zugeordnet. Der Algorithmus für die Zuordnung soll aber etwas effizienter sein.
balance-albLastverteilungErweitert 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:

LAG-Zuordnung im Ubiquiti Switch

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:

Anpassen der Bridge vmbr0

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

PostadresseE-MailadresseFestnetzMobiltelefonSMS/SignalThreemaTwitter DirektnachrichtFAXWeb Page