#3904: Manual NAT vs Double NAT: The Measurable Reality

Tracing OPNsense packet paths and quantifying double NAT's real latency cost.

Featuring
Listen
0:00
0:00
Episode Details
Episode ID
MWP-4083
Published
Duration
36:34
Audio
Direct link
Pipeline
V5
TTS Engine
chatterbox-regular
Script Writing Agent
deepseek-v4-pro

AI-Generated Content: This podcast is created using AI personas. Please verify any important information independently.

This episode tackles two specific, measurable network questions that plague homelab and pro-sumer setups: the mechanics of manual outbound NAT rules in OPNsense and the real-world latency penalty of double NAT. The discussion avoids forum mythology and focuses on packet-level tracing and actual benchmark data.

On the mechanism side, the episode traces what happens when a packet hits a manual NAT rule versus an automatic one in OPNsense. Automatic mode generates one rule per interface and subnet combination, working for most single-WAN setups but failing with multi-WAN configurations where routing and NAT decisions can get out of sync. Manual mode gives total control by stopping all automatic rule generation, but with total responsibility — forgetting to create a rule for a new VLAN effectively black-holes that traffic. Hybrid mode is presented as the sensible middle ground, keeping automatic rules as a safety net while allowing manual rules to be evaluated first. The critical distinction is that outbound NAT happens after the routing decision, meaning NAT rules cannot fix routing problems.

On the latency front, the episode examines double NAT — where a firewall performs NAT on traffic already translated by an upstream device, like an ISP modem-router combo that isn't truly in bridge mode. The discussion separates the actual overhead of the extra translation step from the much larger latency costs typically caused by bufferbloat. The key takeaway is that while misconfigured NAT breaks real things like gaming lobbies and VoIP calls, the pursuit of single-digit millisecond improvements from eliminating double NAT is often misguided when bufferbloat is costing a hundred times that.

Downloads

Episode Audio

Download the full episode as an MP3 file

Download MP3
Transcript (TXT)

Plain text transcript file

Transcript (PDF)

Formatted PDF with styling

#3904: Manual NAT vs Double NAT: The Measurable Reality

Corn
Daniel sent us this one — and I think it's going to resonate with anyone who's ever stared at an OPNsense firewall page and realized they're just clicking buttons without knowing what actually happens under the hood. He's asking about two things: what configuring manual outbound NAT rules actually does at the packet level, and how much of a real latency penalty double NAT actually incurs. Not the forum mythology, not the Reddit conventional wisdom — the measurable reality.
Herman
This is the kind of question where the gap between "it works" and "I understand it" is enormous. And it's getting more relevant by the day. The homelab and pro-sumer space has exploded — people are running OPNsense or pfSense boxes, multi-WAN setups, VLAN-segmented networks — and manual NAT misconfiguration and accidental double NAT are consistently the top two support pain points across every forum.
Corn
Yet every guide basically says "set it to hybrid and move on.
Herman
Which works, mechanically — but it leaves people with no mental model for what they've actually done. So when something breaks, they're completely lost. Daniel's question is basically: can we fix that gap?
Corn
Let's start by defining exactly what we mean. When we say "manual outbound NAT," we're talking about taking control of source NAT decisions on your firewall — deciding which source IP your traffic presents to the internet. And double NAT is the condition where your firewall performs NAT on traffic that's already been NAT'd by an upstream device. Think ISP modem-router combo that claims to be in bridge mode but absolutely isn't.
Herman
The bridge mode lie is practically a genre at this point. But before we get to double NAT, let me frame what this episode is and isn't. This is a mechanisms-and-measurement episode. We're going to trace what happens at the packet level when you flip from automatic to manual NAT in OPNsense, and we're going to look at actual benchmark data on double NAT latency. This is not a step-by-step config walkthrough. We're assuming you know what NAT is at a high level — a private IP like 192.10 can't route on the public internet and needs to be translated.
Corn
If you need the NAT 101, there are a thousand YouTube videos for that. What we're doing here is the why and the how much. Why does manual NAT break things when you first enable it? What's actually different between automatic, manual, and hybrid modes? And when people blame double NAT for their lag spikes, what does the data actually show?
Herman
Who should care? Anyone running OPNsense, pfSense, or any similar firewall platform with non-trivial routing. If you've got a single flat network behind an ISP router, this episode might be interesting but it's not your daily reality. If you've got VLANs, multiple WAN connections, or you're self-hosting services — this is your life.
Corn
The stakes here aren't academic either. Misconfigured NAT breaks real things. Peer-to-peer gaming lobbies fail. VoIP calls get one-way audio. Self-hosted services become unreachable. And the double NAT latency question — people chase single-digit millisecond improvements while ignoring bufferbloat costing them a hundred milliseconds. We're going to quantify all of that.
Herman
With that framing in place, let's open the hood on OPNsense and trace exactly what happens when a packet hits a manual NAT rule versus an automatic one.
Corn
Walk me through the automatic mode first. What's OPNsense actually doing when you leave it on the default?
Herman
In automatic mode — and this is OPNsense 24.7 behavior specifically — the system generates one outbound NAT rule per interface plus subnet combination. It looks at each of your internal interfaces, checks what subnets are configured on them, and creates a rule that says: traffic from this subnet, exiting through the WAN interface, gets its source address translated to the WAN interface's IP address. Clean, simple, works for probably eighty percent of single-WAN setups.
Corn
The rule is essentially "make everything look like it came from the WAN IP.
Herman
The source NAT decision is completely automated. The firewall sees a packet from 192.10 headed to the internet, consults its automatic rule table, and rewrites the source to your public IP. The return traffic comes back to that public IP, the firewall reverses the translation, and the packet lands back at 192.It's stateful — the connection tracking table remembers the mapping.
Corn
When does automatic mode fail?
Herman
The classic failure is multi-WAN. If you've got two internet connections — say a primary fiber link and a backup LTE connection — automatic mode doesn't know which WAN interface to bind specific traffic to. It generates rules for both, but the routing decision and the NAT decision can get out of sync. Traffic might route out WAN two but get NAT'd to WAN one's IP. The return traffic comes back to the wrong interface and gets dropped.
Corn
That's where manual mode comes in.
Herman
When you switch to manual outbound NAT mode, you're telling OPNsense: I will define every single source NAT rule myself. The automatic rule generation stops completely. If you don't create a rule for a subnet, traffic from that subnet simply never gets translated — and because private IPs can't route on the public internet, those packets are effectively black-holed.
Corn
Which is why the number one "why can't I reach the internet from my IoT VLAN" post on every forum traces back to someone switching to manual mode and forgetting to create a rule for the new VLAN they added last week.
Herman
That's the trap. Manual mode gives you total control, and total control means total responsibility. There's no safety net. The packet arrives at the WAN interface with a 192.168 source address, the next hop router sees it, and — dropped. Not even logged by default, which makes troubleshooting a nightmare.
Corn
What does a manual rule actually specify at the packet level?
Herman
Let's trace a concrete example. You've got a LAN client at 192.10 sending a packet to some server on the internet. The packet arrives at your OPNsense firewall with source IP 192.The firewall consults the outbound NAT rule table — and in manual mode, it's only your rules. A typical manual rule says: traffic from source 192.0/24, exiting interface WAN, translate the source to the WAN address. The firewall rewrites the source IP in the packet header from 192.10 to your public IP, adjusts the checksum, and sends it out. The return packet comes back addressed to your public IP. The firewall looks up the connection in its state table, finds the original mapping, rewrites the destination back to 192.10, and forwards it to the LAN interface. All of this happens per packet, in kernel space, extremely fast — we're talking microseconds of processing overhead.
Corn
The real power of manual rules is the ability to pin specific traffic to specific WAN IPs.
Herman
That's the killer feature. If you've got a multi-WAN setup, you can create a manual rule that says: traffic from the VoIP VLAN, source 192.0/24, always gets NAT'd to the IP of WAN two. Traffic from the general LAN goes out WAN one. This is policy routing at the NAT layer, and it's essential for anything where source IP consistency matters — SIP trunking, certain VPN configurations, services that whitelist by IP.
Corn
Then there's the static port option.
Herman
Static port is one of those settings that sounds obscure until it bites you. By default, when OPNsense performs source NAT, it not only rewrites the source IP — it also rewrites the source port. This is called port address translation. The firewall assigns a random high-numbered port from its pool. For most protocols, this is fine. The server doesn't care what source port the client used. But some protocols embed the source port in the application-layer data. FTP in active mode is the classic example — the client sends a PORT command containing its source port, and the server connects back to that port. If the firewall has rewritten the port, the PORT command contains the wrong number, and the data connection fails. SIP has the same problem — the SIP headers contain the source port for the media stream, and if NAT changes it without the application layer knowing, you get one-way audio. Static port tells the firewall: rewrite the source IP but leave the source port alone.
Corn
Then there's hybrid mode, which is what Daniel was hinting at — the "just set it to hybrid" advice.
Herman
Hybrid mode is the sensible middle ground. It keeps all the automatic rules OPNsense would normally generate, but it lets you insert manual rules that get evaluated first. The rule evaluation order is: manual rules at the top, then automatic rules as a fallback. If a packet matches one of your manual rules, that rule is applied and the automatic rules are never consulted. If no manual rule matches, the automatic rules catch it.
Corn
It's a safety net with override capability.
Herman
It prevents the black-hole problem. You can create a manual rule for your VoIP VLAN that pins traffic to a specific WAN IP with static port, and everything else falls through to the automatic rules and works exactly as it did before. This is why every guide recommends starting with hybrid — it's the configuration that's hardest to shoot yourself in the foot with.
Corn
The failure mode people hit is switching straight to manual because it sounds more professional, then wondering why half their network went dark.
Herman
The OPNsense docs are actually explicit about this. The rule ordering is documented — manual rules are evaluated top to bottom, first match wins, then automatic rules if nothing matched. But people skip the docs, flip the mode dropdown, and panic.
Corn
I want to dig into one more thing on the mechanism side. When the firewall processes a packet through a NAT rule, is this happening before or after the routing decision?
Herman
On OPNsense, which uses pf under the hood, outbound NAT happens after the routing decision. The packet arrives, the firewall determines which interface it's going to exit based on the routing table, and then the NAT rules for that interface are evaluated. This is why the outbound NAT rules are interface-specific — the rule only applies to traffic that has already been routed to that interface.
Corn
Which is why you can't fix a routing problem with a NAT rule.
Herman
If your traffic is routing out the wrong WAN interface, no amount of NAT rule tweaking will fix it. You need to fix the routing — policy-based routing, gateway groups, whatever. NAT just handles the source address translation after the routing decision is made. This distinction trips people up constantly.
Corn
That's the mechanism side. Manual NAT gives you control over source IP selection and port behavior, hybrid mode gives you that control with a safety net, and automatic mode works until you have multiple WAN connections or protocols that embed port information.
Herman
Now let's talk about the cost of getting it wrong — specifically, what double NAT actually does to your latency and connection stability. Because this is where the forum mythology gets really detached from the measurements.
Corn
Let's define double NAT precisely. Double NAT happens when your OPNsense firewall's WAN interface receives an IP address that's already been translated once — meaning the device upstream of you already performed NAT on that traffic before handing it off. The classic scenario: your ISP gave you a modem-router combo, you plugged your own firewall into one of its LAN ports, and now both devices are doing NAT.
Herman
The "bridge mode" checkbox on the ISP router that doesn't actually bridge anything. The ISP router's WAN interface has the public IP. Its LAN interface is handing out 192.Your OPNsense box gets 192.2 on its WAN interface, then creates its own 192.x network behind it. A packet from your LAN client goes through two translation hops before it ever sees the public internet. Source address gets rewritten twice, connection state gets tracked twice, and return traffic has to be untangled twice.
Corn
The question Daniel's really asking is: how much does that second translation actually cost?
Herman
The answer is more interesting than most people expect. There are benchmarks on this — tests from 2024 through this year comparing single NAT versus double NAT. The per-packet processing overhead under light load — think web browsing, email, streaming — is between zero point three and one point five milliseconds.
Corn
That's basically noise.
Herman
For most workloads, yes. Under heavy concurrent connection loads — torrent swarms, gaming with simultaneous VoIP, anything hammering thousands of connections — the penalty climbs to about five to eight milliseconds. Measurable, but still not the kind of thing that explains someone screaming about hundred-millisecond lag spikes in their game.
Corn
What actually explains those spikes? Because they're real — people aren't imagining them.
Herman
Connection tracking exhaustion. This is the real penalty of double NAT, and it's almost never what people are talking about when they blame "double NAT latency." Every device performing NAT maintains a connection tracking table — conntrack — that maps internal IP-port pairs to external ones. Your OPNsense box has one. The upstream ISP router has another. And here's the problem: consumer ISP combo routers typically have conntrack tables capped at four thousand to eight thousand entries.
Corn
Which sounds like a lot until you do the math.
Herman
It evaporates fast. A typical home today — twenty IoT devices, two gaming PCs, four smartphones — can easily generate eight thousand plus concurrent connections. Every smart speaker phoning home, every background app update, every browser tab keeping connections alive. When the upstream router's conntrack table fills up, it starts dropping new connection attempts silently. No RST packet, no ICMP unreachable — just a SYN that disappears into the void.
Corn
From the user's perspective, that looks exactly like lag.
Herman
Worse — it looks like intermittent failure. A website doesn't load, you refresh, it works. A game stutters for two seconds, then recovers. VoIP drops a syllable. These aren't consistent latency increases, they're random drop events, and they're maddening to troubleshoot because they don't reproduce reliably.
Corn
Whereas a consistent five millisecond penalty from the extra NAT hop would be completely invisible.
Herman
The conntrack exhaustion problem is the hidden cost. And it gets worse because double NAT means two separate conntrack tables that don't coordinate. The upstream router has no idea which connections your OPNsense box actually cares about. It's making eviction decisions blindly — and it might drop the connection your game is using while preserving the one your smart thermostat opened three hours ago.
Corn
The latency myth has a kernel of truth wrapped in the wrong diagnosis.
Herman
There's a knock-on effect that matters even more for some use cases. UPnP and NAT-PMP break completely across a double NAT boundary. These protocols let applications request automatic port forwarding — your game console asks the router to open port 3074 so it can host a lobby. But with double NAT, the request hits your OPNsense box, which opens the port — but the upstream ISP router has no idea any of this happened.
Corn
The port is open on your firewall but still blocked at the ISP router.
Herman
There's no mechanism for the request to propagate upstream. UPnP is designed for a single NAT boundary. So automatic port forwarding just silently fails. Consoles report "moderate NAT" or "strict NAT," peer-to-peer games can't establish connections, and the user has no idea why.
Corn
Which forces manual port forwarding on both devices.
Herman
A configuration nightmare. You have to log into the ISP router, set up a port forward to your OPNsense WAN IP, then log into OPNsense and set up a second port forward to the actual internal client. And if either device's IP changes — which happens constantly with DHCP — everything breaks. It's fragile in a way that single NAT setups never are.
Corn
When is double NAT actually acceptable? Because plenty of people are running it without noticing.
Herman
One, if your upstream device is in true bridge mode — modem only, no routing, no NAT — there is no double NAT. That's the ideal. Two, if you can't get bridge mode because your ISP locks it down — common with TV or VoIP bundles where the ISP router needs to manage its own services — the workaround is putting your OPNsense box in the ISP router's DMZ.
Corn
DMZ doesn't eliminate double NAT.
Herman
It doesn't, and this is a critical misconception. DMZ mode on a consumer router means "forward all unsolicited inbound traffic to this internal IP." The ISP router still performs NAT on outbound traffic. Your OPNsense WAN interface still gets a private IP. Double NAT persists. What DMZ does is fix the inbound problem — port forwards on your OPNsense box will actually work because unsolicited traffic from the internet gets passed through to you.
Corn
DMZ solves the port forwarding nightmare but not the conntrack exhaustion.
Herman
The upstream router is still tracking every connection. Its table can still fill up. DMZ is damage mitigation, not a cure. The only real cure is bridge mode, or getting your ISP to assign you a static public IP. That often forces them to configure true bridging because they can't do NAT with a static public IP on your device without breaking things.
Corn
If you're already in RFC 1918 space on your WAN interface, you know you're double NAT'd.
Herman
That's the definitive test. Open your OPNsense dashboard, look at the WAN IP. If it starts with ten dot, or 192.168, or 172.16 through 172.31 — you're behind another NAT device. No ambiguity, no guessing. Those are private address ranges by definition. The dashboard literally color-codes private IPs differently, but people still miss it. They'll spend hours troubleshooting "why is my port forward not working" without ever checking whether their WAN IP starts with ten dot.
Corn
We've established that double NAT's real penalty is connection tracking collapse, not a latency tax. But I want to circle back to something you mentioned earlier about hybrid mode — the rule evaluation order. You said manual rules are evaluated first, then automatic. Is that strictly top-to-bottom within the manual set?
Herman
And this matters more than people realize. OPNsense evaluates manual outbound NAT rules in strict top-to-bottom order — first match wins. The moment a packet matches a rule, that translation is applied and no further rules are checked. If you've got a broad rule at the top that matches everything, nothing below it ever fires.
Corn
Ordering is policy.
Herman
Ordering is absolutely policy. The classic mistake is creating a catch-all manual rule — "NAT everything from LAN to WAN address" — and placing it above a more specific rule for your VoIP subnet. The specific rule never matches because the broad rule already grabbed the packet. You get no errors, no warnings, just silent misbehavior.
Corn
Which brings us back to the "why does manual mode break things" question. The answer isn't that manual mode is buggy — it's that people don't realize they've inherited the entire rule ordering problem the moment they flip that switch.
Herman
The OPNsense docs are actually quite clear about this if you read them. They explicitly state that manual rules are evaluated first, then automatic rules as fallback in hybrid mode, and that in pure manual mode there is no fallback at all. The documentation even includes a diagram of the packet flow through the NAT subsystem — it hits the outbound NAT rules after routing, after firewall rules, right before it exits the interface.
Corn
If you're troubleshooting a NAT issue, the order of operations is: check routing first, then firewall rules, then NAT rules. In that sequence.
Herman
Because each layer depends on the one before it. A packet that's routed incorrectly never reaches the right NAT rule. A packet blocked by a firewall rule never gets NAT'd at all — it's dropped before NAT processing. This is why tcpdump on the WAN interface is the ultimate diagnostic tool. If you see packets leaving with a private source IP, your NAT rule isn't matching. If you see no packets at all, the problem is upstream — routing or firewall.
Corn
One thing we haven't touched on is the static port tradeoff. You explained why it matters for FTP and SIP, but what's the downside of just enabling it everywhere?
Herman
The downside is port collision risk. When OPNsense does port address translation — rewriting the source port randomly — it's using a pool of roughly sixty thousand ephemeral ports. The randomization makes collisions between two internal clients using the same source port extremely unlikely. If you disable port randomization with static port, and two internal clients both happen to use source port 5060 for SIP traffic, the firewall has a problem. The second connection attempt fails — or worse, the firewall rewrites it to a different port, which breaks the SIP signaling anyway. This is why the best practice is to use static port surgically — only on the specific rules where it's needed, for the specific subnets and destination ports where the protocol embeds port information.
Corn
The manual rule for SIP traffic would specify source subnet, destination port 5060, and static port enabled. Everything else falls through to automatic rules with normal port randomization.
Herman
That's the clean approach. And this is where hybrid mode really shines — you can add that one surgical rule without touching anything else.
Corn
There's another failure pattern worth mentioning that I see constantly. Someone sets up a new VLAN — say VLAN 30 for guest Wi-Fi, subnet 192.0/24 — configures DHCP, firewall rules, everything looks right, but no internet access. And the culprit is always the same thing.
Herman
No outbound NAT rule for the new subnet. In automatic mode, OPNsense would have generated one automatically. In hybrid mode, same thing — the automatic fallback catches it. But in pure manual mode, that subnet is invisible to the NAT system until you explicitly create a rule. The packet hits the routing table, gets routed to the WAN interface, then the NAT subsystem looks for a matching rule, finds nothing, and drops it.
Corn
The traffic just... No ICMP error, no log entry by default.
Herman
This is the number one "why can't my IoT VLAN reach the internet" post on the OPNsense forum. It's so common it should be a sticky. The fix is trivial once you know to look for it — add a manual outbound NAT rule for the new subnet — but the diagnosis is brutal because nothing logs the drop. The firewall says "this packet is allowed," forwards it toward the WAN interface, and then the NAT engine says "I have no translation rule for this source" and drops it. Two different subsystems, two different logging configurations. It's a gap in the diagnostic surface that's caught a lot of people.
Corn
The practical takeaway for anyone setting up OPNsense today is: start in hybrid mode, create manual rules only for the traffic that needs specific treatment, and check your WAN IP before you do anything else — because if it's in RFC 1918 space, you've got bigger problems than NAT rule ordering.
Herman
Let's turn that into a practical checklist you can use tonight.
Corn
First thing — before you touch a single NAT rule — check your WAN IP. If it's in RFC 1918 space, you're double NAT'd. That's ten dot anything, 192.168 dot anything, or 172.16 through 172.No exceptions, no edge cases.
Herman
If you are double NAT'd, the fix order is: bridge mode first, DMZ second, static public IP request third. True bridge mode on the ISP router eliminates double NAT entirely — the modem passes the public IP straight through to your OPNsense box, no translation layer. But a lot of ISPs lock bridge mode behind a phone call or bury it in a hidden config page.
Corn
Some don't offer it at all.
Herman
If you've got an ISP that provisions TV or VoIP through the same router, they often refuse to enable bridge mode because their services depend on the router's internal routing. In that case, DMZ mode pointed at your OPNsense WAN IP is the workaround. It doesn't remove double NAT — the upstream router still translates outbound traffic — but it solves the inbound port forwarding problem. Unsolicited traffic from the internet gets passed through to your firewall instead of being dropped at the ISP router.
Corn
As a last resort, requesting a static public IP from your ISP sometimes forces their hand. They often can't do carrier-grade NAT with a static assignment, so they'll configure true bridging to make it work.
Herman
Now, once you've confirmed you're not double NAT'd — or you've accepted that you are and mitigated it — the actual NAT mode configuration is straightforward. Start with hybrid. It keeps the automatic rules as a safety net and lets you add manual overrides for the traffic that needs specific treatment.
Corn
What traffic actually needs manual rules?
Herman
One, multi-WAN policy routing — you need traffic from specific subnets pinned to specific WAN IPs. Two, protocols that embed source port information in their application data — SIP, FTP active mode, some older VPN protocols. Those need static port enabled on the rule. Three, any scenario where you need a specific source IP presented to a remote service for whitelisting purposes.
Corn
For everything else, the automatic rules are fine.
Herman
Better than fine — they handle port randomization properly, which avoids the collision risk we talked about. The moment you start enabling static port on broad rules, you're inviting problems.
Corn
Once you've created your manual rules, verify them. Don't assume they're working because the internet "feels fine." Run tcpdump on the WAN interface and confirm that traffic is exiting with the source IP you expect. If you see packets leaving with a private source address, your NAT rule isn't matching.
Herman
That diagnostic flow — check routing, then firewall rules, then NAT rules, in that order — will catch almost everything. Most "NAT problems" are actually routing or firewall problems that manifest at the NAT layer.
Corn
The latency myth is worth busting explicitly here. If you're chasing single-digit millisecond improvements by eliminating double NAT while your Wi-Fi is adding fifty milliseconds of jitter, you're optimizing the wrong thing. Fix bufferbloat first. Fix your wireless environment. Double NAT optimization is the final five percent polish for people who've already solved everything else.
Herman
The thing you'll actually feel isn't the consistent sub-two-millisecond penalty — it's the connection tracking exhaustion causing intermittent drops. If you're seeing random timeouts that resolve on retry, check your upstream router's conntrack table. If it's pegged at its maximum, that's your problem, not "double NAT latency.
Corn
There's one more thing worth flagging. UPnP and NAT-PMP aren't coming back across a double NAT boundary. If you're double NAT'd and you rely on automatic port forwarding for gaming consoles or P2P applications, you have two choices: manual port forwards on both devices, or eliminate the double NAT. There's no third option.
Herman
That checklist — check your WAN IP, start with hybrid, add surgical manual rules for SIP and multi-WAN, verify with tcpdump — that's the ninety percent solution. You can do all of that in fifteen minutes.
Corn
The one thing I'd add: after you switch to hybrid mode and add your manual rules, reboot something. A switch, a client, the firewall itself — just introduce a state change and watch what happens. A lot of NAT misconfigurations only surface when connections get rebuilt from scratch.
Herman
That's a clinical instinct right there. In medicine you always test the system under stress, not at rest. A NAT table that looks perfect at idle can fall apart the moment a torrent client opens three thousand connections.
Corn
If you're already double NAT'd and can't fix it — ISP won't bridge, DMZ is the best you've got — there's one more diagnostic worth running. Check your upstream router's conntrack maximum. Most consumer units expose it somewhere in the admin page, usually under status or diagnostics. If it's sitting at four thousand ninety six entries and your household is pushing eight thousand connections, you've found your intermittent failure.
Herman
Some routers let you increase that limit. Not all, but it's worth looking. Even bumping it to sixteen thousand can buy you breathing room. It doesn't fix the double NAT, but it delays the exhaustion collapse.
Corn
The collapse is what people actually experience. Not a steady latency penalty — a sudden, silent drop that looks exactly like a lag spike and vanishes on retry. That's the signature of conntrack exhaustion, and once you know to look for it, it's unmistakable.
Herman
The tragedy is how many people will spend hours tuning bufferbloat settings or replacing Ethernet cables chasing a problem that's happening inside a router they forgot existed. The ISP combo unit sitting in the corner, blinking quietly, running a conntrack table that filled up six months ago and has been dropping connections ever since.
Corn
Those steps will get you ninety percent of the way. But there's one bigger question looming over all of this. As ISPs keep running out of IPv4 addresses, carrier-grade NAT is becoming the default for more and more users. CGNAT means you're behind the ISP's own NAT layer before you even plug in your own router. Double NAT becomes triple NAT. And there's no bridge mode escape hatch — the ISP owns that translation layer and you can't touch it.
Herman
This is where the IPv6 people say "I told you so." And honestly, they've got a point. IPv6 eliminates the entire address scarcity problem that NAT was invented to solve. Every device gets a globally routable address. No translation, no conntrack exhaustion, no port forwarding nightmares. The NAT layer just...
Corn
We've been hearing that for twenty years.
Herman
Adoption is actually moving now. Major ISPs are deploying IPv6, mobile networks have been IPv6-native for years, and OPNsense handles it cleanly. But the transition isn't binary. Most networks run dual-stack — IPv4 and IPv6 side by side — and the IPv4 traffic still goes through NAT. So even if you deploy IPv6 tomorrow, you're still managing NAT rules for the foreseeable future.
Corn
What are the viable IPv4 workarounds when CGNAT makes bridge mode impossible?
Herman
Tunneling is the practical answer. You can rent a cheap VPS with a public IPv4 address, set up a WireGuard or OpenVPN tunnel from your OPNsense box to that VPS, and route your inbound traffic through the tunnel. The VPS becomes your public-facing endpoint, and your home network gets a stable public presence without needing the ISP to cooperate.
Corn
Which sounds like a fun weekend project and a recurring eleven-dollar monthly charge.
Herman
That's the tradeoff. It's not free, and it adds a hop — your traffic routes through the VPS, so latency depends on the datacenter location. But it solves the inbound port forwarding problem completely, and it avoids conntrack exhaustion on the ISP's CGNAT box because your tunnel looks like a single long-lived connection.
Corn
The other thing worth watching is what OPNsense itself is doing. x releases are expected to improve NAT rule diagnostics — better logging, better visualization of which rule matched which packet, maybe even warnings when you've got an interface with no NAT rule coverage.
Herman
That diagnostic gap we talked about — the silent NAT drops that don't appear in any log — that's the kind of thing where tooling improvements make a real difference. When the firewall can tell you "I dropped this packet because no outbound NAT rule matched," you go from guessing to knowing in thirty seconds.
Corn
The underlying mechanics won't change. NAT is NAT. The packet comes in, the rule table gets consulted, the source address gets rewritten. Understanding that flow is a skill that transfers to any firewall platform — pfSense, MikroTik, Cisco, whatever.
Herman
It's like learning archery. The bow changes, the sight changes, but the fundamentals of release and follow-through don't. Once you understand what a NAT rule is actually doing at the packet level, you can walk up to any firewall and figure it out.
Corn
Here's the challenge. Right now, after this episode, open your OPNsense NAT rules page. If you're sitting on automatic mode, switch to hybrid. Add one manual rule for a specific VLAN — something non-critical, your guest network or IoT subnet. Watch what happens. See if anything breaks.
Herman
If something does break, you now know exactly where to look.
Corn
That's the only way this stuff actually sticks. You can listen to us talk about NAT rule evaluation order for an hour, but until you create a rule in the wrong position and watch your traffic vanish, it's all theoretical.
Herman
The nice thing about hybrid mode is that you can always delete the manual rule and you're right back to where you started. The safety net is still there.
Corn
Which brings us to the forward-looking question I want to leave hanging. If CGNAT becomes universal for IPv4 and IPv6 adoption keeps crawling along, are we heading toward a world where running your own firewall with full control over NAT is a luxury? Something only people with business-grade ISP connections can do?
Herman
That's a genuinely uncomfortable question. The trend line isn't great. ISPs have every incentive to lock down their equipment and treat customers as endpoints rather than network operators. The homelab community has been fighting that trend for years, but CGNAT makes it structurally harder.
Corn
Something to watch. And in the meantime, understand your NAT rules. It's one of those skills that pays rent every time something breaks.
Herman
Now: Hilbert's daily fun fact.

Hilbert: In the 1840s, a prominent French cartographer argued that the Gobi Desert was once a vast inland sea, based on what he believed were ancient shoreline deposits — a theory that shaped European maps of Central Asia for decades before geologists realized the formations were wind-eroded sandstone, not seabeds.
Corn
A guy looked at some rocks, imagined an ocean, and mapmakers just... went with it.
Herman
That's terrifying.
Corn
This has been My Weird Prompts. Our producer is Hilbert Flumingtop. If you want to send us a question like Daniel did, email the show at show at my weird prompts dot com.
Herman
We'll be back next week. Go break something in hybrid mode.

This episode was generated with AI assistance. Hosts Herman and Corn are AI personalities.