Swap tracking and nat order

This commit is contained in:
Viktor Liu
2025-06-17 15:45:22 +02:00
parent 51b9e93eb9
commit 1a3b04d2fe
+11 -16
View File
@@ -599,14 +599,6 @@ func (m *Manager) processOutgoingHooks(packetData []byte, size int) bool {
return false return false
} }
translated := m.translateOutboundDNAT(packetData, d)
if translated {
if err := d.parser.DecodeLayers(packetData, &d.decoded); err != nil {
m.logger.Error("Failed to re-decode packet after DNAT: %v", err)
return false
}
}
srcIP, dstIP := m.extractIPs(d) srcIP, dstIP := m.extractIPs(d)
if !srcIP.IsValid() { if !srcIP.IsValid() {
m.logger.Error("Unknown network layer: %v", d.decoded[0]) m.logger.Error("Unknown network layer: %v", d.decoded[0])
@@ -618,6 +610,7 @@ func (m *Manager) processOutgoingHooks(packetData []byte, size int) bool {
} }
m.trackOutbound(d, srcIP, dstIP, size) m.trackOutbound(d, srcIP, dstIP, size)
m.translateOutboundDNAT(packetData, d)
return false return false
} }
@@ -745,15 +738,17 @@ func (m *Manager) dropFilter(packetData []byte, size int) bool {
return false return false
} }
if m.stateful && m.isValidTrackedConnection(d, srcIP, dstIP, size) { translated := m.translateInboundReverse(packetData, d)
translated := m.translateInboundReverse(packetData, d) if translated {
if translated { // Re-decode after translation to get original addresses
// Re-decode after translation if err := d.parser.DecodeLayers(packetData, &d.decoded); err != nil {
if err := d.parser.DecodeLayers(packetData, &d.decoded); err != nil { m.logger.Error("Failed to re-decode packet after reverse DNAT: %v", err)
m.logger.Error("Failed to re-decode packet after reverse DNAT: %v", err) return true
return true
}
} }
srcIP, dstIP = m.extractIPs(d)
}
if m.stateful && m.isValidTrackedConnection(d, srcIP, dstIP, size) {
return false return false
} }