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