There are 3 types of NAT:

  • Static NAT – Translates a private to a public address (1-to-1).
  • Dynamic NAT – Translates a pool of private to a pool of public addresses (many-to-many).
  • NAT Overload (or PAT) – Translates many private IPs over a single public IP (many-to-1).

Define the inside interface:

int g0/0
ip nat inside

Define the outside interface:

int g0/1
ip nat outside

Create the access list that will allow many-to-one translations:

ip access-list standard USERS
permit 10.1.1.0 0.0.0.255
ip nat inside source list USERS int g0/1 overload

Note: the access list contains the private network address and is defined as the source. Interface g0/1 (not the public IP) is the exit to the internet. The overload keyword allows many internal addresses to be translated simultaneously.

Example for many-to-many:

ip access-list standard 1
  permit 10.10.0.0 0.0.255.255
ip nat pool INTERNAL 192.168.1.129 192.168.1.254 netmask 255.255.255.128
ip nat inside source list 1 pool INTERNAL
ip route 0.0.0.0 0.0.0.0 172.16.1.1

For a one-to-one translation, skip the access list and pool and use only:

ip nat inside source static 10.10.10.1 200.200.200.200

To see active translations:

do show ip nat translations
do show ip nat translations verbose