Proxmox nat-setup in Verbindung mit der Proxmox-Firewall (iptables-Stuff)

  • Hey zusammen,


    Nutzt jemand Proxmox in Verbindung mit einem nat-Setup? Alle meine VMs haben IPs aus dem Bereich 10.0.0.0/24 zugewiesen, damit diese auch untereinander kommunizieren können.

    Auf dem Host mit der öffentlichen IP habe ich manuell folgende iptables-Regel hinzugefügt


    iptables -t nat -A POSTROUTING -s '10.0.0.0/24' -o vmbr0 -j MASQUERADE


    Damit wird jeglicher ausgehender Verkehr maskiert und die privaten Adressen ersetzt. Das klappt auch wunderbar. Nur wenn ich die Firewall von Proxmox aktiviere, dann klappt das POSTROUTING nicht mehr.


    Alternativ würde es mir auch reichen, wenn ich iptables komplett manuell auf dem Host konfiguriere und die Proxmox-Lösung einfach nicht benutze, aber dafür müsste ich wissen, welche Ports Proxmox nutzt.

  • Nur wenn ich die Firewall von Proxmox aktiviere, dann klappt das POSTROUTING nicht mehr.

    Was macht die Firewall denn? Die muss ja irgendwie auch Regeln eintragen (oder löschen). Das würde ich doch mal als erstes analysieren.


    Alternativ würde es mir auch reichen, wenn ich iptables komplett manuell auf dem Host konfiguriere und die Proxmox-Lösung einfach nicht benutze, aber dafür müsste ich wissen, welche Ports Proxmox nutzt.

    https://pve.proxmox.com/wiki/Ports. Da ist die Frage, was du davon öffentlich verfügbar machen willst. Meines Erachtens ist das alles was für hinter einem VPN.

  • Ich glaube ich habe den Fehler gefunden. Die Proxmox-Firewall legt haufenweise Chains an, wo man dann schnell mal den Überblick verliert.


    Mein POSTROUTING und PREROUTING durchläuft in jedem Fall noch die FORWARD Chain und diese wird default auf DROP gestellt.


    Ich habe iptables jetzt manuell konfiguriert und nach außen hin nur das Webinterface freigegeben. Ich sehe keinen Grund https noch über VPN zu tunneln.

  • Ja ich gebe dir Recht, was nicht öffentlich sein muss, sollte man auch nicht öffentlich zugänglich machen.


    Genau genommen ist es bei mir nicht öffentlich, da der Proxmox-Server in einem Unternehmensnetzwerk steht. Die Rechner im Unternehmen haben zwar öffentliche IP-Adressen, aber da gibt es noch eine Firewall, sodass die Weboberfläche nur im Unternehmensnetzwerk erreichbar ist.


    Proxmox unterstützt glaub noch 2 Faktor Authentisierung evtl. mache ich das noch zusätzlich.

  • Mit der integrierten Firewall hatte ich nur Probleme bzgl. NAT, daher hab ich ganz old-school iptables-Regeln manuell angelegt.


    Die Config kann ich morgen mal hier reinkopieren, falls es jemanden interessiert :)


    EDIT:


    Also im Prinzip hab ich eigentlich nur ein kleines Shellscript das als Parameter die VM-ID nimmt (meine VMs haben alle IPs nach dem Schema 10.0.0.<VM-ID> bzw fc00::<VM-ID>), den Host Port, den VM Port, und das Protokoll. Das sieht dann ca. so aus:


    Code: route-port.sh
    iptables -t nat -A PREROUTING -i enp35s0 -p $PROTOCOL --dport $HOST_PORT -j DNAT --to-destination 10.0.0.${VM_ID}:${VM_PORT}
    iptables -A FORWARD -p $PROTOCOL --dport $HOST_PORT -j ACCEPT
    ip6tables -t nat -A PREROUTING -i enp35s0 -p $PROTOCOL --dport $HOST_PORT -j DNAT --to-destination [fc00::${VM_ID}]:${VM_PORT}
    ip6tables -A FORWARD -p $PROTOCOL --dport $HOST_PORT -j ACCEPT

    Das wird dann mehrere male von meinem "Haupt-iptables-Skritp" aufgerufen ($route ist der Pfad zur route-port.sh).

    Sehr unsauber, aber es funktioniert wenigstens. Das sind jetzt nur die Regeln für öffentlich erreichbare Ports. Für das Webinterface z.b. habe ich folgende Regeln, wobei $fly_v4 und $fly_v6 jeweils die IPs vom Wireguard sind:


    Sind wahrscheinlich ziemliche Drecks-Regeln, aber wie gesagt, funktioniert für mich :D


    Auf dem Host läuft auch noch irgendwas auf en Ports 111, 3128 und 4949, ich weiß nicht mehr was das ist und hab grad auch keine Lust nachzugucken, ich weiß nur dass das bei Proxmox standardmäßig offen ist, die hab ich daher ebenfalls dicht gemacht und nur für den Wireguard geöffnet.


    Hier mal die komplette ungeschnittene Config:
    iptables.sh: https://paste.jeff-media.com/?…MH2sskfiU3j4nJ73jASuWPtyj
    route-port.sh: https://paste.jeff-media.com/?…sais3u9G973hMAbLejdSFwYeq

    Meine Minecraft-Plugins auf SpigotMC (Open Source): www.spigotmc.org/members/mfnalex.175238/#resources

    Discord: discord.jeff-media.com

    5 Mal editiert, zuletzt von mfnalex ()

    Gefällt mir 2
  • ip6tables -t nat -A PREROUTING -i enp35s0 -p $PROTOCOL --dport $HOST_PORT -j DNAT --to-destination [fc00::${VM_ID}]:${VM_PORT}

    oh, IPv6 NAT auf eine ULA. welche vorteile hat das gegenüber einem forward auf eine public IP? ok, man braucht kein zusätzliches IPv6 netz oder das bestehende splitten. aber ausser topology hiding sonst noch was?