★示例1
在本例中,公司使用一台两接口路由器,一个是Ethernet,另一个是串行接口。Ethernet0连接到内部网络,而串行接口则通过PPP链路连接到 ISP路由器。在内部网络中,公司使用10.0.0.0/24地址范围内的地址。公司已从其供应商那里获得了一个单一的全局可路由的IP地址 171.100.1.1,并且该地址用于路由器的串行接口上。公司使用PAT将其所有的内部本地地址转换成单一的内部全局地址171.100.1.1。公 司希望提供可以从Internet访问的FTP和Web服务器,并且对Web服务器的请求应被送到Web服务器所在的地址10.1.1.100,而FTP 请求则被送到FTP服务器所在的地址10.1.1.101。
1 解决方案
interface ethernet0
ip address 10.1.1.1 255.255.255.0
ip nat inside
!
interface serial0
ip address 171.100.1.1 255.255.255.252
ip nat outside
!
ip access-list permit 10.0.0.0 0.255.255.255
!
ip nat inside source list 1 interface serial0 overload
ip nat inside source list 1 static tcp 10.1.1.100 80 171.100.1.1 80
ip nat inside source list 1 static tcp 10.1.1.101 21 171.100.1.1 21
2 分析
先定义NAT所用的接口,并通过将合适的命令放在每个接口下面来定义接口是NAT内部或外部接口。通常,在定义NAT接口之后,就要定义NAT池来指定所 用的内部全局地址。但是,在本例中只使用了一个单一的内部全局地址,并且将该单一内部全局地址用于路由器的serial 0接口上。
由于只有一个单一内部全局地址并且用于路由器自己的接口上,所以我们不需要定义NAT池。我们只简单地使用示例中所示的inside source list语句即可。所定义源列表使用路由器接口的IP地址,并且重载该单一IP地址。该命令允许来自10.0.0.0/24网络的内部主机访问 Internet。路由器执行PAT来创建TCP/UDP端口的NAT映射。完成该步以后,接下来需要为内部Web和FTP服务器创建静态映射。
由于只有一个单一的内部全局IP地址,因此要根据IP地址以及TCP或UDP端口来定义静态映射。在本例中,将目的地址为171.100.1.1和目的 TCP端口为80的报文地址转换成TCP端口80上的10.1.1.100内部主机地址。我们还将目的地址为171.100.1.1和目的TCP端口为 21的报文地址转换成TCP端口21上的10.1.1.101内部主机地址。这样我们就在不同的内部服务器上提供了Web和FTP服务,虽然我们只有一个 单一的内部全局地址。
注意,由于该命令语法允许指定内部服务器的IP地址和端口,所以可以在内部提供多个Web和FTP服务器。例如,可以创建如下的静态映射:
ip nat inside source static tcp 10.1.1.102 21 21.171.100.1 27
该 转换*作将所有目的地址为171.100.1.1且目的端口为27的向内报文的地址转换为FTP端口上的地址10.1.1.102。当然,我们必须保证, 外部用户能够知道我们的FTP服务器使用非标准的端口,而大多数的FTP客户机都提供这一能力。显然公司可以使用各种不同的端口转换方法来提供服务,即使 公司只有一个全局可路由的IP地址。这些方法使Cisco NAT的功能更加强大。
★示例2
在本例中,某公司使用一台具有两个Ethernet的路由器。Ethernet0连接到内部网络,而Ethernet1则连接到一个LAN网段。公司与其 ISP的路由器共享该网段。在内部网络中,公司使用10.0.0.0/24地址空间中的地址。公司为自己提供一个IP地址池171.100.1.0 /24。公司路由器的接口使用IP地址171.100.1.1,而ISP路由器接口则使用IP地址171.100.1.2,而将那些从 171.100.1.0/24开始的其余地址留给NAT转换。公司希望在路由器上使用必要的命令,以使其内部用户能够使用ISP所提供的地址空间中的有 效,全局可路由的地址,以访问Internet。
1 解决方案
interface ethernet0
ip address 10.1.1.1 255.255.255.0
ip nat inside
!
interface Ethernet1
ip address 171.100.1.1 255.255.255.0
ip nat outside
!
ip access-list 1 permit 10.0.0.0 0.255.255.255
!
ip nat pool internet 171.100.1.3 171.100.1.254 netmask 255.255.255.0
!
ip nat inside source list 1 pool internet
2 分析
在该方案中定义了用于NAT的接口。通过将相应的命令放在每个接口下面,指定该接口是一个NAT外部接口或内部接口。这是配置NAT的第一步。如果读者不 将接口指定为一个NAT内部或NAT外部接口,或者指定的不正确,则NAT就不能正确工作。如果不定义NAT接口,NAT根本不工作,并且debug ip nat detail命令也不会输出任何结果。如果读者已定义了所有其他的NAT命令,但NAT还是不工作,则确认每个接口下面的所放的NAT命令是否合理。
在 每个接口下面定义了合适的NAT命令之后,就可以定义存放内部全局地址的NAT池。我们定义的起始IP地址是171.100.1.3,而结束地址为 171.100.1.254。我们不使用.1和.2地址是因为这两个地址分别用于用户路由器和ISP路由器。由于这两个地址也与用户路由器上的 Ethernet1接口所在的子网是同一子网地址,用户路由器将使用自己的MAC地址回答来自ISP路由器的ARP请求。这允许ISP路由器从NAT池中 解析出IP地址,并使用从NAP池中取出的目的IP地址将报文发送给用户路由器。
注意,MAT地址池并非必须来自与用户路由器接口上所配置的子网相同。
★示例3
在本例中,公司使用一台具有两个接口的路由器,分别是以太网和串行接口。Ethernet0连接到内部网络,而串行接口则通过点到点协议(PPP)链路连 接到ISP路由器。在内部网络中,公司使用的地址来自地址空间10.0.0.0/24,该地址空间在Internet上是不可路由的。公司自己使用IP地 址范围171.100.1.0/24。到ISP的PPP链路使用来自198.50.1.0/30子网的地址。公司希望在路由器上配置合适的命令,以便内部 用户可以通过使用有效的、全局可路由的地址访问Internet。这些地址应该是来自ISP所提供的地址空间171.100.1.0/24。我们打算与上 游的ISP路由器交换OSPF(开放式最短路径优先)更新信息。从而可以从该路由器接收缺省路由,并将其通知ISP路由器,该路由正在公司路由器上使用。
1 解决方案1
interface ethernet0
ip address 10.1.1.1 255.255.255.0
ip nat inside
!
interface serial0
ip address address 198.50.1.1 255.255.255.252
ip nat outside
!
ip access-list 1 permit 10.0.0.0 0.255.255.555
!
ip nat pool internet 171.100.1.1 171.100.1.254 netmask 255.255.255.0
!
ip nat inside source list 1 pool internet
!
ip route 171.100.1.0 255.255.255.0 null0
!
router ospf 1
network 198.50.1.0 0.0.0.255 area 0
redistribute static
2 解决方案2
interface loopback 0
ip address 171.100.1.1 255.255.255.0
ip ospf network point-to-point
!
interface ethernet0
ip address 10.1.1.1 255.255.255.0
ip nat inside
!
interface serial0
ip address address 198.50.1.1 255.255.255.252
ip nat outside
!
ip access-list 1 permit 10.0.0.0 0.255.255.555
!
ip nat pool internet 171.100.1.2 171.100.1.254 netmask 255.255.255.0
!
ip nat inside source list 1 pool internet
!
ip route 171.100.1.0 255.255.255.0 null0
!
router ospf 1
network 198.50.1.0 0.0.0.255 area 0
network 171.100.1.0 0.0.0.255 area 0
3 分析
在解决方案1中,先定义了用于NAT的接口,并通过将合适的命令放在每个接口下面,来指定该接口是一个NAT内部或外部接口。在每个接口下面定义了适当的 NAT命令之后,再定义内部全局地址所在的NAT池。定义全局地址的起始IP地址为171.100.1.1,结束IP地址为171.100.1.254。 我们使用除.1和.2地址之外的所有主机地址,是因为这些主机地址都不用于路由器接口。通过在NAT池中使用与用户路由器接口所用子网不同的子网,可以获 得一些主机地址。但这又引入了一个新的问题。
在前一个示例中,ISP路由器直接连接到分 配给NAT池的子网上。这种情况下,ISP路由器只发出一个ARP请求,以请求NAT池中的单个NAT地址,而用户路由器则使用自己的MAC地址来响应, 此时工作正常。但是,上游的ISP路由器并不直接连接到NAT地址池子网171.100.1.0/24,所以必须告诉它如何通过路由协议或静态路由的方法 到达NAT池所在的子网。在解决方案1中,我们启用了OSPF并且为171.100.1.0/24重新分配一个静态路由到OSPF中。上游的ISP路由器 会接收到该路由,并且将所有目的地址为NAT池中地址的报文转发到我们的路由器中。
可选 地,ISP可以在其路由器上安装一个静态路由,用来将所有171.100.1.0/24网络的报文指向我们的路由器。但是,我们希望:当NAT池地址不是 直接从相连的子网上取出时,能够显示出路由信息的传播路径。注意,我们将整个171.10.1.0/24子网的NAT地址表置为null0。由于我们要指 定NAT地址表中的某些表项,而非整个171.100.1.0/24子网,这时路由器并不丢弃这些报文,而是将它们转发到NAT表中所定义的内部主机上。
在解决方案2中,我们使用了另一种方法来通知ISP路由器有关NAT池的信息。这种方法是创建一个闭环(loopback)接口,并给其分配一个NAT池 中的IP地址。通过将network171.100.1.00.0.0.255 area 0语句包含在我们的OSPF路由进程下面,可以将该闭环地址作为OSPF路由的一部分。注意,我们将.1地址从NAT池中删除,而使用主机地址.2作为 NAT池的起始地址,这样就减少了NAT池地址和用于闭环接口上的IP地址重叠的可能性。另外,我们在闭环接口下面使用接口命令ip ospf network point-to-point。一般地,OSPF将闭环接口看成是一个OSPF桩(stub)网络,并且将接口的32位表项作为路由,而非整个子网。在本 例中,OSPF进程会发送172.100.1.1/32而非表172.100.1.0/24。在这种情况下,由于需要将整个171.100.1.0/24 子网信息传送给上游的ISP路由器,所以该地址转换过程不能工作。OSPF接口命令告诉OSPF传送该接口的路由,就像该网络是点到点网络一样,而不像是 一个桩(stub)网络。这意味着它将通过OSPF传送整个171.100.1.0/24子网信息(ip ospf network point-to-point命令在IOS版本11.3或更高版本中使用),这两种方法都能正常工作,但使用哪一种则是读者的偏好问题了。
注意:我们知道一个公司通常会在其路由器和ISP路由器之间运行边界网关协议(Border Gateway Protocol, BGP)。在本例中,我们选择了OSPF路由协议,目的是为了分析ip ospf network point-to-point命令。
★示例4
在本例中,公司与示例2中的公司相同,但情况稍有不同。这里公司处于Internet环境中,它决定提供一个能从Internet访问的Web服务器,以 便那些浏览Web的用户能够了解公司。该服务器位于内部网络中,并且能够从Internet上的主机访问该服务器。这样它将拥有IP地址 10.1.1.100。由于Web服务器必须能够通过Internet来访问,所以这个源IP地址在转发给ISP路由器之前,必须被转换成内部全局缓冲池 中的地址。我们为公司Web服务器选择171.100.1.100作为其转换成的内部全局地址。
如 示例2那样,Ethernet0连接到内部网络,而串行接口则通过PPP链路连接到ISP路由器。在内部网络中,公司使用10.0.0.0/24中的地 址,而全局池中的IP地址范围是171.100.1.0/24。在本例中,我们将假定ISP使用静态路由来找到我们的路由器,其中路由器地址在 171.100.1.0/24地址范围内。并且ISP将该路由传送到Internet上。
1 解决方案
interface ethernet0
ip address 10.1.1.1 255.255.255.0
ip nat inside
!
interface serial0
ip address 198.50.1.1 255.255.255.252
ip nat outside
ip access-list 1 permit 10.0.0.0 0.255.255.255
!
ip nat pool internet prefix-length 24
address 171.100.1.1 171.100.1.99
address 171.100.1.101 171.100.1.254
!
ip nat inside source static 10.1.1.100 171.100.1.100
ip nat inside source list 1 pool internet
2 分析
如 其他示例那样,我们在使用任何其他NAT命令之前,应先定义NAT内部和外部接口。而后需要配置NAT池地址和NAT源列表,以允许能够从池中获得地址。 本例与示例2的不同之处在于:我们需要为Web服务器设置IP地址171.100.1.100。另外,必须在内部全局地址和内部本地地址之间给出静态映射 关系。不然的话,就不能保证NAT表中的NAT转换会将NAT池中的特定IP地址映射到Web服务器。这也意味着无法从Internet上知道应该使用哪 个地址才能到达Web服务器,显然这是毫无用处的。
注意,我们在配置中使用ip nat inside source static 命令,以建立10.1.1.100和171.100.1.100之间的静态映射。注意到在本例中NAT池的语法有些不同。Cisco已扩展了NAT语法, 所以可以拆分NAT池所用的IP地址范围。我们定义了两个不同的地址范围:从171.100.1.1到171.100.1.9 9,以及从171.100.1.1 0 1到171.100.1.254。所以我们可以将IP地址171.100.1.100从NAT池中排除出去,因为我们使用该地址进行静态转换。我们使用 ip nat inside source list命令来定义IP地址,以允许该IP地址从NAT池中获取相应的IP地址。注意,至此,只使用了标准IP访问表来定义IP地址。也可以使用一个扩展 的IP访问表,在本章后面的示例中会涉及到。
★示例5
在本例中,公司使用一台两接口路由器,一个Ethernet和一个串行接口。其中Ethernet0连接到内部网络,而串行接口则通过PPP链路连接到 ISP路由器。在内部网络中,公司使用10.0.0.0/24地址空间中的地址,该地址在Internet上不能路由。公司还提供了IP地址范围 171.100.1.0/24,用以创建全局可访问的Web服务器。公司认为他们将有大量的Web服务器连接,但服务器只是一个低端服务器。并且公司并不 打算买更多的机器,因为公司已经花费了大量资金来购买硬件设备。公司希望只使用少数几台服务器,并且对于外界看来应该就像是一台服务器一样。换句话说,公 司希望发送到一个内部全局地址上的报文能被转换成多个内部本地地址。
1 解决方案
interface ethernet0
ip address 10.1.1.1 255.255.255.0
ip nat inside
!
interface serial0
ip address 198.50.1.1 255.255.255.252
ip nat outside
!
ip access-list 1 permit 171.100.1.100
!
ip nat pool web-farm 10.1.1.2 10.1.1.4 prefix-length 29 type rotary
!
ip nat inside destination list 1 pool web-farm
2 分析
我们先定义用于NAT的接口,并通过将合适的命令放在每个接口下面,来确定这些接口是NAT内部接口,还是外部接口。在每个接口下面定义了合适的NAT命 令之后,接着定义NAT池。在非本例的情况下,NAT池的Web地址标识了公司所有的Web服务器的内部本地地址。注意,在本例中我们使用参数 prefix-length而非netmask。值为29的prefix-length等价于掩码参数值255.255.255.248。再注意 rotary关键字的使用。这表明了我们打算使用round-robin策略从NAT池中取出相应的IP地址用于转换进来的IP报文。
在定义了NAT池之后,我们继续定义将从rotary池中选中的IP地址。我们定义一个inside destination list语句,而不使用inside source list语句。其中inside destination list语句定义了其IP的地址匹配访问表1的报文将使用round-robin策略,将其目的地址转换成rotary池中定义的池地址。在这种情况下访 问表1将匹配一个单一的IP地址171.100.1.100。这样,具有171.100.1.100目的地址的报文会将其目的IP地址修改为:路由器使用 轮询策略从rotary池中所取出的地址。这允许使用3个内部服务器来接收目的地址为171.100.1.100的向内报文。所有这三个内部Web服务器 将分担发送到该单一全局地址上的请求。着重指出的是路由器不会保证三台Web服务器都是正常的。如果某台服务器故障,路由器仍会向该服务器发送报文。如果 需要功能更完善的解决方案,则Cisco有一种称为本地导向器(Local Director)的产品,它可以用来确定池中的服务器是否正常工作。