NAT

Private IPv4 addresses (RFC 1918)

  • IPv4 does not provide enough addresses for all devices that need an IP address in the modern world.

  • The long-term solution is to switch to IPv6

  • There are three main short-term solutions:

    • CIDR

    • Private IPv4 adresses

    • NAT

  • RFC 1918 specifies the following IPv4 address ranges as private:

    • 10.0.0.0/8

    • 172.16.0.0/12

    • 192.168.0.0/16

Private IP addresses cannot be used over the internet!

Network Address Translation (NAT)

  • Network Address Translation is used to modify the source and/or destination IP addresses of packets.

  • There are various reasons to use NAT, but the most common reason is to allow hosts with private IP addresses to communicate with other hosts over the internet.

Static NAT

  • Static NAT involves statically configuring one-to-one mappings of private IPs to public IPs.

  • An inside local IP address is mapped to an inside global IP address.

    • An inside local IP is the IP address of the inside host, from the perspective of the local network.

    • An inside global IP is the IP address of the inside host, from the perspective of the outside hosts.

  • Static NAT allows devices with private IP addresses to communicate over the Internet. However, because it requires a one-to-one IP address mapping, it does not help preserve IP addresses.

!!Define the 'inside' interface(s) connected to the internal network
R1(config)#int g0/1
R1(config-if)#ip nat inside

!!Define the 'outside' interface(s) connected to the external network.

R1(config-if)#int g0/0
R1(config-if)#ip nat outside
R1(config-if)#exit

!!!Configure the one-to-one IP address mappings.
!!!ip nat inside source static inside-local-ip inside-global-ip


R1(config)#ip nat inside source static 192.168.0.167 100.0.0.1
R1(config)#ip nat inside source static 192.168.0.168 100.0.0.2
R1(config)#exit

R1#show ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
udp 100.0.0.1:56310    192.168.0.167:56310 8.8.8.8:53        8.8.8.8:53
--- 100.0.0.1          192.168.0.167      ---                ---
udp 100.0.0.2:62321    192.168.0.168:62321 8.8.8.8:53        8.8.8.8:53
--- 100.0.0.2          192.168.0.168      ---                ---
  • The outside local address is the IP address of the outside host, from the perspective of the local network.

  • The outside global address is the IP address of the outside host, from the perspective of the outside network.

Inside/Outside = LOCATION OF THE HOST

Local/Global = PERSPECTIVE

R1#clear ip nat translation *
!THIS CLEARS ALL DYNAMIC TRANSLATIONS
R1#show ip nat statistics

Dynamic NAT

  • In dynamic NAT, the router dynamically maps inside local addresses to inside global addresses as needed.

  • An ACL is used to identify which traffic should be translated.

    • If the source IP is permitted by the ACL, the source IP will be translated.

    • If the source IP is denied by the ACL, the source IP will NOT be translated.

  • A NAT pool is used to define the available inside global addresses.

  • If there are not enough inside global IP addresses available, it is called 'NAT pool exhaustion'.

R1(config)#int g0/1
R1(config-if)#ip nat inside

R1(config-if)#int g0/0
R1(config-if)#ip nat outside
R1(config-if)#exit

R1(config)#access-list 1 permit 192.168.0.0 0.0.0.255

R1(config)#ip nat pool POOL1 100.0.0.0 100.0.0.255 prefix-length 24

R1(config)#ip nat inside source list 1 pool POOL1

PAT (Port Address Translation)

  • PAT (aka NAT overload) translates both the IP address and the port number (if necessary)

  • By using a unique port number for each communication flow, a single public IP address can be used by many different internal hosts.

  • Because many inside hosts can share a single public IP, PAT is very useful for preserving public IP addresses, and it is used in networks all over the world.

R1(config)#int g0/1
R1(config-if)#ip nat inside

R1(config-if)#int g0/0
R1(config-if)#ip nat outside
R1(config-if)#exit

R1(config)#access-list 1 permit 192.168.0.0 0.0.0.255

R1(config)#ip nat pool POOL1 100.0.0.0 100.0.0.255 prefix-length 24

R1(config)#ip nat inside source list 1 pool POOL1 overload
R1(config)#int g0/1
R1(config-if)#ip nat inside

R1(config-if)#int g0/0
R1(config-if)#ip nat outside
R1(config-if)#exit

R1(config)#access-list 1 permit 192.168.0.0 0.0.0.255
R1(config)#ip nat inside source list 1 interface g0/0 overload
R1(config)# ip nat pool pool-name start-ip end-ip prefix-length prefix-length
R1(config)# ip nat pool pool-name start-ip end-ip netmask subnet-mask
R1(config)# ip nat inside source list access-list pool pool-name
R1(config)# ip nat inside source list access-list pool pool-name overload
R1(config)# ip nat inside source list access-list interface interface overload

Last updated

Was this helpful?