简介
本文档介绍如何在思科路由器上配置网络地址转换 (NAT)。
先决条件
要求
本文档需要读者具备与 NAT 相关的基本术语知识。
使用的组件
本文档中的信息基于以下软件和硬件版本:
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
规则
有关文档规则的详细信息,请参阅 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 拓扑
Examples
1. 允许内部用户访问互联网
是否允许内部用户访问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 数据包的目标。
|
相关信息