Troubleshooting NAT/PAT Issues
NAT and PAT failures are among the most deceptive faults in Cisco IOS networking —
the router accepts every configuration command without complaint, yet traffic
silently fails to reach the internet. The root causes almost always fall into
one of four categories: interfaces not labelled inside or outside,
an ACL that does not match the real traffic, a
pool that is exhausted or misconfigured, or a
routing gap that prevents translated packets from reaching
their destination. This lab builds a structured diagnostic workflow using
show ip nat translations, show ip nat statistics,
and debug ip nat to pinpoint each failure category quickly.
Before starting, ensure you are familiar with how NAT works end-to-end. Review Static NAT Configuration for one-to-one address mapping, Dynamic NAT & PAT Configuration for pool-based and overload translation, and NAT Overview for the underlying theory. For ACL fundamentals referenced throughout this lab, see Standard ACL Configuration and ACL Overview. For wildcard mask syntax used in NAT ACLs, see Wildcard Masks. For default routes referenced in routing gap scenarios, see Default Routes.
1. NAT/PAT Failure Categories — Overview
How the Router Processes a NAT Packet
Understanding the exact processing order is essential for systematic troubleshooting. Every packet that should be translated passes through this sequence — a failure at any step produces silence with no error message:
Packet arrives on inside interface (e.g. Gi0/1)
│
▼
Step 1 ── Is the interface marked "ip nat inside"?
NO → packet is routed normally, NAT is never invoked
│
▼
Step 2 ── Does the ACL bound to the NAT rule permit this source IP?
NO → packet is not translated, forwarded with private source IP
(internet drops or returns it)
│
▼
Step 3 ── Is a translation pool available (for dynamic NAT)?
NO → packet dropped, "nat: address allocation failed" in debug
│
▼
Step 4 ── Is the egress interface marked "ip nat outside"?
NO → translation table entry is created but packet is not
re-written on egress
│
▼
Step 5 ── Is there a route to forward the translated packet?
NO → router drops packet with "no route to host"
│
▼
Translation succeeds — packet exits with public source IP
The Four NAT Failure Categories
| # | Category | Root Cause | Symptom | Primary Diagnostic |
|---|---|---|---|---|
| 1 | Interface assignment | ip nat inside / ip nat outside missing or swapped |
No translations appear — show ip nat translations is empty |
show ip interface [int] |
| 2 | ACL mismatch | ACL does not match the actual source subnet; wrong wildcard; wrong ACL number bound to NAT rule | Translations missing for specific hosts; others work; debug shows no match | show ip nat statistics, debug ip nat |
| 3 | Pool exhaustion | Dynamic NAT pool has no free addresses; overload not configured; pool range too small | Some hosts translate, others do not; "misses" counter increments | show ip nat statistics, show ip nat translations |
| 4 | Routing gap | No default route or specific route to reach the public destination after translation | Translations appear correctly but traffic still fails end-to-end | show ip route, ping from inside address |
NAT Address Terminology
| Term | Definition | Example |
|---|---|---|
| Inside local | The private IP address of the internal host — as seen from inside the network | 192.168.10.10 |
| Inside global | The public IP address assigned to the internal host after translation — as seen from outside | 203.0.113.5 |
| Outside global | The public IP address of the remote server — as seen from outside | 8.8.8.8 |
| Outside local | The address of the remote server as seen from inside — usually the same as outside global unless NAT is applied in both directions | 8.8.8.8 |
2. Lab Topology & Broken Scenarios
All four failure categories are reproduced using a single topology. Each scenario introduces one deliberate misconfiguration — the goal is to identify the fault and correct it using the diagnostic workflow:
192.168.10.0/24 (Inside — Staff)
[PC1: 192.168.10.10]
[PC2: 192.168.10.11]
│
Gi0/1 (Inside)
192.168.10.1
│
NetsTuts_R1
│
Gi0/0 (Outside)
203.0.113.2/30
│
203.0.113.1 (ISP)
│
8.8.8.8 (Internet — Google DNS used as test destination)
NAT Pool: 203.0.113.10 – 203.0.113.20 (name: INET-POOL)
PAT: 203.0.113.2 overload (interface-based PAT)
ACL 1: permit 192.168.10.0 0.0.0.255
Scenario A — Fault: ip nat inside/outside missing on interfaces
Scenario B — Fault: ACL permits wrong subnet (192.168.20.0 instead of 192.168.10.0)
Scenario C — Fault: Dynamic NAT pool has only 1 address, no overload — pool exhausted by PC1
Scenario D — Fault: No default route — translated packets have no path to internet
3. Step 1 — Establish the Correct Baseline Configuration
Before introducing faults, configure a fully working PAT setup. All troubleshooting in subsequent steps diagnoses deviations from this known-good state:
NetsTuts_R1>en NetsTuts_R1#conf t Enter configuration commands, one per line. End with CNTL/Z. ! ── Interface labels ────────────────────────────────────── NetsTuts_R1(config)#interface GigabitEthernet0/1 NetsTuts_R1(config-if)#ip address 192.168.10.1 255.255.255.0 NetsTuts_R1(config-if)#ip nat inside NetsTuts_R1(config-if)#no shutdown NetsTuts_R1(config-if)#exit NetsTuts_R1(config)#interface GigabitEthernet0/0 NetsTuts_R1(config-if)#ip address 203.0.113.2 255.255.255.252 NetsTuts_R1(config-if)#ip nat outside NetsTuts_R1(config-if)#no shutdown NetsTuts_R1(config-if)#exit ! ── ACL permitting inside subnet ────────────────────────── NetsTuts_R1(config)#access-list 1 permit 192.168.10.0 0.0.0.255 ! ── PAT using outside interface address (overload) ──────── NetsTuts_R1(config)#ip nat inside source list 1 interface GigabitEthernet0/0 overload ! ── Default route to ISP ────────────────────────────────── NetsTuts_R1(config)#ip route 0.0.0.0 0.0.0.0 203.0.113.1 NetsTuts_R1(config)#end NetsTuts_R1#wr Building configuration... [OK]
4. Step 2 — Primary Diagnostic Commands
show ip nat translations
NetsTuts_R1#show ip nat translations Pro Inside global Inside local Outside local Outside global tcp 203.0.113.2:49152 192.168.10.10:49152 8.8.8.8:53 8.8.8.8:53 tcp 203.0.113.2:49153 192.168.10.11:49153 8.8.8.8:80 8.8.8.8:80 icmp 203.0.113.2:1 192.168.10.10:1 8.8.8.8:1 8.8.8.8:1
show ip nat translations verbose
NetsTuts_R1#show ip nat translations verbose
Pro Inside global Inside local Outside local Outside global
tcp 203.0.113.2:49152 192.168.10.10:49152 8.8.8.8:53 8.8.8.8:53
create 00:00:12, use 00:00:12, timeout:00:01:00, left 00:00:48,
Map-Id(In): 1, portlist used: 49152, flags: extended
icmp 203.0.113.2:1 192.168.10.10:1 8.8.8.8:1 8.8.8.8:1
create 00:00:05, use 00:00:05, timeout:00:01:00, left 00:00:55,
Map-Id(In): 1, flags: extended
verbose keyword adds the creation time, last-use time,
remaining timeout, and the NAT map ID. The timeout shows how long
before an idle entry is removed — PAT entries default to 1 minute for
ICMP and DNS, 24 hours for TCP established sessions. If entries
disappear faster than expected, confirm the timeout with
show ip nat translations verbose and adjust with
ip nat translation timeout [seconds].
show ip nat statistics
NetsTuts_R1#show ip nat statistics Total active translations: 3 (0 static, 3 dynamic; 3 extended) Peak translations: 5, occurred 00:02:14 ago Outside interfaces: GigabitEthernet0/0 Inside interfaces: GigabitEthernet0/1 Hits: 47 Misses: 0 CEF Translated packets: 47, CEF Punted packets: 0 Expired translations: 12 Dynamic mappings: -- Inside Source [Id: 1] access-list 1 interface GigabitEthernet0/0 refcount 3
debug ip nat
! ── CAUTION: limit output with an ACL on busy routers ──── NetsTuts_R1(config)#access-list 100 permit ip host 192.168.10.10 any NetsTuts_R1(config)#end NetsTuts_R1#debug ip nat 100 IP NAT debugging is on for access list 100 ! ── Sample output when NAT is working ──────────────────── NAT*: s=192.168.10.10->203.0.113.2, d=8.8.8.8 [13524] NAT*: s=8.8.8.8, d=203.0.113.2->192.168.10.10 [13524] ! ── Sample output when NAT is NOT translating ─────────── ! (silence — no NAT debug lines appear at all) NetsTuts_R1#undebug all
s=192.168.10.10->203.0.113.2 confirms the
source address was rewritten — private to public. The return path
line shows the destination being rewritten back.
The asterisk (NAT*) indicates the translation was
performed by CEF (fast path) rather than the process-switched slow
path. Complete silence when traffic is flowing means NAT is not
being invoked at all — the most likely cause is missing
ip nat inside on the ingress interface.
Always disable debug immediately after capture: undebug all.
Diagnostic Command Summary
| Command | What It Shows | Best Used For |
|---|---|---|
show ip nat translations |
Active translation table — inside local/global, outside local/global, protocol, port | First check — is translation happening at all? Are specific hosts missing? |
show ip nat translations verbose |
All above plus creation time, timeout, map ID | Entry lifetime analysis — why are entries expiring too fast or not at all? |
show ip nat statistics |
Interface labels, hits/misses counters, dynamic mapping ACL+pool binding | Quick health check — confirm interfaces are labelled, check for misses |
debug ip nat [acl] |
Real-time per-packet translation events — shows address rewriting or absence of it | Confirm translation is happening packet-by-packet; silence confirms NAT not invoked |
show ip interface brief |
All interface IPs and line/protocol status | Confirm interfaces are up before troubleshooting NAT logic |
show ip route |
Routing table — default route, specific routes | Verify a path exists after translation (Category 4 — routing gap) |
clear ip nat translation * |
Clears all dynamic NAT/PAT translation entries | Reset the translation table before re-testing after a config fix |
5. Scenario A — Missing or Swapped Inside/Outside Labels
The most common NAT misconfiguration. The router will not invoke NAT
on a packet unless it arrives on an ip nat inside
interface. If the labels are missing or reversed, every other part
of the NAT configuration is irrelevant — translation never happens.
Introducing the Fault
! ── Remove inside label from Gi0/1 ────────────────────── NetsTuts_R1(config)#interface GigabitEthernet0/1 NetsTuts_R1(config-if)#no ip nat inside NetsTuts_R1(config-if)#exit
Symptom — show ip nat statistics
NetsTuts_R1#show ip nat statistics Total active translations: 0 (0 static, 0 dynamic; 0 extended) Peak translations: 0 Outside interfaces: GigabitEthernet0/0 Inside interfaces: (none configured) Hits: 0 Misses: 0
Symptom — debug ip nat
NetsTuts_R1#debug ip nat 100 IP NAT debugging is on for access list 100 ! ── PC1 pings 8.8.8.8 — complete silence in debug ─────── ! (no NAT debug lines appear despite active traffic) NetsTuts_R1#undebug all
Diagnosis — show ip interface
NetsTuts_R1#show ip interface GigabitEthernet0/1 GigabitEthernet0/1 is up, line protocol is up Internet address is 192.168.10.1/24 Inbound access list is not set Outgoing access list is not set IP NAT: outside ← WRONG — should be "inside" ... NetsTuts_R1#show ip interface GigabitEthernet0/0 GigabitEthernet0/0 is up, line protocol is up Internet address is 203.0.113.2/30 IP NAT: outside ← correct ...
show ip interface output explicitly states
"IP NAT: outside" or "IP NAT: inside"
for each interface. If neither label appears, NAT is not configured
on that interface. If the labels are swapped (inside applied to the
WAN, outside applied to the LAN), the router tries to translate
packets arriving from the internet and re-write them toward the LAN —
the exact opposite of the intended behaviour.
Fix
NetsTuts_R1(config)#interface GigabitEthernet0/1 NetsTuts_R1(config-if)#ip nat inside NetsTuts_R1(config-if)#exit ! ── Clear stale entries and re-test ────────────────────── NetsTuts_R1#clear ip nat translation *
6. Scenario B — ACL Does Not Match the Traffic
The NAT rule references an ACL to determine which source addresses should be translated. If the ACL is misconfigured — wrong subnet, wrong wildcard, wrong ACL number in the NAT rule — matching packets are not translated. Non-matching packets are forwarded with their original private source IP, which the internet drops.
Introducing the Fault — Wrong Subnet in ACL
! ── ACL permits 192.168.20.0 but inside network is 192.168.10.0 ── NetsTuts_R1(config)#no access-list 1 NetsTuts_R1(config)#access-list 1 permit 192.168.20.0 0.0.0.255
Symptom — show ip nat statistics
NetsTuts_R1#show ip nat statistics Total active translations: 0 (0 static, 0 dynamic; 0 extended) Peak translations: 3, occurred 00:05:10 ago Outside interfaces: GigabitEthernet0/0 Inside interfaces: GigabitEthernet0/1 Hits: 0 Misses: 14 Dynamic mappings: -- Inside Source [Id: 1] access-list 1 interface GigabitEthernet0/0 refcount 0
Symptom — debug ip nat
NetsTuts_R1#debug ip nat 100 IP NAT debugging is on for access list 100 ! ── PC1 pings 8.8.8.8 — still silence ─────────────────── ! NAT is invoked but immediately rejects the packet due to ACL miss ! No translation event fires — packet forwarded un-translated NetsTuts_R1#undebug all
Diagnosis — Verify the ACL
NetsTuts_R1#show ip nat statistics
! ── Misses counter confirms ACL is rejecting packets ─────
NetsTuts_R1#show access-lists 1
Standard IP access list 1
10 permit 192.168.20.0, wildcard bits 0.0.0.255 (0 matches)
! ── Zero matches confirm no inside traffic is matching ACL 1 ──
! ── Inside network is 192.168.10.0 — ACL permits wrong subnet ─
Fix
NetsTuts_R1(config)#no access-list 1 NetsTuts_R1(config)#access-list 1 permit 192.168.10.0 0.0.0.255 NetsTuts_R1#clear ip nat translation *
ip nat inside source list 2 ...
and ACL 2 does not exist or permits a different range. Check the
"Dynamic mappings" section of show ip nat statistics
— it shows exactly which ACL is bound to each NAT rule.
7. Scenario C — Pool Exhaustion (Dynamic NAT Without Overload)
Dynamic NAT (without overload) maps each inside host to one dedicated public IP address from a pool. When the pool runs out of free addresses, new translation requests are silently dropped. This is the classic scenario where PC1 can reach the internet but PC2 cannot — because PC1 holds the only pool address.
Introducing the Fault — Single-Address Pool Without Overload
! ── Remove PAT overload, configure dynamic NAT with tiny pool ── NetsTuts_R1(config)#no ip nat inside source list 1 interface GigabitEthernet0/0 overload NetsTuts_R1(config)#ip nat pool INET-POOL 203.0.113.10 203.0.113.10 netmask 255.255.255.0 NetsTuts_R1(config)#ip nat inside source list 1 pool INET-POOL
overload, each inside host
requires one dedicated pool address. The first host to generate
traffic claims 203.0.113.10 — the second host finds the pool empty
and its packets are dropped without any notification.
Symptom — show ip nat translations
NetsTuts_R1#show ip nat translations Pro Inside global Inside local Outside local Outside global --- 203.0.113.10 192.168.10.10 --- ---
--- in the
protocol and outside columns indicates a static-style mapping with
no specific connection tracking. PC2 (192.168.10.11) has no entry —
its traffic is being dropped silently.
Symptom — show ip nat statistics
NetsTuts_R1#show ip nat statistics
Total active translations: 1 (0 static, 1 dynamic; 0 extended)
Peak translations: 1
Outside interfaces:
GigabitEthernet0/0
Inside interfaces:
GigabitEthernet0/1
Hits: 22 Misses: 18
Dynamic mappings:
-- Inside Source
[Id: 2] access-list 1 pool INET-POOL refcount 1
pool INET-POOL: id 1, netmask 255.255.255.0
start 203.0.113.10 end 203.0.113.10
type generic, total addresses 1, allocated 1 (100%), misses 18
Fix — Add Overload (PAT)
! ── Option 1: Add overload to the existing pool rule ───── NetsTuts_R1(config)#no ip nat inside source list 1 pool INET-POOL NetsTuts_R1(config)#ip nat inside source list 1 pool INET-POOL overload ! ── Option 2: Switch to interface-based PAT (simpler) ──── NetsTuts_R1(config)#no ip nat inside source list 1 pool INET-POOL NetsTuts_R1(config)#ip nat inside source list 1 interface GigabitEthernet0/0 overload NetsTuts_R1#clear ip nat translation *
overload converts dynamic NAT to PAT — multiple
inside hosts share the single pool address (or the interface address)
differentiated by port number. This resolves pool exhaustion
completely: PAT supports up to approximately 65,535 concurrent
translations per public IP address. Option 2 (interface-based PAT)
is the most common real-world configuration because it automatically
uses whatever IP address is assigned to the outside interface,
even if it changes via DHCP from the ISP.
Fix — Expand the Pool
! ── If PAT is not desired — expand the pool range ──────── NetsTuts_R1(config)#no ip nat pool INET-POOL NetsTuts_R1(config)#ip nat pool INET-POOL 203.0.113.10 203.0.113.20 netmask 255.255.255.0 ! ── Pool now has 11 addresses (10 through 20) ────────────
8. Scenario D — Routing Gap After Translation
NAT only rewrites addresses — it does not create routes. If no route
exists to forward the translated packet toward the internet, the
router drops it after translation. This is a uniquely deceptive fault
because show ip nat translations looks perfectly healthy
— entries are being created — yet traffic still fails end-to-end.
Introducing the Fault — Remove the Default Route
! ── Remove default route ───────────────────────────────── NetsTuts_R1(config)#no ip route 0.0.0.0 0.0.0.0 203.0.113.1
Symptom — show ip nat translations
NetsTuts_R1#show ip nat translations Pro Inside global Inside local Outside local Outside global icmp 203.0.113.2:1 192.168.10.10:1 8.8.8.8:1 8.8.8.8:1
Symptom — show ip nat statistics
NetsTuts_R1#show ip nat statistics Total active translations: 1 (0 static, 1 dynamic; 1 extended) Hits: 4 Misses: 0
Diagnosis — show ip route
NetsTuts_R1#show ip route
Codes: C - connected, S - static, ...
192.168.10.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.10.0/24 is directly connected, GigabitEthernet0/1
L 192.168.10.1/32 is directly connected, GigabitEthernet0/1
203.0.113.0/30 is variably subnetted, 2 subnets, 2 masks
C 203.0.113.0/30 is directly connected, GigabitEthernet0/0
L 203.0.113.2/32 is directly connected, GigabitEthernet0/0
! ── No S* 0.0.0.0/0 entry — default route is missing ────
S* 0.0.0.0/0 confirms the routing gap.
After translating 192.168.10.10 to 203.0.113.2, the router looks
up the destination 8.8.8.8 in the routing table and finds no match.
The packet is dropped with an ICMP unreachable message back to the
inside host — which never reaches the internet. Always check
show ip route when NAT looks
correct but end-to-end connectivity fails. For general Layer 3
routing troubleshooting see
Troubleshooting Layer 3
Routing.
Fix
NetsTuts_R1(config)#ip route 0.0.0.0 0.0.0.0 203.0.113.1 NetsTuts_R1#show ip route | include 0.0.0.0 S* 0.0.0.0/0 [1/0] via 203.0.113.1
9. Additional NAT/PAT Issues
Static NAT — Translation in Wrong Direction
! ── Static NAT maps inside host to public IP ───────────── ! ── Correct direction: ip nat inside source static [inside-local] [inside-global] NetsTuts_R1(config)#ip nat inside source static 192.168.10.10 203.0.113.5 ! ── WRONG — this translates OUTSIDE-to-INSIDE (destination NAT) ── ! NetsTuts_R1(config)#ip nat outside source static 203.0.113.5 192.168.10.10
ip nat inside source translates the source address of
packets arriving from inside — the typical outbound NAT direction.
ip nat outside source translates the source address of
packets arriving from outside — used for very specific inbound
translation scenarios. Confusing these two commands produces
translations in the wrong direction — inside hosts cannot reach the
internet and/or inbound connections behave unexpectedly. Always
verify direction with show ip nat statistics and confirm
the Dynamic mappings section shows "Inside Source."
Clearing the Translation Table
! ── Clear all dynamic translations ─────────────────────── NetsTuts_R1#clear ip nat translation * ! ── Clear only translations for one inside host ────────── NetsTuts_R1#clear ip nat translation inside 192.168.10.10 ! ── Clear only TCP translations to a specific destination ─ NetsTuts_R1#clear ip nat translation tcp inside 192.168.10.10 49152 outside 8.8.8.8 80 ! ── Static translations are NOT cleared by "clear ip nat translation *" ! ── Remove and re-add the static command to reset static entries
clear ip nat translation * removes all dynamic entries
instantly. Note it does not remove static entries — those are only
removed by deleting the ip nat inside source static
command. If a fix does not seem to take effect, stale translations
are often the reason.
NAT Pool Subnet Mismatch
! ── WRONG: pool netmask does not match the pool address range ── NetsTuts_R1(config)#ip nat pool BAD-POOL 203.0.113.10 203.0.113.20 netmask 255.255.255.252 ! ── The /30 netmask covers only 203.0.113.8 – 203.0.113.11 ────── ! ── Addresses 203.0.113.12 – 203.0.113.20 are outside the subnet ─ ! ── IOS will reject or silently truncate the pool ──────────────── ! ── CORRECT: use a netmask that covers the entire pool range ── NetsTuts_R1(config)#ip nat pool GOOD-POOL 203.0.113.10 203.0.113.20 netmask 255.255.255.0
ip nat pool command must cover the
entire address range from start to end. If the netmask is too narrow,
IOS either rejects the command or silently limits the pool to the
addresses that fit within the subnet boundary. Verify pool size in
show ip nat statistics — "total addresses" should match
the expected count. A /24 covering 203.0.113.0–255 contains 11
usable addresses from .10 to .20.
PAT Port Block Exhaustion (High-Volume)
NetsTuts_R1#show ip nat translations total Total number of translations: 64521 ! ── Approaching the 65535 port limit per public IP ─────────── ! ── Add a second public IP or pool to expand PAT capacity ──── NetsTuts_R1(config)#ip nat pool EXTRA-POOL 203.0.113.3 203.0.113.4 netmask 255.255.255.252 NetsTuts_R1(config)#ip nat inside source list 1 pool EXTRA-POOL overload
show ip nat translations total — if the count approaches
64,000 consistently, add additional public IP addresses to the PAT
pool. Each additional IP multiplies the available port space.
10. Structured Troubleshooting Workflow
| Step | Command | What to Look For | If Found |
|---|---|---|---|
| 1 | show ip nat statistics |
Inside/outside interfaces listed? Hits/misses ratio? | No inside interface → Scenario A (add ip nat inside). Misses only → Scenario B (fix ACL). Misses + pool 100% → Scenario C (add overload or expand pool) |
| 2 | show ip nat translations |
Are entries being created? Correct inside local/global addresses? | Empty table → confirm interfaces first. Correct entries but no connectivity → Scenario D (check routing) |
| 3 | show ip interface [int] |
"IP NAT: inside" on LAN interface, "IP NAT: outside" on WAN interface? | Missing or swapped → remove and re-add the correct label |
| 4 | show access-lists [n] |
Does the ACL permit the actual inside subnet? Is the match counter incrementing? | Zero matches or wrong subnet → fix the ACL permit statement |
| 5 | show ip route |
Is there a default route (S* 0.0.0.0/0) or a specific route to the internet? |
No default route → add ip route 0.0.0.0 0.0.0.0 [next-hop] |
| 6 | debug ip nat [acl] |
Are translation events appearing? Or silence? | Silence → interface labels missing (Scenario A). Events but traffic fails → routing gap (Scenario D) |
| 7 | clear ip nat translation * |
After any config fix, clear stale translations before retesting | Always do this — old entries persist and mask fixes |
Key Points & Exam Tips
- NAT requires both
ip nat insideon the LAN interface andip nat outsideon the WAN interface. Missing either label means NAT is never invoked — the translation table stays empty and the misses counter stays at zero. show ip nat statisticsis the fastest first diagnostic: check the Inside/Outside interface list first, then compare Hits vs Misses. All misses and no hits means the ACL is rejecting traffic or NAT is not being invoked at all.- The Misses counter distinguishes an ACL fault from an interface label fault: misses are zero when NAT is not invoked (no inside label), and non-zero when NAT is invoked but the ACL denies the packet.
- Pool exhaustion is confirmed by
show ip nat statisticsshowing "allocated 100%" on the pool. Fix withoverloadto enable PAT, or expand the address range in the pool definition. - A routing gap produces the most deceptive symptom:
show ip nat translationslooks healthy with correct entries, but end-to-end connectivity still fails. Always checkshow ip routewhen NAT looks correct but traffic does not flow. - Always run
clear ip nat translation *after changing NAT configuration — stale entries from the old config persist and continue to be used for up to 24 hours for TCP sessions. debug ip nat [acl]with a filter ACL is the most granular tool. Complete silence means NAT is not invoked. Seeings=private->publicentries confirms translation is happening. Alwaysundebug allimmediately after testing.- Static NAT entries (
ip nat inside source static) are not cleared byclear ip nat translation *— they must be removed by deleting the static NAT command itself. - The four categories in order of frequency: interface labels (most common) → ACL mismatch → routing gap → pool exhaustion.
- On the CCNA exam: know the output of
show ip nat translations(inside local vs inside global), the meaning of the Hits/Misses counters inshow ip nat statistics, theoverloadkeyword for PAT, and the four NAT address terms (inside local, inside global, outside local, outside global).