简介本文档介绍如何在思科路由器上配置网络地址转换 (NAT)。

先决条件要求本文档需要读者具备与 NAT 相关的基本术语知识。

使用的组件本文档中的信息基于以下软件和硬件版本:

Cisco 2500 系列路由器

Cisco IOS® 软件版本 12.2 (10b)

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。

规则有关文档规则的详细信息,请参阅 Cisco 技术提示规则。

NAT 配置和部署的快速入门步骤注意:本文档中所提及 Internet 或 Internet 设备,都是指任何外部网络上的设备。

配置 NAT 时,往往不易知道从哪儿着手,尤其是在您不熟悉 NAT 的时候更是如此。下面的步骤将指导您定义自己希望 NAT 实现的目标,并指导您如何配置 NAT:

定义NAT内部和外部接口。

用户是否在多个接口存在?

是否有多个可用于互联网的接口?

定义要使用 NAT 完成的任务。

是否要允许内部用户访问互联网?

是否要允许互联网访问内部设备(例如邮件服务器或 Web 服务器)?

是否要将 TCP 流量重定向到其他 TCP 端口或地址?

您想在网络转换期间使用NAT(例如,您更改了服务器IP地址,并且在可以更新所有客户端之前,您希望未更新的客户端能够访问具有原始IP地址的服务器,并允许更新的客户端访问具有新地址的服务器)吗?

是否要允许重叠的网络通信?

配置 NAT 以完成您之前定义的任务。根据在第 2 步中的定义,您需要确定要使用以下哪些功能:

静态 NAT

动态 NAT

Overloading

这些功能的任意组合。

检验 NAT 的运行情况。

这些 NAT 示例将指导您完成上图中快速入门步骤的第 1 步到第 3 步。这些示例描述 Cisco 建议您部署 NAT 的一些常见情形。

定义 NAT 内部和外部接口部署 NAT 的第一步是定义 NAT 内部和外部接口。您会发现最简单的方法是将内部网络定义为内部,将外部网络定义为外部。不过,内部和外部这两个术语也是可以任意定义的。此图显示了一个示例。

NAT 拓扑

Examples1. 允许内部用户访问互联网是否允许内部用户访问Internet,但您没有足够的有效地址来容纳每个用户?如果与互联网中的设备的所有通信均来自内部设备,则需要独立的有效地址或使用有效地址池。

此图显示了一个简单的网络示意图,其中定义了内部和外部路由器接口。

可用的有效地址

在本例中,您希望NAT允许内部的特定设备(来自每个子网的前31个)发起与外部设备的通信,并将其无效地址转换为有效地址或地址池。该地址池已定义的地址范围是从 172.16.10.1 到 172.16.10.63。

现在即可配置 NAT。要完成上图中定义的任务,请使用动态 NAT。在采用动态 NAT 时,路由器中的转换表最初是空的,一旦需要地址转换的流量通过路由器,这个列表就会填充内容。这完全不同于静态 NAT。静态 NAT 会将静态配置的转换放置在转换表中,而无需任何流量。

在本示例中,您可以将 NAT 配置为将每个内部设备转换为唯一的有效地址,或将每个内部设备转换为相同的有效地址。第二种方法称为 overloading。此处提供了如何配置每种方法的示例。

配置 NAT 以允许内部用户访问互联网

NAT 路由器

interface ethernet 0

ip address 10.10.10.1 255.255.255.0

ip nat inside

!--- Defines Ethernet 0 with an IP address and as a NAT inside interface.

interface ethernet 1

ip address 10.10.20.1 255.255.255.0

ip nat inside

!--- Defines Ethernet 1 with an IP address and as a NAT inside interface.

interface serial 0

ip address 172.16.10.64 255.255.255.0

ip nat outside

!--- Defines serial 0 with an IP address and as a NAT outside interface.

ip nat pool no-overload 172.16.10.1 172.16.10.63 prefix 24

!--- Defines a NAT pool named no-overload with a range of addresses !--- 172.16.10.1 - 172.16.10.63.

ip nat inside source list 7 pool no-overload

!--- Indicates that any packets received on the inside interface that !--- are permitted by access-list 7 has !--- the source address translated to an address out of the !--- NAT pool "no-overload".

access-list 7 permit 10.10.10.0 0.0.0.31

access-list 7 permit 10.10.20.0 0.0.0.31

!--- Access-list 7 permits packets with source addresses ranging from !--- 10.10.10.0 through 10.10.10.31 and 10.10.20.0 through 10.10.20.31.

注意:Cisco强烈建议您不要使用permit any配置NAT命令引用的访问列表。如果在NAT中使用permit any,则会占用过多的路由器资源,从而可能导致网络问题。

请注意,在之前的配置中,access-list 7 仅允许来自子网 10.10.10.0 的前 32 个地址和来自子网 10.10.20.0 的前 32 个地址。 因此,只会转换这些源地址。内部网络上可能有其他设备具有别的地址,但这些地址没有转换。

配置 NAT 以允许内部用户过载访问互联网

NAT 路由器

interface ethernet 0

ip address 10.10.10.1 255.255.255.0

ip nat inside

!--- Defines Ethernet 0 with an IP address and as a NAT inside interface.

interface ethernet 1

ip address 10.10.20.1 255.255.255.0

ip nat inside

!--- Defines Ethernet 1 with an IP address and as a NAT inside interface.

interface serial 0

ip address 172.16.10.64 255.255.255.0

ip nat outside

!--- Defines serial 0 with an IP address and as a NAT outside interface.

ip nat pool ovrld 172.16.10.1 172.16.10.1 prefix 24

!--- Defines a NAT pool named ovrld with a range of a single IP !--- address, 172.16.10.1.

ip nat inside source list 7 pool ovrld overload

!--- Indicates that any packets received on the inside interface that !--- are permitted by access-list 7 has the source address !--- translated to an address out of the NAT pool named ovrld. !--- Translations are overloaded, which allows multiple inside !--- devices to be translated to the same valid IP address.

access-list 7 permit 10.10.10.0 0.0.0.31

access-list 7 permit 10.10.20.0 0.0.0.31

!--- Access-list 7 permits packets with source addresses ranging from !--- 10.10.10.0 through 10.10.10.31 and 10.10.20.0 through 10.10.20.31.

请注意,在之前的第二个配置中 ovrld,NAT地址池只有一个地址范围。ip nat inside source list 7 pool ovrld overload 这一行命令中的关键词“overload”允许 NAT 将多个内部设备转换到该池中的同一个地址中。

此命令的另一种变体是 ip nat inside source list 7 interface serial 0 overload,用于将 NAT 配置为在分配给 serial 0 接口的地址上过载。

配置overloading后,路由器会维护来自较高级别协议(例如,TCP或UDP端口号)的足够信息,以便将全局地址转换回正确的本地地址。有关全局和本地地址的定义,请参阅NAT:本地和全局定义。

2. 允许互联网访问内部设备有时您可能需要内部设备与互联网上的设备交换信息,从互联网设备发起通信,例如电子邮件。互联网上的设备通常会将邮件发送至位于内部网络上的邮件服务器。

发起通信

配置 NAT 以允许互联网访问内部设备在本示例中,首先定义 NAT 内部接口和外部接口,如上述网络示意图所示。

然后,定义内部用户能够发起与外部的通信。外部设备必须能够发起仅与内部邮件服务器的通信。

第三步是配置 NAT。要完成所定义的操作,可以同时配置静态和动态 NAT。有关如何配置此示例的详细信息,请参阅同时配置静态和动态NAT。

3. 将 TCP 流量重定向到其他 TCP 端口或地址互联网上的设备可能需要发起与内部设备的通信,这一点也可以通过内部网络上的 Web 服务器来说明。在某些情况下,可以将内部Web服务器配置为监听TCP端口(而不是端口80)上的Web流量。例如,可以将内部Web服务器配置为监听TCP端口8080。在这种情况下,您可以使用 NAT 来将目的地为 TCP 端口 80 的流量重定向到 TCP 端口 8080。

Web 流量 TCP 端口

在定义上述网络示意图所示的接口之后,您可以决定是否想要 NAT 将发往 172.16.10.8:80 的外部数据包重定向至 172.16.10.8:8080。为此,您可以使用 static nat 命令来转换 TCP 端口号。下面显示了配置示例。

配置 NAT 以将 TCP 流量重定向到其他 TCP 端口或地址

NAT 路由器

interface ethernet 0

ip address 172.16.10.1 255.255.255.0

ip nat inside

!--- Defines Ethernet 0 with an IP address and as a NAT inside interface.

interface serial 0

ip address 10.200.200.5 255.255.255.252

ip nat outside

!--- Defines serial 0 with an IP address and as a NAT outside interface.

ip nat inside source static tcp 172.16.10.8 8080 172.16.10.8 80

!--- Static NAT command that states any packet received in the inside !--- interface with a source IP address of 172.16.10.8:8080 is !--- translated to 172.16.10.8:80.

注意:静态NAT命令的配置说明表明,源地址为172.16.10.8:8080的内部接口中收到的任何数据包都转换为172.16.10.8:80。这也意味着目标地址为172.16.10.8:80的外部接口上收到的任何数据包都已将目标转换为172.16.10.8:8080。

show ip nat translations

Pro Inside global Inside local Outside local Outside global

tcp 172.16.10.8:80 172.16.10.8:8080 --- ---

4. 将 NAT 用于网络过渡当需要对网络上的设备重新寻址时,或进行设备替换时,NAT 可发挥重要作用。例如,如果网络中的所有设备均使用特定服务器,而需要将此服务器替换为具有新 IP 地址的新服务器,则重新配置所有网络设备使用新服务器地址会花费一些时间。同时,您可以使用 NAT 来配置具有旧地址的设备,通过转换其数据包来与新服务器通信。

NAT 网络过渡

按照上图所示定义 NAT 接口后,您可以决定是否想要 NAT 允许对外部发往旧服务器地址 (172.16.10.8) 的数据包进行转换并发送到新服务器地址。请注意,新服务器位于另一个LAN上,而且必须配置此LAN上的设备或通过此LAN可访问的任何设备(网络内部的设备),以便在可能的情况下使用新的服务器IP地址。

您可以使用静态 NAT 来实现您的目的。下面是一个配置示例。

配置 NAT 以便用于网络过渡

NAT 路由器

interface ethernet 0

ip address 172.16.10.1 255.255.255.0

ip nat outside

!--- Defines Ethernet 0 with an IP address and as a NAT outside interface.

interface ethernet 1

ip address 172.16.50.1 255.255.255.0

ip nat inside

!--- Defines Ethernet 1 with an IP address and as a NAT inside interface.

interface serial 0

ip address 10.200.200.5 255.255.255.252

!--- Defines serial 0 with an IP address. This interface is not !--- participating in NAT.

ip nat inside source static 172.16.50.8 172.16.10.8

!--- States that any packet received on the inside interface with a !--- source IP address of 172.16.50.8 is translated to 172.16.10.8.

注意:本示例中的inside source NAT命令还意味着在目的地址为172.16.10.8的外部接口上收到的数据包的目标地址已转换为172.16.50.8。

5. 将 NAT 用于重叠网络为内部设备分配 IP 地址时,如果这些 IP 地址已经被互联网中的其他设备使用,就会导致网络重叠。当两家公司(两者都在其网络中使用 RFC 1918 IP 地址)合并时,也会产生重叠网络。这样的两个网络需要通信,但最好不要对其所有设备重新寻址。

一对一映射和多对多映射之间的区别一个静态 NAT 配置创建一个一对一的映射,并将某个具体地址转换为另一个地址。只要此类配置存在且使内部和外部主机都能够建立连接,此类配置就可在 NAT 表中创建永久性条目。这对于提供应用服务(如邮件、Web、FTP 等)的主机通常很有用。例如:

Router(config)#ip nat inside source static 10.3.2.11 10.41.10.12

Router(config)#ip nat inside source static 10.3.2.12 10.41.10.13

当可用的地址数少于要转换的实际主机数时,动态 NAT 很有用。当主机建立连接并创建地址之间的一对一映射时,它会在 NAT 表中创建一个条目。但是,映射可能会有所不同,具体取决于通信时池中的可用注册地址。动态 NAT 仅允许从配置了动态 NAT 的内部或外部网络中启动会话。如果主机在可配置的特定时间内不通信,则会从转换表中删除动态 NAT 条目。然后会将地址返回到池,供另一台主机使用。

例如,请完成详细配置的以下步骤:

创建一个地址池.

Router(config)#ip nat pool MYPOOLEXAMPLE 10.41.10.1 10.41.10.41 netmask 255.255.255.0

创建必须映射的内部网络的访问列表.

Router(config)#access-list 100 permit ip 10.3.2.0 0.0.0.255 any

将 access-list 100(选择内部网络 10.3.2.0 0.0.0.255 进行 NAT 操作)关联到池 SYPOOLEXAMPLE,然后过载地址。

Router(config)#ip nat inside source list 100 pool MYPOOLEXAMPLE overload

验证 NAT 操作配置 NAT 后,请验证其是否按预期运行。您可以通过多种方式实现这个目的:使用网络分析器、show命令或debug命令。有关NAT验证的详细示例,请参阅验证NAT操作和基本NAT。

结论本文档中的示例演示了可帮助您配置和部署 NAT 的快速入门步骤。

这些快速入门步骤包括:

定义NAT内部和外部接口。

您要使用 NAT 完成什么任务。

配置 NAT 以完成您在第 2 步中定义的任务。

检验 NAT 的运行情况。

之前的各示例使用了各种不同形式的 ip nat inside 命令。您还可以使用 ip nat outside 命令来实现相同的目标,但请记住 NAT 的操作顺序。有关使用ip nat outside命令的配置示例,请参阅配置IP NAT外部源列表命令。

之前的示例还演示了以下操作:

命令

操作

ip nat inside source

转换从内部传输到外部的 IP 数据包的源。

转换从外部传输到内部的 IP 数据包的目标。

ip nat outside source

转换从外部传输到内部的 IP 数据包的源。

转换从内部传输到外部的 IP 数据包的目标。

相关信息

NAT:本地和全局定义中找到。

NAT 支持页面

IP 路由协议支持页

IP 路由支持页

IP 编址服务

NAT 运行顺序

有关Cisco IOS NAT的常见问题

技术支持和文档 - Cisco Systems