Skip to main content
CCIE Security intermediate Free with email

Cisco ASA Commands for Fixing NAT and PAT Problems (Free PDF)

Reviewed 2026-10-19

Direct answer
To fix NAT or PAT on a Cisco ASA, check first and change second: read the NAT rules and translations with show nat detail and show xlate, test the path with packet-tracer, fix the rule or ACL, clear stale translations and save with write memory. This free 14-page PDF lists the commands for each of the eight steps.

To fix NAT or PAT on a Cisco ASA, check before you change anything. Run show nat detail and show xlate to see which rule matches, test the path with packet-tracer, then fix the NAT rule or the ACL, clear stale translations and save with write memory. This free 14-page PDF lists the commands for each of those eight steps on a Cisco ASA firewall, and this page explains when to run them.

Cisco ASA commands: the 8-step NAT fix at a glance

The PDF follows one order, and the order matters. Read first, clear second, build objects and rules third, then check ACLs, inspection and tests, and save last.

StepCommandsWhen to run it
1. Diagnoseshow nat, show nat detail, show xlate, show conn, show access-listFirst, before any change
2. Clear xlateclear xlate, clear connAfter diagnosing, before new NAT rules
3. Objectsobject network ...Before you define NAT rules
4. NAT rulesnat (inside,outside) ...The core fix
5. Zones and ACLsinterface, access-list, access-groupWhen translated traffic still doesn’t pass
6. Inspectionpolicy-map, service-policyWhen one protocol (FTP, SIP, DNS) breaks
7. Testpacket-tracer, show loggingAfter your changes
8. Savewrite memoryLast, once everything works

The commands assume ASA software 8.3 or later, the release that moved NAT to network objects. That covers every 9.x version. The addresses are lab examples, so replace them with yours, and make changes in a maintenance window.

Cisco ASA show commands for NAT troubleshooting

Start with read-only commands. They change nothing and show where the failure sits.

CommandWhat it tells you
show natThe NAT rules, in the order the ASA evaluates them
show nat detailThe same rules with hit counters (translate_hits and untranslate_hits)
show xlateActive translation entries. No entry for a host you expect means NAT isn’t happening for it
show connActive connections, so you can tell if sessions are being built at all
show access-listACL hit counts, so you can see if traffic is permitted or silently dropped
show running-config natOnly the NAT lines of the configuration
show running-config objectThe network and service objects the NAT rules depend on
show interface ip briefEach interface’s IP address and up/up state
show routeThe routing table. A missing default route stops NATted traffic from leaving
show nat detail
show xlate
show conn
show access-list
show running-config nat
show running-config object
show interface ip brief
show route

A rule whose hit count stays at 0 isn’t matching your traffic. According to Cisco’s NAT troubleshooting TechNote, those counters rise once per connection, not once per packet, so test with a fresh session. If the counters rise but the user still fails, the problem is further along: the ACL, the route or the inspection policy.

These are ASA commands. For the IOS equivalents, keep our Cisco Commands Cheat Sheet open next to this one.

How to clear NAT translations on a Cisco ASA (clear xlate)

Run clear xlate after you add or change a NAT rule, because existing translation entries can keep using the old rule. Run clear conn as well when you want a completely clean slate for testing.

clear xlate
clear conn

Both commands drop active NATted connections for a moment. Warn users first and don’t run them on a busy production firewall outside a maintenance window.

Cisco ASA commands for NAT troubleshooting: show nat detail, show xlate and clear xlate in three steps
Cisco ASA NAT troubleshooting commands: read the rules and translations first, clear stale entries last.

Cisco ASA NAT configuration: objects and the rules that fix most problems

Since 8.3, ASA NAT rules use network objects, so define them first. If NAT itself is new to you, read our guide What Is NAT? Static, Dynamic and PAT With Cisco Configs before the rules below.

object network INSIDE_LAN
 subnet 192.168.1.0 255.255.255.0
 description Internal LAN hosts
object network DMZ_SUBNET
 subnet 10.10.10.0 255.255.255.0
 description DMZ servers
object network OBJ_PAT_OUTSIDE
 host 203.0.113.1
 description Public IP for PAT

Dynamic PAT: many inside hosts, one public IP

Dynamic PAT lets every inside host share one public address, and the ASA tells the sessions apart by port number. The standard rule uses the outside interface’s own address:

nat (inside,outside) source dynamic INSIDE_LAN interface

If you have a separate public address for PAT, use this rule instead of the one above, not as well as it:

nat (inside,outside) source dynamic INSIDE_LAN OBJ_PAT_OUTSIDE

Static NAT: expose one server on its own public IP

Static NAT is a permanent one-to-one mapping. Use it when outside users must start connections to an inside server on a predictable public address.

object network INTERNAL_SERVER
 host 192.168.1.100
object network PUBLIC_SERVER_IP
 host 203.0.113.10
nat (inside,outside) source static INTERNAL_SERVER PUBLIC_SERVER_IP

Static PAT: forward one port, such as HTTPS, to an inside server

Static PAT (port forwarding) lets one public address serve several inside servers by destination port. Cisco’s NAT and ACL guide shows the object-NAT form, which looks like this for HTTPS:

object network PUBLIC_WEB_IP
 host 203.0.113.11
object network WEBSERVER
 host 192.168.1.101
 nat (inside,outside) static PUBLIC_WEB_IP service tcp https https

Use a public address that isn’t already in a static NAT rule, so the two mappings don’t overlap.

Cisco ASA NAT configuration: dynamic PAT with source dynamic versus static NAT and static PAT with source static and service tcp
Cisco ASA NAT configuration: dynamic PAT shares one public IP, static NAT and static PAT publish an inside server.

Identity NAT: leave VPN traffic untranslated

Without an identity NAT rule, traffic for a VPN peer can get translated, and the far end then drops it. This rule keeps the real addresses:

object network VPN_REMOTE
 subnet 10.20.0.0 255.255.255.0
nat (inside,outside) source static INSIDE_LAN INSIDE_LAN destination static VPN_REMOTE VPN_REMOTE no-proxy-arp route-lookup

no-proxy-arp stops the ASA answering ARP for those addresses. route-lookup makes it use the routing table to pick the exit interface. Cisco’s NAT reference explains both.

In what order does the ASA check NAT rules?

The ASA checks NAT in three sections, and the first match wins. Manual (twice) NAT comes first, in configuration order. Auto (object) NAT comes second, with static rules before dynamic ones. Manual NAT marked “after auto” comes last. Cisco’s TechNote describes the same three sections.

Want to rebuild these rules until they’re routine? The CCIE Security Workbook covers Cisco ASA and Firepower deployment and firewall features and policies in its Perimeter Security chapter, and its hands-on list includes ASA and FTD high availability with NAT.

Cisco ASA security levels and ACL configuration: why translated traffic still gets dropped

If NAT matches but users still can’t connect, the ACL or the security levels are usually next. Every ASA interface gets a security level from 0 (lowest) to 100 (highest). According to Cisco’s command reference, there’s an implicit permit from a higher level to a lower one, and interfaces at the same level can’t talk unless you enable same-security-traffic permit inter-interface.

interface GigabitEthernet0/0
 nameif outside
 security-level 0
 ip address 203.0.113.1 255.255.255.0
 no shutdown
interface GigabitEthernet0/1
 nameif inside
 security-level 100
 ip address 192.168.1.1 255.255.255.0
 no shutdown
interface GigabitEthernet0/2
 nameif dmz
 security-level 50
 ip address 10.10.10.1 255.255.255.0
 no shutdown

Inside (100) can reach outside (0) and the DMZ (50) by default. The DMZ can reach outside but not inside. Outside can’t start anything toward inside or the DMZ without an ACL permit.

Cisco ASA security levels: traffic from high to low is permitted by default, low to high needs an ACL permit, same level is blocked
Cisco ASA security levels run from 0 to 100, and same-security-traffic permit inter-interface opens same-level traffic.

Here’s the rule that catches many people: write the ACL against the real address of the server, not the public one. Cisco’s access rules guide says access rules “always use the real IP addresses” when matching, even with NAT configured, and the NAT and ACL guide says the same for 8.3 and later. For the static NAT server above (192.168.1.100) and the port-forwarded server (192.168.1.101), the inbound ACL looks like this:

access-list OUTSIDE_IN extended permit tcp any host 192.168.1.100 eq 80
access-list OUTSIDE_IN extended permit tcp any host 192.168.1.100 eq 443
access-list OUTSIDE_IN extended permit tcp any host 192.168.1.101 eq 443
access-list OUTSIDE_IN extended deny ip any any log
access-group OUTSIDE_IN in interface outside

ACLs end with an implicit deny, so the explicit deny ip any any log is there to record what gets blocked. The inside and DMZ ACLs follow the same pattern:

access-list INSIDE_OUT extended permit ip 192.168.1.0 255.255.255.0 any
access-list INSIDE_OUT extended deny ip any any log
access-group INSIDE_OUT in interface inside
access-list DMZ_IN extended permit tcp 10.10.10.0 255.255.255.0 192.168.1.0 255.255.255.0 eq 3306
access-list DMZ_IN extended deny ip any any log
access-group DMZ_IN in interface dmz

The DMZ ACL lets DMZ servers reach only the database port (3306) on the inside network. It also blocks everything else leaving the DMZ, so add permits if those servers need DNS or updates. Our Common Ports Cheat Sheet lists the ports you’ll be permitting.

The Cisco ASA and Firepower labs in the CCIE Security Workbook are the place to practise these ACLs and security levels on a real topology, which is the fastest way to remember the real-address rule.

Cisco ASA inspection: when NAT works but FTP, SIP or DNS breaks

Some protocols carry IP addresses inside their payload. Without application inspection, the ASA rewrites the outer address and leaves the embedded one alone, so the session fails even though NAT is correct.

Check before you add anything. According to Cisco’s inspection guide, the default global policy already enables several inspections, including DNS, FTP, SIP, TFTP, NetBIOS, RTSP, SQL*Net and Sun RPC, and the list depends on your software version. ICMP isn’t in the default set, so you add it yourself. Run show running-config policy-map and show service-policy first, then add only what’s missing:

policy-map global_policy
 class inspection_default
  inspect icmp
  inspect icmp error
service-policy global_policy global

service-policy global_policy global applies the policy to every interface. If an interface has its own policy, that one takes over for the interface, as the PDF notes.

Cisco ASA packet-tracer command: test NAT without live traffic

packet-tracer is the most useful single command in this guide. It sends a made-up packet through the ASA’s processing steps and tells you where it would be dropped and why, without touching real traffic. This is the ASA command, not Cisco’s Packet Tracer simulator app.

packet-tracer input inside tcp 192.168.1.10 12345 8.8.8.8 80 detailed
packet-tracer input outside tcp 1.2.3.4 54321 203.0.113.10 443 detailed

The first line tests outbound web traffic from an inside host. The second tests inbound HTTPS to the public address. The word after input is the interface where the packet enters. According to Cisco’s command reference, the tool walks through phases such as UN-NAT, ACL, NAT, IP options and flow creation, and the result is ALLOW if nothing drops the packet. Look for the phase where it stops. One catch: on an existing connection, packet-tracer doesn’t check ACLs, so test with a source and port that have no live session.

Use the logs when packet-tracer says ALLOW but real traffic still fails:

show logging | include Deny
show logging | include nat
show logging | include xlate

Denied entries usually mean an ACL is dropping the traffic before NAT matters. Debug output can slow a busy firewall, and packet-tracer plus show nat detail answer most NAT questions without it. For the path before the ASA, our Network Troubleshooting Commands PDF covers ping, traceroute and the checks around them.

Cisco ASA packet capture: see what the firewall really receives

When packet-tracer says ALLOW but users still fail, capture real packets. A capture records the traffic that reaches an interface, so you can see whether the SYN arrives, which address it carries and whether a reply leaves.

capture CAPIN interface inside match tcp host 192.168.1.10 any eq 80
show capture CAPIN
capture ASPDROP type asp-drop all
show capture ASPDROP
no capture CAPIN
no capture ASPDROP

The first line captures web traffic from one inside host. The asp-drop capture records packets the ASA drops in its accelerated security path. According to Cisco’s troubleshooting guide, capture handles IP traffic only (no ARP) and stops when its buffer is full. Remove each capture with no capture when you finish.

Cisco ASA NAT not working? Three mistakes Cisco’s docs warn about

Most broken ASA NAT comes down to three causes, all listed in Cisco’s NAT troubleshooting TechNote.

  • Rules out of order. A broad manual rule near the top matches traffic meant for a more specific rule below it. Reorder the rules or narrow the object.
  • Objects that are too broad. A short prefix in a NAT object can match traffic you never meant to translate.
  • A NAT RPF failure. If packet-tracer or the logs show “Asymmetric NAT rules matched for forward and reverse flows”, traffic is usually aimed at the real address instead of the mapped one. Point clients at the public address and check the rules.

A NAT rule can also send traffic out a different interface than the routing table would. If that’s your problem, use route-lookup on the rule, as in the identity NAT example above.

Save the configuration with write memory

Changes live only in the running configuration until you save them, so an unsaved fix disappears at the next reload. Save only after everything works, and keep a copy of show running-config from before you started so you can restore it if a change goes wrong.

write memory
copy running-config startup-config
show startup-config | include nat
show startup-config | include access-list
show startup-config | include object

write memory is the short form of copy running-config startup-config. The three include lines confirm the saved file has your NAT rules, ACLs and objects.

Go deeper

Reading show xlate is easy. Fixing NAT with an outage clock running isn’t.

The CCIE Security Workbook: 125 EVE-NG labs across 1,950 pages for ASA, FTD, ISE, AnyConnect and Umbrella. Break NAT in the lab, not on your edge firewall.

Get the CCIE Security Workbook →

Where does this free Cisco ASA PDF stop?

This PDF fixes NAT on one ASA. It doesn’t cover failover, VPNs, Firepower or packet capture, and you can’t practise on it without your own firewall. The CCIE Security lab workbook fills that gap. It comes as a PDF workbook plus an EVE-NG image bundle with every topology pre-loaded, and its page says there are no separate downloads for ASA or ISE images. There’s a free sample before you decide.

Still running an older ASA? Check the dates in our Cisco ASA End of Life guide, then read what replaces it in our Cisco Firepower Threat Defense guide. If you also run Fortinet firewalls, our FortiGate CLI Commands PDF is the same kind of cheat sheet for that platform.

Free Cisco ASA commands PDF with 8 steps in 14 pages compared with the CCIE Security workbook with EVE-NG ASA and FTD labs
The free Cisco ASA commands PDF fixes NAT on one firewall, the CCIE Security workbook adds EVE-NG labs.

Frequently asked questions

How do I configure NAT on a Cisco ASA?
To configure NAT on a Cisco ASA running 8.3 or later, define network objects for your inside subnet and public IPs, then add a rule such as nat (inside,outside) source dynamic INSIDE_LAN interface for PAT. Use a static rule for a server that outside users must reach. Then check the ACL and test with packet-tracer.
How do I check NAT translations on a Cisco ASA?
Run show nat detail to see each NAT rule with its translate_hits and untranslate_hits counters, and show xlate to list active translations. According to Cisco's NAT troubleshooting TechNote, the counters rise once per connection, not once per packet. A rule whose counter stays at zero isn't matching your traffic.
How do I use the packet-tracer command on a Cisco ASA?
Run packet-tracer input followed by the interface, protocol, source IP and port, destination IP and port, and detailed, for example packet-tracer input inside tcp 192.168.1.10 12345 8.8.8.8 80 detailed. According to Cisco's command reference, it shows phases such as UN-NAT, ACL and NAT and ends in ALLOW or a drop reason.
Why is NAT not working on my Cisco ASA?
Check three causes first: NAT rules in the wrong order, objects that are too broad, and traffic aimed at the real address instead of the mapped one, which causes the Asymmetric NAT rules matched error. According to Cisco's TechNote, show nat detail and packet-tracer expose all three. Also write ACLs with the real IP address.
How do I clear NAT translations on a Cisco ASA?
Run clear xlate to remove translation entries, and clear conn as well if you want to end active connections. Both commands momentarily drop active NATted sessions, so run them in a maintenance window. Do it after you add or change a NAT rule, because old entries can keep using the previous rule.
What are Cisco ASA security levels?
A Cisco ASA security level is a number from 0 (lowest) to 100 (highest) set on each named interface. According to Cisco's command reference, traffic from a higher level to a lower one is implicitly permitted, and interfaces at the same level can't communicate unless you enable same-security-traffic permit inter-interface.
What are the Cisco ASA show commands for troubleshooting?
Start with show nat detail, show xlate, show conn and show access-list, then show running-config nat, show running-config object, show interface ip brief and show route. They're read-only commands that show which rule matches, which sessions exist, whether an ACL drops traffic and whether a route is missing.
How do I capture packets on a Cisco ASA?
Create a capture on an interface with a match filter, for example capture CAPIN interface inside match tcp host 192.168.1.10 any eq 80, view it with show capture CAPIN and remove it with no capture CAPIN. According to Cisco's troubleshooting guide, capture handles IP traffic only, not ARP, and stops when its buffer is full.

Reviewed by

CCDE/CCIE

How to cite this resource

SMEnode Labs (2026). Cisco ASA Commands for Fixing NAT and PAT Problems (Free PDF). SMEnode Labs. https://smenode-labs.com/free-pdf/cybersecurity/cisco-asa-commands/

APA

SMEnode Labs. (2026). Cisco ASA Commands for Fixing NAT and PAT Problems (Free PDF). SMEnode Labs. https://smenode-labs.com/free-pdf/cybersecurity/cisco-asa-commands/

BibTeX

@misc{smenodelabs2026,
  title = {Cisco ASA Commands for Fixing NAT and PAT Problems (Free PDF)},
  author = {{SMEnode Labs}},
  year = {2026},
  url = {https://smenode-labs.com/free-pdf/cybersecurity/cisco-asa-commands/},
  note = {SMEnode Labs}
}