[SOLVED] Proxmox Cluster mit öffentlichem und privaten Netz hinter einer pfSense Firewall

elyday

Member
Nov 10, 2018
25
3
8
25
Hallo,

ich administriere ein kleines Proxmox Cluster mit 3 Nodes.
Ich möchte gerne das Netzwerk dieses Clusters so umbauen, dass alle VMs und die Proxmox VE Nodes hinter einer einzelnen pfSense Firewall sind und über eben diese ins Internet gehen (jedoch noch mit je einer eigenen öffentlichen und privaten IP-Adresse).
Das Ziel dahinter ist, über die pfSense Firewall regeln zu können welche Ports für welche Maschine (VM oder Node) freigegeben sind und welche gesperrt sind.

Unsere Proxmox VE Nodes haben je zwei Netzwerkkarten welche über einen Linux Bond im Mode "LACP" zu einem Interface gebunden sind (sollte ein Adapter ausfallen ist das Netzwerk dennoch im Stande zu funktionieren). Die VM Bridge ist dann an den Linux Bond gebunden. Das interne Netz wird über ein VLAN abgebildet. Die bestehende Netzwerkkonfig sieht dann in etwa so aus:

Code:
auto lo
iface lo inet loopback

iface eno1 inet manual

iface eno2 inet manual

iface enp1s0f0 inet manual

iface enp1s0f1 inet manual

iface enxb03af2b6059f inet manual

auto bond0
iface bond0 inet static
        bond-slaves             enp1s0f0 enp1s0f1
        bond-miimon             100
        bond-mode               802.3ad
        bond-xmit-hash-policy   layer3+4

auto bond0:1
iface bond0:1 inet static
        bond-slaves             enp1s0f0 enp1s0f1
        bond-miimon             100
        bond-mode               802.3ad
        bond-xmit-hash-policy   layer3+4

auto vmbr0
iface vmbr0 inet static
        address xx.xx.xx.xx/26
        gateway xx.xx.xx.xx
        bridge-ports bond0
        bridge-stp off
        bridge-fd 0

auto vmbr0:1
iface vmbr0:1 inet static
        address xx.xx.xx.xx/24
        gateway xx.xx.xx.xx
        bridge-ports bond0:1
        bridge-stp off
        bridge-fd 0

Diese Konfiguration funktioniert soweit einwandfrei. Nun stellt sich mir jedoch die Frage, welche Stellen der Konfiguration müssen so angepasst werden, dass das Ziel mit der pfSense VM, über die jeder Traffic nach außen und innen geht, realisiert werden kann. Kann mir dabei zufällig jemand helfen bzw. nen Tipp geben?

Vielen Dank schonmal und beste grüße
 
Ich hoffe ich habe es richtig verstanden. Also die pfSense IP soll eine öffentliche IP bekommen und dahinter das öffentliche Netz bereitstellen und filtern?


Das kommt nun auf die Art und weise deines Aufbaus an.


Variante 1: Öffentliches Netz hat nur ein kleines Subnetz was du nicht teilen möchtest:
pfSense VM bekommt 2 Interfaces. Eins für das öffentliche Netz und ein weiteres für ein "internes" Netz. Das interne Netz sollte auf einem anderen VLAN liegen als das öffentliche Netz! Dann beide Interfaces in pfSense zu einer Bridge zusammenfügen und schon kann jeglicher Traffic vom öffentlichen Netz in das "interne" Netz gefiltert werden. Die VMs im "internen" Netz bekommen dabei ganz normal die IPs aus dem öffentlichen Netz und nutzen auch das Gateway des öffentlichen Netzes.

Variante 2: pfSense VM hat eine öffentliche IP und es wird ein weiteres öffentliche Subnetz auf die IP der pfSense geroutet
pfSense VM bekommt 2 Interfaces genau wie oben beschrieben, nur dass diesmal die Interfaces nicht gebridged werden. Dann das "interne" Interface mit einer IP aus dem geröteten Subnetz konfigurieren und alle "internen" VMs bekommen dann eine IP aus dem geröteten Subnetz und stellen als GW die IP der pfsense ein.

Variante 3: Das "interne" Netz soll private IPs nutzen
Auch wieder einrichten wie bei Variante 2, nur dass für das "interne" Interface ein privates IP-Netz genommen wird. Dann kannst du 1:1 NAT einrichten um jeder internen IP eine definierte öffentliche IP zuzuweisen. Mehrere "interne" VMs können sich auch eine öffentliche IP teilen. Dazu nicht 1:1 NAT nutzen sondern Port Weiterleitung und spezifische Outbound NAT Regeln.
 
Über die pfSense VM soll halt jeglicher Traffic gehen, sodass ich dort über regeln genau einstellen kann welche Ports wie freigegeben sind und welche nicht.

Die Variante 1 klingt ganz danach, was ich haben möchte. Wie sieht dabei denn dann die Konfiguration auf den VMs und im proxmox node aus? Als Gateway dort dann jeweils für das öffentliche Netz die öffentliche ip der pfSense und für das private Netz die private ip der pfSense eintragen? Wie sähe die config der vms aus?
Würde das mit meiner obigen proxmox node config gehen oder muss ich dabei anders vorgehen?
 
Was kommt denn per LACP bei dir an? Kommen da auch andere Netze per VLAN? Ist das öffentliche Netz nicht getagged? Welches Subnetz hat das öffentliche Netz und was ist da das Gateway? Mit den Infos kann ich dir ein Konfigurationsbeispiel geben. Das Öffentliche Netz brauchst du nicht nennen. Reicht also x.x.x.0/24 mit GW auf .1. Das würde mir reichen.

Hat es ein Grund wieso dein proxmox auf beiden Bridges eine Adresse hat? Ansonsten würde ich auf der öffentlichen Bridge den keine IP geben.
 
Über LACP kommt nur das öffentliche Netz und das private Netz an, das private über VLAN 1.
Das öffentliche Netz ist x.x.x.1/26 (der erste Node hat die ip x.x.x.2). Gateway ist x.x.x.1
Als privates Netz wollen wir x.x.x.0/24 nehmen.


Hat es ein Grund wieso dein proxmox auf beiden Bridges eine Adresse hat? Ansonsten würde ich auf der öffentlichen Bridge den keine IP geben.
Ich hatte das bisweilen so, weil ich es für notwendig gehalten habe, wenn der Node keine öffentliche ip direkt braucht aber dennoch die updates ziehen kann, wäre das für mich auch in Ordnung.
 
Also ich würde nach Möglichkeit nur das nach extern freigeben, was auch wirklich benötigt wird. Das reduziert die Angriffsfläche. Entsprechend würde ich deine Bridge anders einstellen. Auch würde ich nicht für das VLAN selbst eine eigene Bridge einstellen, sondern eine Bridge mit VLAN aware nehmen. So kannst du beliebige VLANs nutzen um das Netz zu trennen und musst bei neuen VLANs nicht eine weitere Bridge einrichten. Ist aber nur optional. Mit deinem Setup sollte es auch gehen.

Als erstes legst du eine weitere Bridge über das WebGUI an. Nennen wir sie mal vmbr1. Alle internen VMs, die eine öffentliche IP mit Filterung haben sollen, bekommen das Interface mit vmbr1.

Die pfSense VM bekommt 2 Interfaces. Einmal mit vmbr0 und einmal mit vmbr1. WAN wäre vmbr0 und LAN vmbr1. Beide Interfaces dann in eine Bridge packen. (Optionale Anmerkung: Ich würde empfehlen pfSense über ein sicheres Netz zu administrieren. Daher sind eher 3 Interfaces sinnvoll. vmbr0 wäre WAN, das verwaltung LAN dann LAN und vmbr1 OPT1. Bridge dann zwischen OPT1 und WAN). Auf WAN kann pfSense dann die .2 bekommen. Als GW wird .1 hinterlegt. (Wieder optional: Fürs nur filtern und wenn man IPs sparen will, braucht die pfSense nicht umbedingt eine IP auf WAN). Alle internen vms bekommen dann .2,.3,... Als GW bei en internen vms wird nicht die pfsense sondern die .1 eingetragen!

In pfSense kann man einstellen ob auf den Interfaces oder der Bridge gefiltert wird. Je nach Szenario ist das ein oder andere zu bevorzugen. Wichtig ist, dass man beim Filtern auf den interfaces dann immer die Paketrichtung betrachtet. Also eingehendes Paket auf WAN wäre dann ein ausgehendes auf LAN (bzw. OPT1). Bei Filtern auf nur dem Bridge-Interface ist es einfacher ein Überblick über die Regeln zu haben.
 
Last edited:
Als erstes legst du eine weitere Bridge über das WebGUI an. Nennen wir sie mal vmbr1. Alle internen VMs, die eine öffentliche IP mit Filterung haben sollen, bekommen das Interface mit vmbr1.
Dafür dann die vmbr0:1 entfernen oder bleibt die bestehen? Die vmbr1 wird dann auf welches Interface gebindet?
Die IP-Adressen aus den anderen configs dann entfernen oder eine IP-Adresse für vmbr1 konfigurieren?

Alle internen vms bekommen dann .2,.3,... Als GW bei en internen vms wird nicht die pfsense sondern die .1 eingetragen!
Ich dachte immer, damit der Traffic über die pfSense gehen kann, muss das Gateway der VMs (bei WAN und LAN) auf die entsprechende IP der pfSense eingestellt werden. Liege ich damit falsch?
 
Wenn du deine vmbr0:1 noch brauchst behalte sie. Die vmbr1 bekommt kein echtes interface. Es ist eine serverinterne Bridge.

Ich dachte immer, damit der Traffic über die pfSense gehen kann, muss das Gateway der VMs (bei WAN und LAN) auf die entsprechende IP der pfSense eingestellt werden. Liege ich damit falsch?

Es kommt immer auf das Szenario an. Im Netzwerk werden nur Pakete versendet. Was mit den Paketen passiert hängt von den jeweiligen geraten ab. Es muss auch nicht zwingend eine IP-Adresse vorhanden sein. Wenn du mehrere öffentliche Netzwerke hast, ist es sinnig der pfSense eine Ip zu geben und dann darauf zu Routen. Dahinter kannst du die Netze dann normal nutzen. In deinem Fall ist die Bridge sinniger. Die pfSense ist quasi ein Raum mit 2 Türen. Durch die eine gehts rein, durch die andere raus. In dem Raum hockt jemand der den Verkehr kontrolliert. Dazu ist es nicht nötig expliziert das Routing auf die pfSense zu legen. Sie agiert als transparenter Teilnehmer auf Layer 2 nur mit mehr Funktionen.

Es gibt auch Anbieter die generell ihre Gateways in andere Subnetze liegen hat und dann ein explizites Routing auf dem Interface benötigen wie z.B. bei OVH. Im Prinzip ist alles möglich, man muss nur immer beachten, wie ein Paket weitergeleitet wird und welche Informationen die Teilnehmer benötigen um das Paket weiterzuleiten.
 
Wenn du deine vmbr0:1 noch brauchst behalte sie. Die vmbr1 bekommt kein echtes interface. Es ist eine serverinterne Bridge.
Da ich ein Cluster mit drei nodes über das interne Netz betreibe, denke ich schon, oder?
Denn für das Cluster brauche ich eine Bridge, die auch mit den anderen Servern über das lokale Netz kommunizieren kann.
 
Sofern das IP-Netz als Clusternetz genutzt wird ja. Dann solltest du es auf keinen Fall löschen. Falls du ausersehen vmbr0 dafür verwendest darfst du hier die Adresse nicht raus nehmen, sonst ist das Cluster kaputt. Man kann aber die IPs ändern. Dazu gibt es Anleitungen.

Das Cluster Netzwerk sollte nach Möglichkeit ein eigenes Netzwerk sein, am besten mit dedizierter Verbindung. Geht aber auch ohne, kann aber bei hoher Auslastung zu Problemen führen.
 
Last edited:
Wir haben für das Cluster Netzwerk leider nur die Möglichkeit des VLANs.
Dann würde nach meinem Verständnis und deinen Aussagen die Netzwerk Config der Proxmox Nodes wie folgt aussehen:

Code:
auto lo
iface lo inet loopback

iface eno1 inet manual

iface eno2 inet manual

iface enp1s0f0 inet manual

iface enp1s0f1 inet manual

iface enxb03af2b6059f inet manual

auto bond0
iface bond0 inet static
        bond-slaves             enp1s0f0 enp1s0f1
        bond-miimon             100
        bond-mode               802.3ad
        bond-xmit-hash-policy   layer3+4

auto bond0:1
iface bond0:1 inet static
        bond-slaves             enp1s0f0 enp1s0f1
        bond-miimon             100
        bond-mode               802.3ad
        bond-xmit-hash-policy   layer3+4

auto vmbr0
iface vmbr0 inet static
        address xx.xx.xx.xx/26
        gateway xx.xx.xx.1 # Public IP Gateway
        bridge-ports bond0
        bridge-stp off
        bridge-fd 0

auto vmbr0:1
iface vmbr0:1 inet static
        address xx.xx.xx.xx/24
        bridge-ports bond0:1
        bridge-stp off
        bridge-fd 0

auto vmbr1
iface vmbr1 inet manual
    bridge-ports none
    bridge-stp off
    bridge-fd 0

Die vmbr0 beinhaltet weiterhin das öffentliche Netz mit dem Gateway auf .1 (Default Gateway des Subnetzes), vmbr0:1 ist das VLAN für das Cluster Netzwerk (hier würde ich dann die Gateway definierung entfernen) und das neue vmbr1 beinhaltet das Serverinterne Private Netz.

Die VMs auf dem Proxmox Node bekommen dann weiterhin zwei Netzwerkkarten, einmal für vmbr0 und vmbr1 mit jeweils der Konfiguration der IP-Adressse auf der VM.
Können bei diesem Konstrukt die VMs eigentlich noch im Cluster-Netzwerk über das interne IP-Netz miteinander kommunizieren?
 
Also zunächst solltest du überlegen wie dein Netzwerk aufgebaut sein soll und wie welches Netz geschützt werden soll. Dual homed hosts bieten einige Angriffsmöglichkeiten, sodass ich nicht umbedingt eine VM im internen und öffentlichen Netz gleichzeitig betreiben würde außer es besteht Notwendigkeit z.B. bei einem Proxy (Aber auch da gibt es umfangreichere Lösungen zur Netztrennung)

Die VMs mit den öffentlichen IPs können über die öffentlichen IPs miteinander kommunizieren ohne, dass die pfSense da etwas blockieren kann. Also sind die VMs damit quasi verbunden. Eine Extraverbindung über das CLuster-Netzwerk muss nicht sein. Solltest du zwischen VMs weitere Verbindungen benötigen, nimm weitere bridges (vmbr2,vmbr3 etc.) oder nutze eine Bridge mit VLAN aware und nutze dann unterschiedliche VLANs. Ich würde immer versuchen Netzwerke zu trennen.

Wenn deine Proxmox nodes nicht über die öffentliche IP erreichbar sein müssen, entferne die von der vmbr0. Aber prüfe vorher, wie du das Cluster eingerichtet hast. Nicht dass es über die öffentlichen IPs geht. Dann müsstest du das Cluster erst einmal auf die internen IPs umstellen.

Konfiguration müsste dann so sein: (Stelle das am besten über das WebGUI ein. Aus der vmbr0 die IP entfernen und eine Bridge hinzufügen)
Code:
auto vmbr0
iface vmbr0 inet manual
        bridge-ports bond0
        bridge-stp off
        bridge-fd 0

auto vmbr0:1
iface vmbr0:1 inet static
        address xx.xx.xx.xx/24
        bridge-ports bond0:1
        bridge-stp off
        bridge-fd 0

auto vmbr1
iface vmbr1 inet manual
    bridge-ports none
    bridge-stp off
    bridge-fd 0
 
Vielen Dank dir für deine Hilfe und Erklärungen.
Ich habe es jetzt eingerichtet bekommen und es funktioniert soweit auch ganz stabil :)
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!