ccna60d/d06-NAT.md
2022-11-10 11:26:29 +08:00

30 KiB
Raw Blame History

第 6 天 网络地址转换

Network Address Translation


Gitbook ccna60d.xfoss.com

你可以在 https://github.com/gnu4cn/ccna60d 上 fork 本项目,并提交你的修正。

本书结合了学习技巧,包括阅读、复习、背书、测试以及 hands-on 实验。

本书译者用其业余时间完成本书的翻译工作,并将其公布到网上,以方便你对网络技术的学习掌握,为使译者更有动力改进翻译及完成剩下章节,你可以 捐赠译者


第六天的任务

  • 阅读今天的课文
  • 回顾昨天的课文内容
  • 完成今天的实验
  • 阅读 ICND1 记诵指南
  • 在网站subnetting.org 上花 15 分钟

网络地址转换是另一个生僻内容(another strange subject),思科把网络地址转换拆分到 ICND1 和 ICND2 两个大纲中了。

今天你会学到下面这些知识。

  • NAT 基础
  • 对 NAT 的配置和验证
  • NAT 故障排除

今天的课程涵盖了 ICND1 大纲的以下要求。

  • 弄清 NAT 的基本操作
    • NAT 的目的
    • NAT 地址池
    • 静态NAT
    • 一对一的NAT
    • NAT 过载Overloading
    • 源地址NAT
    • 单向NAT
  • 按需求配置并验证 NAT

NAT 基础NAT Basics

想象一下如果网络不是以 IP 地址运行,而是按颜色来运作。蓝色和黄色有无限的供应,其它颜色却是短缺的。网络分开成使用蓝色和黄色的许多用户,因为这两种颜色可以随意使用。而蓝色用户需要频繁地前往外部网络,那么就需要去买点绿色凭据,在蓝色用户需要与外部网络上的主机通信时,路由器可以用其将蓝色用户的凭据进行替换。路由器此时会像下面这样做。

内部凭据被替换成了外部凭据

图6.1 -- 内部凭据被替换成了外部凭据

内部凭据 外部凭据
蓝色 1 号 绿色 1 号
蓝色 2 号 绿色 2 号
蓝色 3 号 绿色 3 号

在各台蓝色设备完成与外部的连接后,对应的绿色凭据会释放给其它蓝色设备使用。这么做的好处在于外部设备无法看到内部凭据编号,且有助于留下互联网上十分有限的可用凭据

我们看到NAT 不仅保护了网络 IP 地址,同时也是节约地址的另一种方法。** NAT 是在路由器或者防火墙上实现的**,那么,代替上面的颜色,你会看到下面这样的情况。

内部地址被替换成外部地址

图6.2 -- 内部地址被替换成外部地址

内部地址 外部地址
192.168.1.1 200.100.1.5
192.168.1.3 200.100.1.7

根据特定的需求,在路由器上配置 NAT 有三种方式。CCNA 考试要求你掌握所有三种方式。

为了配置 NAT ,要先告诉路由器,有哪些内部和外部接口。这是因为事实上可以将众多内部地址替换成某个 NAT 地址池中的地址a pool of NAT addresses ),或者最起码替换成单一的 NAT 地址, 并在路由器上的两个以太网接口之间完成 NAT 。

正如前面说的对于考试和现实需求来说通常都会将私有互联网地址转换成互联网上的可路由的地址routable addresses on the Internet )。这在家庭宽带路由器上就能见到,其通常会给笔记本电脑一个192.168.1范围的 IP ,而在连接到 ISP 的接口上有着一个可路由的地址。

NAT 令到私有网络上的主机可以访问互联网上的资源,或是可以访问到其它公共网络。 NAT 是一个 IETF 标准,其让局域网的内部流量使用一个 IP 地址集合这些地址通常就是RFC 1918 中所定义的私有地址空间,对于外部流量,又使用另一个地址集合,这些地址通常是公开注册的 IP 地址空间。

NAT 为进入和发出的流量去改装数据包的头部,并对每个会话进行跟踪。理解 NAT 的关键,同时也是 NAT 故障排除的关键,就是对 NAT 的有关术语有扎实理解。你应熟悉下面这些 NAT 名词。

  • NAT 内部接口
  • 内部本地地址
  • 内部全球地址
  • NAT 外部接口
  • 外部本地地址
  • 外部全球地址

上面 NAT 术语中的内部接口是指由该组织所控制的管理域的边界接口the border interface of the administrative domain controlled by the organization )。而并不非得要是内部网络上的主机所使用的默认网关

内部本地地址则是某台内部网络上的主机的 IP 地址。在多数情况下,内部本地地址都是一个RFC 1918地址(也就是不可路由地址,比如192.168.x.x172.16.x.x等等)。该地址被转换成外部全局地址,那么外部全局地址通常就是来自一个公开分配的或是经注册的地址池了。要记住的是,尽管如此,内部本地地址也可以是一个公网地址

内部全局地址,则是内部主机在其呈现在外部世界时的地址。一旦内部 IP 地址被转换过后,对公网或是其它任何外部网络及主机来说,它就成为了一个内部全局地址了。

与内部接口对应,外部接口是指不受该组织所控制的管理域的边界。换句话说,外部接口是连接外部网络的,连接的网络可以是互联网或其它任何的外部网络,比如友商网络等。任何处于外部接口外侧的主机,都不属于本地组织的管理之下。

外部本地地址是某台外部主机呈现给内部主机的 IP 地址。最后,外部全局地址又是一个合法的、可在互联网上使用的公网地址。外部本地地址和外部全局地址都是分配自一个全球可路由网络地址空间。

为搞清楚这些概念图6. 3 表示了两台主机之间的一个会话中各种地址的使用。中间的网关上开启了 NAT 。

理解 NAT 的各种内部外部地址

图6.3 -- 理解 NAT 的各种内部外部地址

NAT 内部和外部的分址,是一个经典的考试问题,所以还需在回头看几次这里的内容。

配置并验证 NAT Configuring and Verifying NAT

在思科 IOS 上对网络地址转换的配置和验证是一个简单的事情。在配置 NAT 时,要执行下面这些操作。

  • 使用接口配置命令ip nat inside将一个或多个的接口指定为内部接口。

  • 使用接口配置命令ip nat outside将某个接口指定为外部接口。

  • 配置一条访问控制清单access control list, ACL , 其将匹配所有需要转换的流量。此访问控制清单可以是标准、扩展的命名 ACL 或编号 ACL a standard or an extended named or numbered ACL )。

  • 作为可选项,使用全局配置命令ip nat pool <name> <start-ip> <end-ip> [netmaske <mask> | prefix-length <length>], 配置一个全球地址池(a pool of global addresses)。这会定义出一个内部本地地址将会转换成的内部全球地址池。

  • 使用全局配置命令ip nat inside source list <ACL> [interface | pool] <name> [overload],全局性地配置上 NAT 。

Farai 指出 -- “请看看命令ip nat inside source static, 可以在www.howtonetwork.net/public/698.cfm免费查阅。”

下面的输出给出了一种思科 IOS 软件下配置 NAT (动态 NAT )的方式。可以看出,该配置使用了可用的descriptionremark两种特性,来帮助管理员更容易地对网络进行管理和故障排除。

R1(config)#interface FastEthernet0/0
R1(config-if)#description Connected To The Internal  LAN 
R1(config-if)#ip address 10.5.5.1 255.255.255.248
R1(config-if)#ip nat inside
R1(config-if)#exit
R1(config)#interface Serial0/0
R1(config-if)#description Connected To The  ISP 
R1(config-if)#ip address 150.1.1.1 255.255.255.248
R1(config-if)#ip nat outside
R1(config-if)#exit
R1(config)#access-list 100 remark Translate Internal Addresses  Only 
R1(config)#access-list 100 permit ip 10.5.5.0 0.0.0.7 any
R1(config)#ip nat pool INSIDE-POOL 150.1.1.3 150.1.1.6 prefix-length 24
R1(config)#ip nat inside source list 100 pool INSIDE-POOL
R1(config)#exit

按照这个配置,命令show ip nat translations就可以用来对路由器上具体进行的转换进行查看,如下面的输出所示。

R1#show ip nat translations
Pro		Inside global	Inside local	Outside local	Outside global
icmp	150.1.1.4:4		10.5.5.1:4		200.1.1.1:4		200.1.1.1:4
icmp	150.1.1.3:1		10.5.5.2:1		200.1.1.1:1		200.1.1.1:1
tcp		150.1.1.5:159	10.5.5.3:159	200.1.1.1:23	200.1.1.1:23

在路由器上配置 NAT 时,通常有以下三个选择。

  • 对一个内部地址,用一个外部地址进行替换(静态 NAT static NAT
  • 对多个内部地址,用两个以上的外部地址进行替换(动态 NAT dynamic NAT
  • 将多个内部地址,用多个外部端口进行转换(这就是端口地址转换,或者叫单向NAT, Port Address Translation or one-way NAT

静态NAT

Static NAT

在网络内部一些有一台 web 服务器时,就要将某个特定内部地址,替换成另一个外部地址了。如此时仍然进行动态分址,就没有办法到达该特定目的地址,因为它总是变动的。

Farai 指出“对那些需要经由互联网可达的所有服务器比如e- mail 或 FTP 服务器,都要使用静态 NAT 如下面的图6. 4 所示)”

在用的静态NAT

图6.4 -- 在用的静态NAT

内部地址 外部 NAT 地址
192.168.1.1 200.1.1.1
192.168.2.1 200.1.1.2

对上面的网络,配置应像下面这样。

Router(config)#interface f0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#ip nat inside
Router(config)#interface f0/1
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#ip nat inside
Router(config)#interface s0/0
Router(config-if)#ip nat outside
Router(config-if)#exit
Router(config)#ip nat inside source static 192.168.1.1 200.1.1.1
Router(config)#ip nat inside source static 192.168.2.1 200.1.1.2

命令ip nat insideip nat outside,告诉路由器哪些是内侧 NAT 接口,哪些是外侧的 NAT 接口。而命令ip nat inside source命令,就定义了那些静态转换,想要多少条就可以有多少条的该命令,那么就算你掏钱买的那些公网 IP 地址有多少个,就写上多少条吧。在思科公司,笔者曾解决有关此类问题的大量主要的配置错误,就是找不到ip nat insideip nat outside语句!考试中可能会碰到那些要求找出配置错误的问题。

强烈建议将上述命令敲入到某台路由器中去。本书中有很多的 NAT 实验,但是在阅读理论章节的同时,你敲入得越多,那么这些信息就能越好地进入你的大脑。

动态 NAT 或 NAT 地址池

通常会用到一组可路由地址,或是一个可路由地址池。一对一的 NAT 映射,有其局限性,首当其冲的就是成本高,其次路由器上有着多行的配置。动态 NAT 允许为内部主机配置一或多个的公网地址组。

路由器会维护一个内部地址到外部地址对应的清单,而最后该表格中的转换会超时(Your router will keep a list of the internal addresses to external addresses, and eventually the translation in the table will time out)。可以修改此超时值但请找Cisco 技术支持工程师a Cisco TAC engineer )的建议去修改。

到一个 NAT 公网可路由地址池的内部私有地址

图6.5 -- 到一个 NAT 公网可路由地址池的内部私有地址

当路由器上的内部主机发出到外部的连接时,如执行命令show ip nat translations, 就会看到下面的包含类似信息的图表。

内侧地址 外侧 NAT 地址
192.168.1.3 200.1.1.11
192.168.1.2 200.1.1.14

在上面的图6. 5 中,让内部地址使用的是一个从200.1.1.1200.1.1.16的地址池。下面是要实现该目的的配置文件。这里就不再给出路由器接口地址了。

Router(config)#interface f0/0
Router(config-if)#ip nat inside
Router(config)#interface s0/1
Router(config-if)#ip nat outside
Router(config)#ip nat pool poolname 200.1.1.1 200.1.1.16 netmask 255.255.255.0
Router(config)#ip nat inside source list 1 pool poolname
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255

该 ACL 用于告诉路由器哪些地址要转换,哪些地址不要转换。而该子网掩码实际上是反转的,叫做反掩码,在第九天会涉及。所有 NAT 地址池都需要一个名字,而在本例中,它简单地叫做“ poolname ”。源列表引用自那个 ACL the source list refers to the ACL , 经译者在 GNS3 上测试,动态 NAT 仍然是一对一的地址转换

NAT Overload/端口地址转换/单向NAT

NAT Overload/Port Address Translation/One-Way NAT

IP 地址处于紧缺之中,在有着成千上万的地址需要路由时,将花一大笔钱(静态 NAT 、动态 NAT 都无法解决此问题)。在此情况下,可以使用NAT overload 方案如图6. 6 , 该方案又被思科叫做端口地址转换Port Address Translation, PAT 单向NAT。 PAT 巧妙地允许将某端口号加到某个 IP 地址,作为与另一个使用该 IP 地址的转换区分开来的方式。每个 IP 地址有多达 65000 个可用端口号。

尽管这是超出 CCNA 考试范围的,但了解 PAT 如何处理端口号,会是有用的。在每个思科文档中,都将每个公网 IP 地址的可用端口号分为3个范围,分别是0-511512-10231024-65535。 PAT 给每个 UDP 和 TCP 会话都分配一个独特的端口号。它会尝试给原始请求分配同样的端口值,但如果原始的源端口号已被使用,它就会开始从某个特别端口范围的开头进行扫描,找出第一个可用的端口号,分配给那个会话。

NAT Overload

图6.6 -- NAT Overload

此时,命令show ip nat translations给出的表格,将会显示下面这样的 IP 地址及端口号。

内侧地址 外侧 NAT 地址(带有端口号)
192.168.1.1 200.1.1.1:30922
192.168.2.1 200.1.1.2:30975

而要配置 PAT ,需要进行如同动态 NAT 的那些同样配置,还要在地址池后面加上关键字 overload

Router(config)#interface f0/0
Router(config-if)#ip nat inside
Router(config)#interface s0/1
Router(config-if)#ip nat outside
Router(config)#ip nat pool poolname 200.1.1.1 200.1.1.1 netmask 255.255.255.0
Router(config)#ip nat inside source list 1 pool poolname overload
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255

这该很容易记住吧!

Farai 指出 -- “以多于一个 IP 方式使用 PAT ,就是对地址空间的浪费,因为路由器会使用第一个 IP 地址,并为每个随后的连接仅增大端口号。这就是为何通常将 PAT 配置为该接口上的超载(overload)。”

NAT 故障排除

Troubleshooting NAT

NAT 故障中十次有九次,都是由于路由器管理员忘记了把ip nat outsideip nat inside命令加到路由器接口上。事实上,几乎总是存在这个问题!接下来最频繁的错误包括不正确的 ACL ,以及某个拼写错误的地址池名称(地址池是区分大小写的)。

使用命令debug ip nat [detailed],可以在路由器上对 NAT 转换进行调试,又可以使用命令sh ip nat translations,来查看 NAT 地址池。

第六天问题

  1. NAT converts the _______ headers for incoming and outgoing traffic and keeps track of each session.
  2. The _______ address is the IP address of an outside, or external, host as it appears to inside hosts.
  3. How do you designate inside and outside NAT interfaces?
  4. Which show command displays a list of your NAT table?
  5. When would you want to use static NAT?
  6. Write the configuration command for NAT 192.168.1.1 to 200.1.1.1.
  7. Which command do you add to a NAT pool to enable PAT?
  8. NAT most often fails to work because the _______ command is missing.
  9. Which debug command shows live NAT translations occurring?

第六天问题的答案

  1. Packet.
  2. Outside local.
  3. With the ip nat inside and ip nat outside commands.
  4. The show ip nat translations command.
  5. When you have a web server (for example) on the inside of your network.
  6. ip nat inside source static 192.168.1.1 200.1.1.1.
  7. The overload command.
  8. The ip nat inside or ip nat outside command.
  9. The debug ip nat [detailed] command.

第六天的实验

静态 NAT 实验

Static NAT Lab

拓扑图

静态 NAT 实验拓扑图

静态 NAT 实验拓扑图

实验目的

学习如何配置静态 NAT 。

实验步骤

  1. 将 IP 地址192.168.1.1 255.255.255.0加入到路由器A,并修改hostnameRouter A。把 IP 地址192.168.1.2 255.255.255.0加入到路由器B。在正确的一侧加上时钟速度(clock rate),然后分别自AB和自BA进行ping测试。如需提示,请回顾先前的那些实验。

  2. 在路由器A上需要加入一个 IP 地址,以模拟 LAN 上的一台主机。通过一个环回接口,可以实现这个目的

    RouterA#conf t
    Enter configuration commands, one per line. End with CNTL/Z.
    RouterA(config)#interface Loopback0
    RouterA(config-if)#ip add 10.1.1.1 255.0.0.0
    RouterA(config-if)#
    
  3. 为进行测试,需要告诉Router B将发往任何网络的任何流量,都发往Router A。通过一条静态路由完成这个。

    RouterB#conf t
    Enter configuration commands, one per line. End with CNTL/Z.
    RouterB(config)#ip route 0.0.0.0 0.0.0.0 Serial0/1/0
    RouterB(config)#
    
  4. 要测试该条静态路由是否工作,通过从Router A上的环回接口对Router B进行ping操作。

    RouterA#ping
    Protocol [ip]:
    Target IP address: 192.168.1.2
    Repeat count [5]:
    Datagram size [100]:
    Timeout in seconds [2]:
    Extended commands [n]: y
    Source address or interface: 10.1.1.1
    Type of service [0]:
    Set DF bit in IP header? [no]:
    Validate reply data? [no]:
    Data pattern [0xABCD]:
    Loose, Strict, Record, Timestamp, Verbose[none]:
    Sweep range of sizes [n]:
    Type escape sequence to abort.
    Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
    Packet sent with a source address of 10.1.1.1
    !!!!!
    Success rate is 100 percent (5/5), round-trip min/avg/max = 31/31/32 ms
    RouterA#
    
  5. Router A上配置一个静态 NAT 条目。使用 NAT ,将地址10.1.1.1, 在其离开该路由器时,转换成172.16.1.1。同样需要告诉路由器哪个是 NAT 的内部接口,哪个是外部接口。

    RouterA#conf t
    Enter configuration commands, one per line. End with CNTL/Z.
    RouterA(config)#int Loopback0
    RouterA(config-if)#ip nat inside
    RouterA(config-if)#int Serial0/1/0
    RouterA(config-if)#ip nat outside
    RouterA(config-if)#
    RouterA(config-if)#ip nat inside source static 10.1.1.1 172.16.1.1
    RouterA(config)#
    
  6. 打开 NAT 调试,如此就可以看到转换的进行。此时再执行另一个扩展ping操作(自L0接口的),并查看 NAT 表。因为 IOS 的不同,你的输出可能与我的不一样。

    RouterA#debug ip nat
    IP NAT debugging is on
    RouterA#
    RouterA#ping
    Protocol [ip]:
    Target IP address: 192.168.1.2
    Repeat count [5]:
    Datagram size [100]:
    Timeout in seconds [2]:
    Extended commands [n]: y
    Source address or interface: 10.1.1.1
    Type of service [0]:
    Set DF bit in IP header? [no]:
    Validate reply data? [no]:Data pattern [0xABCD]:
    Loose, Strict, Record, Timestamp, Verbose[none]:
    Sweep range of sizes [n]:
    Type escape sequence to abort.
    Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
    Packet sent with a source address of 10.1.1.1
    NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [11]
    !
    NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [11]
    NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [12]
    !
    NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [12]
    NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [13]
    !
    NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [13]
    NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [14]
    !
    NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [14]
    NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [15]
    !
    Success rate is 100 percent (5/5), round-trip min/avg/max = 31/46/110 ms
    RouterA#
    NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [15]
    RouterA#show ip nat translations
    Pro		Inside global	Inside local	Outside local	Outside global
    icmp 	172.16.1.1:10 	10.1.1.1:10 	192.168.1.2:10 	192.168.1.2:10
    icmp 	172.16.1.1:6 	10.1.1.1:6 		192.168.1.2:6 	192.168.1.2:6
    icmp 	172.16.1.1:7 	10.1.1.1:7 		192.168.1.2:7 	192.168.1.2:7
    icmp 	172.16.1.1:8 	10.1.1.1:8 		192.168.1.2:8 	192.168.1.2:8
    icmp 	172.16.1.1:9 	10.1.1.1:9 		192.168.1.2:9 	192.168.1.2:9
    ---		172.16.1.1		10.1.1.1 			--- 			---
    RouterA#
    
  7. 记住,路由器随后很快就会清除该 NAT 转换,为其它 IP 地址使用这个/这些 NAT 地址而对其进行清理。

    NAT: expiring 172.16.1.1 (10.1.1.1) icmp 6 (6)
    NAT: expiring 172.16.1.1 (10.1.1.1) icmp 7 (7)
    

译者注: 通过本实验,要注意三个问题:一是可路由地址可以是外部接口同一网段的地址,也可以不是;二是** NAT 超时问题,该参数可以设置**;三是环回接口的使用, 常用来模拟 LAN 中的计算机

NAT 地址池/动态 NAT 实验

NAT Pool Lab

拓扑图

 NAT 地址池/动态 NAT 实验拓扑图

** NAT 地址池/动态 NAT 实验拓扑图**

实验目的

学习如何配置一个 NAT 地址池(动态 NAT )。

实验步骤

  1. 将 IP 地址192.168.1.1 255.255.255.0加入到路由器A,并修改hostnameRouter A。把 IP 地址192.168.1.2 255.255.255.0加入到路由器B。在正确的一侧加上时钟速度(clock rate),然后分别自AB和自BA进行ping测试。如需提示,请回顾先前的那些实验。

  2. 需要给RouterA添加两个 IP 地址来模拟 LAN 上的主机。通过两个环回接口,可以达到这个目的。这两个 IP 地址将位处不同子网,但都以10地址开头。

    RouterA#conf t
    Enter configuration commands, one per line. End with CNTL/Z.
    RouterA(config)#interface Loopback0
    RouterA(config-if)#ip add 10.1.1.1 255.255.255.0
    RouterA(config-if)#int l1 ← short for Loopback1
    RouterA(config-if)#ip address 10.2.2.2 255.255.255.0
    RouterA(config-if)#
    
  3. 为了进行测试,需要告诉RouterB将到任何网络的任何流量,都发往RouterA。用一条静态路由完成这点。

    RouterB#conf t
    Enter configuration commands, one per line. End with CNTL/Z.
    RouterB(config)#ip route 0.0.0.0 0.0.0.0 Serial0/1/0
    RouterB(config)#
    
  4. RouterA上,从环回接口向RouterB发出ping操作,以此来测试该静态路由是否工作。

    RouterA#ping
    Protocol [ip]:
    Target IP address: 192.168.1.2
    Repeat count [5]:
    Datagram size [100]:
    Timeout in seconds [2]:
    Extended commands [n]: y
    Source address or interface: 10.1.1.1
    Type of service [0]:
    Set DF bit in IP header? [no]:
    Validate reply data? [no]:
    Data pattern [0xABCD]:
    Loose, Strict, Record, Timestamp, Verbose[none]:
    Sweep range of sizes [n]:
    Type escape sequence to abort.
    Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
    Packet sent with a source address of 10.1.1.1
    !!!!!
    Success rate is 100 percent (5/5), round-trip min/avg/max = 31/31/32 ms
    RouterA#
    
  5. RouterA上配置一个 NAT 地址池。在本实验中,使用地址池172.16.1.1172.16.1.10。任何以10开头的地址,都将成为一个 NAT 。记住你必须指定 NAT 的内部和外部接口,否则 NAT 就不会工作。

    RouterA#conf t
    Enter configuration commands, one per line. End with CNTL/Z.
    RouterA(config)#int l0
    RouterA(config-if)#ip nat inside
    RouterA(config)#int l1
    RouterA(config-if)#ip nat inside
    RouterA(config-if)#int Serial0/1/0
    RouterA(config-if)#ip nat outside
    RouterA(config-if)#exit
    RouterA(config)#ip nat pool 60days 172.16.1.1 172.16.1.10 netmask 255.255.255.0
    RouterA(config)#ip nat inside source list 1 pool 60days
    RouterA(config)#access-list 1 permit 10.1.1.0 0.0.0.255
    RouterA(config)#access-list 1 permit 10.2.1.0 0.0.0.255
    RouterA(config)#
    

    命令ip nat pool创建出地址池。需要给地址池一个自己选择的名称。而命令netmask告诉路由器应用到地址池上的网络掩码

    命令source list告诉路由器查看的 ACL 。该条 ACL 告诉路由器哪些网络将与 NAT 地址池进行匹配和转换

  6. 打开 NAT 调试,如此才可以看到转换的发生。接着执行扩展ping(自L0L1发出的),并查看 NAT 表。因为 IOS 平台的不同,你的输出可能和下面的不一样。将会看到 NAT 地址池中的两个地址正在用到。

    RouterA#debug ip nat
    RouterA#ping
    Protocol [ip]:
    Target IP address: 192.168.1.2
    Repeat count [5]:Datagram size [100]:
    Timeout in seconds [2]:
    Extended commands [n]: y
    Source address or interface: 10.1.1.1
    Type of service [0]:
    Set DF bit in IP header? [no]:
    Validate reply data? [no]:
    Data pattern [0xABCD]:
    Loose, Strict, Record, Timestamp, Verbose[none]:
    Sweep range of sizes [n]:
    Type escape sequence to abort.
    Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
    Packet sent with a source address of 10.1.1.1
    NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [26]
    !
    NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [16]
    NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [27]
    !
    NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [17]
    NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [28]
    !
    NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [18]
    NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [29]
    !
    NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [19]
    NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [30]
    !
    Success rate is 100 percent (5/5), round-trip min/avg/max = 17/28/32 ms
    RouterA#
    NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [20]
    RouterA#ping
    Protocol [ip]:
    Target IP address: 192.168.1.2
    Repeat count [5]:
    Datagram size [100]:
    Timeout in seconds [2]:
    Extended commands [n]: y
    Source address or interface: 10.2.2.2
    Type of service [0]:
    Set DF bit in IP header? [no]:Validate reply data? [no]:
    Data pattern [0xABCD]:
    Loose, Strict, Record, Timestamp, Verbose[none]:
    Sweep range of sizes [n]:
    Type escape sequence to abort.
    Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
    Packet sent with a source address of 10.2.2.2
    NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [31]
    !
    NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [21]
    NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [32]
    !
    NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [22]
    NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [33]
    !
    NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [23]
    NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [34]
    !
    NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [24]
    NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [35]
    !
    Success rate is 100 percent (5/5), round-trip min/avg/max = 31/31/32 ms
    RouterA#
    NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [25]
    RouterA#show ip nat trans
    Pro		Inside global	Inside local	Outside local	Outside global
    icmp	172.16.1.1:16 	10.1.1.1:16 	192.168.1.2:16 	192.168.1.2:16
    icmp	172.16.1.1:17 	10.1.1.1:17 	192.168.1.2:17 	192.168.1.2:17
    icmp	172.16.1.1:18 	10.1.1.1:18 	192.168.1.2:18 	192.168.1.2:18
    icmp	172.16.1.1:19 	10.1.1.1:19 	192.168.1.2:19 	192.168.1.2:19
    icmp	172.16.1.1:20 	10.1.1.1:20 	192.168.1.2:20 	192.168.1.2:20
    icmp	172.16.1.2:21 	10.2.2.2:21 	192.168.1.2:21 	192.168.1.2:21
    icmp	172.16.1.2:22 	10.2.2.2:22 	192.168.1.2:22 	192.168.1.2:22
    icmp	172.16.1.2:23 	10.2.2.2:23 	192.168.1.2:23 	192.168.1.2:23
    icmp 	172.16.1.2:24 	10.2.2.2:24 	192.168.1.2:24 	192.168.1.2:24
    icmp 	172.16.1.2:25 	10.2.2.2:25 	192.168.1.2:25 	192.168.1.2:25
    RouterA#
    

NAT Overload 实验

NAT Overload Lab

重复先前的实验。这次,在引用地址池时,将overload命令加到该配置行的后面。这会指示路由器使用 PAT 。去掉Loopback1请注意,正如 Farai 指出的那样,在真实世界中,地址池通常只会有一个地址,否则在外部接口上会超载Please note that as Farai says, in the real world, your pool will usually have only one address or you will overload your outside interface )。

RouterA(config)#ip nat inside source list 1 pool 60days overload

我已经为方便而使用思科Packet Tracer ,完成了上面的实验,所以你通常会碰到与我的输出所不一致的输出。下面是一个 PAT 实验的示例输出。从中可以看出,路由器给每个转换都加上了一个端口号。不幸的是,在 NAT 地址池实验中,会看到相似的编号,这是一个 PAT 的混淆之处。

RouterA#show ip nat tran
Inside global	Inside local		Outside local		Outside global
10.0.0.1:8759 	172.16.1.129:8759 	192.168.1.2:8759 	192.168.1.2:8759