In diesem Beitrag zeige ich, wie du einen Dedicated Root-Server mit statischer IP (z. B. bei Hetzner, IONOS, Netcup, …) so konfigurierst, dass der gesamte VM-Traffic über eine pfSense/OPNsense-Firewall läuft. Dafür richtest du eine WAN-Bridge für die öffentliche Anbindung der Firewall und eine LAN-Bridge ein, an die später deine VMs als pfSense-LAN angebunden werden. Eine einzige öffentliche IP-Adresse genügt. Eingehender Verkehr wird per DNAT standardmäßig zur pfSense-WAN-Schnittstelle weitergeleitet, ausgenommen sind die Ports SSH (22) und die Proxmox-GUI (8006), damit der Proxmox-Host erreichbar bleibt. Ausgehender Verkehr des Transitnetzes (z. B. 10.0.10.0/30) wird per Masquerading über die WAN-Bridge genattet.

Erstmal benötigen wir die IPv4- und IPv6-Adresse.
Diese kannst du mit folgenden Befehlen ermitteln,
ersetze bei Bedarf dein Interface (hier eno1).

Bash
# Interface setzen (bei Hetzner meist eno1 sonst)
IFACE=eno1

# IPv4-Adresse im /etc/network/interfaces-Format
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 für dieses Interface
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}'

Die Ausgabe der Befehle am besten in eine Textdatei kopieren.

Nun kann die Datei /etc/network/interfaces bearbeitet werden. Achte darauf, dass dein Interface (im Beispiel eno1) korrekt eingetragen ist. Außerdem sollten die IPv4- und IPv6-Adressen aus deinem Textdokument übernommen werden. Hier werden nun die Bridges erstellt: vmbr0 (WAN-Bridge mit öffentlicher IPv4/IPv6), vmbr1 (Transit-/Gateway-Bridge für die pfSense-WAN-Seite, 10.0.10.0/30) und vmbr2 (LAN-Bridge für pfSense/VMs).

Bash
# 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)

Wenn du das gemacht hast, starte den Proxmox-Server mit einem „reboot“ neu.

Bash
/usr/sbin/reboot

Öffnest du nun das PVE-Web-Frontend, sollten dort die Bridges sichtbar sein.
Wie oben beschrieben, ist vmbr1 das zukünftige WAN-Interface deiner pfSense/OPNsense, und vmbr2 ist für das LAN-Netzwerk. Bei der pfSense/OPNsense-Installation vergibst du am WAN-Interface 10.0.10.2/30 mit dem Gateway 10.0.10.1

Hier noch mal eine Zusammenfassung der Bridges:

  • vmbr0 = WAN-Bridge mit öffentlicher IPv4/IPv6 (Internet).
  • vmbr1 = pfSense/OPNsense-WAN (Transit-/30, deine Firewall-WAN-NIC gehört hier dran).
  • vmbr2 = LAN-Bridge für pfSense/OPNsense (VLAN-aware, für diedie Firewall-LAN-NIC und ggf. VMs).