Proxmox ist phantastisch. Die Netzwerkkonfiguration ist sehr flexibel.
Alles was der Kernel ermöglicht ist auch umsetzbar.
Hier eine funktionierende Konfiguration für folgendes Setup,
das wohl viele Leute benutzen:
Proxmox Host
Physisches Interface: enp5s0
Öffentliche IPv4: 1.2.3.4/26
Gateway vom Hoster: 1.2.3.5
Privates Subnet für Proxmox Container:
Virtuelle Bridge: vmbr0
IP-Adresse der Bridge: 10.10.10.100/24
Netzwerkconfig von Containern:
Netzwerinterface: vmbr0
IP Adresse: 10.10.10.x
Subnet: 255.255.255.0
Gateway: 10.10.10.100
In dieser Konfiguration enthalten ist:
– eine Firewall für den Host, die jeden direkten Input auf den Host bis auf die freigegebenen Ports blockt
– das Portmapping für die Container im 10.10.10.0/24 Subnet
– Das Masquerading für das Container-Subnet, damit die Container Internet haben
Die gesamte Config wird in einer Datei vorgenommen: /etc/network/interfaces
Getestet wurde das Ganze auf Proxmox 8.2.2
Habe eine Weile dafür gebraucht, bis es sauber lief, deshalb hier die Config für Euch.
Und wie immer: Keine Garantien. Ihr solltet wissen was ihr tut. Ein einfaches Copy/Paste
wird für Euer individuelles Setup eher nicht funktionieren.
Überprüfen sollte man auch ob man andere Firewall-Tools wie zum Beispiel ufw installiert hat.
Diese sollten deaktiviert werden, da sie auch iptables benutzen und mit dieser manuellen
Konfiguration ziemlich sicher in Konflikt geraten würden.
Es ist auch immer etwas gefährlich an Netzwerkconfig und Firewall von Remoteservern herumzuspielen,
da man sich leicht selbst aussperren kann, wenn man aus Versehen den Zugriff auf SSH blockt.
Um nicht umständlich über Rescuesysteme wieder Zugriff auf den Server erhalten zu müssen kann man vorsorgen. Für Testzwecke kann man den Server dazu bringen selbstständig die alte Konfiguration wiederherzustellen, wenn man sich aus Versehen ausgesperrt hat.
# Benötigte Tools installieren apt install ifupdown2 screen # Funktionierende Netzwerkconfiguration backuppen cp /etc/network/interfaces /tmp/interfaces.backup # Screen Session öffnen. Diese läuft weiter, auch wenn die SSH-Sitzung durch einen # Konfigurationsfehler in der geänderten Netzwerkconfig beendet wird. screen -R -d networkrollback # In der neu geöffneten screen-Session diesen Befehl eingeben. # Er kopiert nach einer Minute die Original-Config wieder zurück und startet das Netzwerk neu. # Lief alles gut und man hat sich nicht ausgesperrt, kann man die Ausführung innerhalb einer Minute # durch CTRL-C beenden und das Rückspielen der Sicherung abbrechen sleep 1m; cp /tmp/interfaces.backup /etc/network/interfaces; ifreload -a
Sehr geholfen hat auch die offizielle Dokumentation hier:
https://pve.proxmox.com/wiki/Network_Configuration
Hier jetzt also eine funktionierende Config für meinen Anwendungsfall.
Also Vorsicht, Gute Nerven und Viel Spaß! :)
# cat /etc/network/interfaces
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
# Das physikalische Interface des Servers
auto enp5s0
iface enp5s0 inet static
address 1.2.3.4/26
gateway 1.2.3.5
# Aktuell aktive iptables rules löschen
post-up iptables -F
post-up iptables -t raw -F
post-up iptables -t nat -F
# Iptables defaults setzen. FORWARD und OUTPUT erlauben, INPUT verbieten
post-up iptables -P FORWARD ACCEPT
post-up iptables -P INPUT DROP
post-up iptables -P OUTPUT ACCEPT
# Netwerkverkehr von localhost erlauben
post-up iptables -A INPUT -i lo -j ACCEPT
post up iptables -A OUTPUT -o lo -j ACCEPT
# Erlauben den Host zu pingen
post-up iptables -A INPUT -i enp5s0 -p icmp -j ACCEPT
# Ermöglichen, dass bereits hergestellte Verbindungen auch antworten können
post-up iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
post-up iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
# Portfreigabe für Ports am Host. Da INPUT oben verboten wurde, muss jeder Port am Host der
# benutzt wird hier geöffnet werden
post-up iptables -A INPUT -i enp5s0 -p tcp -m tcp --dport 22 -j ACCEPT #Beispielfreigabe tcp
post-up iptables -A INPUT -i enp5s0 -p udp -m udp --dport 12182 -j ACCEPT #Beispielfreigabe udp
# Portmappings für die Container im Virtuellen 10.10.10.0 Subnet.
# Hier wird ermöglicht, dass Dienste im Subnet über das Internet erreichbar werden
# Beispielportmapping tcp
# Alles was auf der Public-IP des Hosts auf Port 12345 tcp ankommt, wird weitergeleitet an Port 12345 auf Container 10.10.10.3
post-up iptables -A PREROUTING -t nat -i enp5s0 -p tcp --dport 12345 -j DNAT --to-destination 10.10.10.3:12345
# Beispielportmapping udp
# Alles was auf der Public-IP des Hosts auf Port 12345 udp ankommt, wird weitergeleitet an Port 12345 auf Container 10.10.10.3
post-up iptables -A PREROUTING -t nat -i enp5s0 -p udp --dport 12345 -j DNAT --to-destination 10.10.10.3:12345
# Konfiguration der virtuellen Brücke für das 10.10.10.0 Container-Subnet
# Die Brücke benötigt eine IP in ihrem Subnet, hier 10.10.10.100
# Container benutzen in ihrer Config diese IP als Gateway
auto vmbr0
iface vmbr0 inet static
address 10.10.10.100/24
bridge-ports none
bridge-stp off
bridge-fd 0
# IP-Forwarding für die Hosts im Container-Subnet
# Ohne IP-Forwarding und Maskierung haben die Container keinen
# Internetzugriff
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o enp5s0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o enp5s0 -j MASQUERADE
post-up iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1