NAT

Network Address Translation (NAT) is used to translate the source or destination of an IP packet as a policy at a router or firewall. NAT implementations have to keep a state in order to identify where to translate return traffic to. Imagine a network that uses private networks (RFC 1918) and needs to speak to the public Internet. The gateway has a public IP address and needs to change source addresses from the private network to it, and return traffic must be translated back.

NAT is a workaround implemented due to IP version 4 address space shortages. IP version 6 should hopefully bury this hack (it hasn't see natally).

Programs that do NAT are a series of firewalls, natd, ppp.