Übersicht

Dieser Artikel zeigt, wie man einen dedizierten Root-Server mit statischer IP-Adresse (z. B. bei Hetzner, IONOS oder Netcup) so konfiguriert, dass der gesamte VM-Datenverkehr über eine pfSense/OPNsense-Firewall läuft – mit nur einer einzigen öffentlichen IP-Adresse.
Netzwerk-Architektur
Die Lösung basiert auf drei Bridges:
- vmbr0: WAN-Bridge mit öffentlicher IPv4/IPv6
- vmbr1: Transit-Bridge (10.0.10.0/30) für pfSense-WAN
- vmbr2: LAN-Bridge für pfSense und VMs
Eingehender Verkehr wird per DNAT zur WAN-Schnittstelle weitergeleitet (ausgenommen SSH Port 22 und die Proxmox-GUI Port 8006). Ausgehender Verkehr wird per Masquerading genattet.
Schritt 1: IP-Adressen ermitteln
# Interface setzen (bei Hetzner meist eno1)
IFACE=eno1
# IPv4-Adresse
ip -o -4 addr show dev "$IFACE" | awk '{print "address "$4}'
# IPv6-Adresse (ohne fe80::)
ip -o -6 addr show dev "$IFACE" | awk '$4 !~ /^fe80::/ {print "address "$4}'
# Default-Gateways
ip route | awk -v d="$IFACE" '$1=="default" && $5==d {print "gateway "$3; exit}'
ip -6 route | awk -v d="$IFACE" '$1=="default" && $5==d {print "gateway "$3; exit}'
Schritt 2: /etc/network/interfaces konfigurieren
Die Datei mit den ermittelten Adressen und den drei Bridges konfigurieren. Wichtige Elemente:
- IPv4/IPv6 auf vmbr0 mit IP-Forwarding
- iptables-Regeln für DNAT (ausgenommen Ports 22 und 8006)
- vmbr1 mit Masquerading für das Transit-Netzwerk
- vmbr2 als VLAN-aware Bridge für LAN
# 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!
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
iface lo inet6 loopback
auto eno1
iface eno1 inet manual
# Physische NIC
auto vmbr0
iface vmbr0 inet static
address 65.21.141.146/26
gateway 65.21.141.129
bridge-ports eno1
bridge-stp off
bridge-fd 0
bridge-maxwait 0
#WAN-Bridge with IPV4 und IPV6 forwarding
iface vmbr0 inet6 static
address 2a01:4f9:3b:2b1c::2/64
gateway fe80::1
post-up ip -6 neigh add proxy 2a01:4f9:3b:2b1c::10 dev vmbr0
post-down ip -6 neigh del proxy 2a01:4f9:3b:2b1c::10 dev vmbr0 || true
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp -m multiport ! --dport 22,8006 -j DNAT --to 10.0.10.2
post-up iptables -t nat -A PREROUTING -i vmbr0 -p udp -j DNAT --to 10.0.10.2
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp -m multiport ! --dport 22,8006 -j DNAT --to 10.0.10.2 || true
post-down iptables -t nat -D PREROUTING -i vmbr0 -p udp -j DNAT --to 10.0.10.2 || true
auto vmbr1
iface vmbr1 inet static
address 10.0.10.1/30
bridge-ports none
bridge-stp off
bridge-fd 0
post-up iptables -t nat -A POSTROUTING -s '10.0.10.0/30' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.0.10.0/30' -o vmbr0 -j MASQUERADE || true
#Gateway-Bridge for pfSense
auto vmbr2
iface vmbr2 inet manual
bridge-ports none
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 2-4094
#LAN on pfSense (for VM use)
#auto vmbr3
#iface vmbr3 inet manual
# bridge-ports none
# bridge-stp off
# bridge-fd 0
# bridge-vlan-aware yes
# bridge-vids 2-4094
#LAN 2 on pfSense (for VM use)
#auto vmbr4
#iface vmbr4 inet manual
# bridge-ports none
# bridge-stp off
# bridge-fd 0
#LAN 3 on pfSense (for VM use)
Schritt 3: System neu starten
/usr/sbin/reboot
Konfiguration bei pfSense/OPNsense
Das WAN-Interface erhält die IP-Adresse 10.0.10.2/30 mit Gateway 10.0.10.1.
Eine einzige öffentliche IP-Adresse genügt für ein vollständiges Firewall-Setup mit VM-Isolation auf Proxmox.