[pve-devel] [PATCH firewall v3 03/14] firewall: add connmark rule with VMID to all guest chains

Christoph Heiss c.heiss at proxmox.com
Thu Jul 3 13:54:05 CEST 2025


Adds a connmark attribute with the VMID inside to anything flowing
in/out the guest, which are also carried over to all conntrack entries.

This enables differentiating conntrack entries between VMs for
live-migration.

Signed-off-by: Christoph Heiss <c.heiss at proxmox.com>
---
Changes v1 -> v2:
  * no changes

Changes v2 -> v3:
  * rebased on trixie

 src/PVE/Firewall.pm | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/PVE/Firewall.pm b/src/PVE/Firewall.pm
index 41b740a..e9996ef 100644
--- a/src/PVE/Firewall.pm
+++ b/src/PVE/Firewall.pm
@@ -2551,11 +2551,14 @@ sub ruleset_chain_add_input_filters {
 }
 
 sub ruleset_create_vm_chain {
-    my ($ruleset, $chain, $ipversion, $options, $macaddr, $ipfilter_ipset, $direction) = @_;
+    my ($ruleset, $chain, $ipversion, $options, $macaddr, $ipfilter_ipset, $direction, $vmid) = @_;
 
     ruleset_create_chain($ruleset, $chain);
     my $accept = generate_nfqueue($options);
 
+    # needs to be first, to ensure that it gets always applied
+    ruleset_addrule($ruleset, $chain, "", "-j CONNMARK --set-mark $vmid");
+
     if (!(defined($options->{dhcp}) && $options->{dhcp} == 0)) {
         if ($ipversion == 4) {
             if ($direction eq 'OUT') {
@@ -2796,7 +2799,14 @@ sub generate_tap_rules_direction {
     if ($options->{enable}) {
         # create chain with mac and ip filter
         ruleset_create_vm_chain(
-            $ruleset, $tapchain, $ipversion, $options, $macaddr, $ipfilter_ipset, $direction,
+            $ruleset,
+            $tapchain,
+            $ipversion,
+            $options,
+            $macaddr,
+            $ipfilter_ipset,
+            $direction,
+            $vmid,
         );
 
         ruleset_generate_vm_rules(
-- 
2.49.0





More information about the pve-devel mailing list