全部博文(212)
分类: 系统运维
2006-05-17 09:11:54
本文说明了在常见的网络使用情况下,如何在一台Cisco路由器上配置网络地址转换(NAT)。本文的受众目标是第一次使用NAT的用户。
注意:本文中所提到的互联网或者互联网设备,都代表外部网络中的任意一种设备。
前提条件
本文需要读者具备NAT相关的一些术语基本知识。一些相关定义可以在“NAT:本地和全球定义”中找到。
本文中所列信息基于下述版本的软件和硬件。
本文所包含的信息基于特定实验室环境中的设备。本文所用设备采用清除(缺省)配置。如果您在正在运行的网络中进行操作,使用前必须确保您了解所有命令的潜在影响。
在配置NAT的时候,往往不易知道从哪儿着手,尤其是在您还不熟悉NAT的时候。下面的步骤将指导您定义自己希望NAT实现的目标,并指导您如何配置NAT。
下述每一个NAT范例都将指导您完成上面快速入门步骤中所列举的步骤1至步骤3。这些例子描述了一些常见环节,我们推荐您在这些情况下使用NAT。
部署NAT的第一步是定义NAT的内部和外部接口。您会发现,最容易的方式是将您的内部网络定义为内部接口,将外部网络定义为外部接口。不过,内部和外部这两个术语也是可以任意定义的。下图是一个这样的例子。
您可能希望内部用户访问互联网,但是您没有足够的有效地址来分配给每个用户。如果互联网中所有同设备的通信都起源于内部设备,则您只需要单一的有效地址或者一个有效地址池。
在这个例子中,我们希望NAT能够允许内部网中某些设备(每个子网中的前31个地址)可以发起同外部设备的通信,方法是将外部设备的合法地址转换为一个有效地址或者地址池。该地址池已定义的地址范围是从172.16.10.1到172.16.10.63。
现在,我们就已经准备好配置NAT。为了实现上面所定义的目标,我们需要使用动态NAT。在采用动态NAT时,路由器中的转换列表最初是空的,一旦需要地址转换的流量通过路由器,这个列表就会填充内容(同静态NAT相反,转换是静态配置的,放置在转换表中,不需要有任何流量)。
在这个例子中,我们可以配置NAT来将每个内部设备转换到一个独一无二的有效地址上,也可以将每个内部设备转换到相同的有效地址上。第二种方法就叫做超载。下面将给出每一种配置方法的范例。
NAT路由器 |
---|
interface ethernet 0 ip address 10.10.10.1 255.255.255.0 ip nat inside !-- 定义Ethernet 0的IP地址,并将其定义为NAT的内部接口 interface ethernet 1 ip address 10.10.20.1 255.255.255.0 ip nat inside !-- 定义Ethernet 1的IP地址,并将其定义为NAT的内部接口 interface serial 0 ip address 172.16.10.64 255.255.255.0 ip nat outside !-- 定义serial 0的IP地址,并将其定义为NAT的外部接口 ip nat pool no-overload 172.16.10.1 172.16.10.63 prefix 24 ! !-- 定义名叫no-overload的NAT池的地址范围 !-- 从172.16.10.1 到172.16.10.63 ip nat inside source list 7 pool no-overload ! ! !-- 表明在内部接口上接收到的并被 !-- 访问列表7许可的任何包 !-- 都将有源地址,该地址是从 !-- 名叫“no-overload”的NAT池中转换而来 access-list 7 permit 10.10.10.0 0.0.0.31 access-list 7 permit 10.10.20.0 0.0.0.31 !-- 访问列表7许可包的源地址范围是 !-- 从10.10.10.0 一直到10.10.10.31以及从10.10.20.0 一直到10.10.20.31。 |
注:我们强烈建议您不要将NAT命令参考访问列表配置为“permit any”。采用“permit any”将可能导致NAT消耗太多路由器资源,这可能会引发网络故障。
注意,在上述配置中,“access-list 7”只允许来自子网10.10.10.0中的前32个地址以及来自子网10.10.20.0中的前32个地址。这样,只有这些源地址可以转换。内部网络中可能还有其它设备配置有其它地址,但这些地址将不会转换。
NAT路由器 |
---|
interface ethernet 0 ip address 10.10.10.1 255.255.255.0 ip nat inside !-- 定义Ethernet 0的IP地址,并将其定义为NAT的内部接口 interface ethernet 1 ip address 10.10.20.1 255.255.255.0 ip nat inside !-- 定义Ethernet 1的IP地址,并将其定义为NAT的内部接口 interface serial 0 ip address 172.16.10.64 255.255.255.0 ip nat outside !-- 定义serial 0的IP地址,并将其定义为NAT的外部接口 ip nat pool ovrld 172.16.10.1 172.16.10.1 prefix 24 ! !-- 定义名叫ovrld 的NAT池的单个IP !-- 地址为172.16.10.1 ip nat inside source list 7 pool ovrld overload ! ! ! ! !-- 表明在内部接口上接收到的并被 !-- 访问列表7许可的任何包都将有源地址, !-- 该地址是从名叫 ovrld的NAT池中转换而来 。 !-- 转换将被过载,这将使若干台内部设备 !-- 转换成同一个有效的IP地址。 access-list 7 permit 10.10.10.0 0.0.0.31 access-list 7 permit 10.10.20.0 0.0.0.31 !-- 访问列表7许可包的源地址范围是 !-- 从10.10.10.0 一直到10.10.10.31以及从10.10.20.0 一直到10.10.20.31。 |
注意:在上面的第二种配置中,NAT池“ovrld”的范围仅包含一个地址。Ip nat inside source list 7 pool ovlrd overload这一行命令中的关键词“overload”允许NAT将多个内部设备地址转换到该池中的同一个地址中。
这条命令中的另外一个版本是ip nat inside source list 7 interface serial 0 overload,该命令可以配置NAT,将NAT地址都超载到分配给串口0的地址上。在进行这种类型的超载配置时,路由器会保存来自更高层协议的足够信息(例如,TCP或UDP端口数),从而将全球地址转换回正确的本地地址。当多个本地地址映射到单个全局地址时,每个内部主机中的TCP或UDP端口号码就可以同局部地址区分开来。要了解有关全局和本地地址的定义,请参考“NAT:全球和本地定义”。
最后一个步骤是检验NAT是否已经按照设置正常运行。
您可能需要有内部设备来同互联网上的设备交换信息,因为通信来源于互联网设备,如电子邮件。最典型的一种情况是,互联网上的设备发送电子邮件到驻存在内部网络的一个邮件服务器上。
在这个例子中,我们首先定义内部和外部接口的NAT,如上面的网络图所示。
其次,我们还要定义,我们希望内部的用户能够建立同外面设备的通信。而外面设备将只能够同内部的邮件服务器建立通信。
第三步是配置NAT。要实现我们上面所确定的目标,我们可以同时配置静态和动态NAT。要获取更多信息,了解在这个例子中的具体配置,参阅“同时配置静态和动态NAT”。
最后一步是确认NAT按照设置正常运行。
互联网中的设备需要同内部设备建立通信连接的另外一个例子是,内部网中存在Web服务器。在一些情况下,可以配置一个内部web服务器,使其在一个TCP端口而非端口80上侦听web流量。例如,可以配置内部Web服务器来侦听TCP端口8080。在这种情况下,您可以使用NAT来将目的地为TCP端口80的流量重新指向TCP端口8080。
在按照上述网络图定义了接口之后,我们可以确定,我们希望NAT将来自外部、目的地址为172.16.10.8:80的数据包重新定向到172.16.10.8:8080。我们可以采用一个“static nat”命令来转换TCP端口号码,从而实现上述目标。下面是一个配置范例。
NAT 路由器 |
---|
interface ethernet 0 ip address 172.16.10.1 255.255.255.0 ip nat inside !-- 定义Ethernet 0的IP地址,并将其定义为NAT的内部接口。 interface serial 0 ip address 200.200.200.5 255.255.255.252 ip nat outside !--定义serial 0的IP地址,并将其定义为NAT的外部接口。 ip nat inside source static tcp 172.16.10.8 8080 172.16.10.8 80 !-- 静态 NAT命令说明在内部接口上接收到的任何包, !-- 其源地址172.16.10.8:8080将被 !-- 转换成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。
最后一个步骤是检验NAT是否按照设置正常运行。
在您需要重新分配网络设备地址,或者您正在用一种设备替换另一种设备的时候,NAT非常有用。例如,如果网络中所有设备都使用某一特定服务器,而且需要用一个有新IP地址的新服务器来更换这个服务器的时候,重新配置所有的网络设备来使用新服务器地址将花费很多时间。在这网络升级期间,您可以让网络中这些设备仍然用旧地址,而用NAT转换这些设备数据包的地址,使其能够同新的服务器通信。
一旦我们按照上图定义了NAT接口,我们就可以确定我们希望NAT对来自外部、目的地址为旧服务器地址(172.16.10.8)的数据包进行地址转换,并将其发送到新的服务器地址。注意,新服务器在另外一个LAN上,对于这个LAN上或者能够通过这个LAN(在网络内部部分的设备)连接上的任何设备,在可能的情况下其配置都应该尽可能使用新的服务器地址。
我们可以使用静态NAT来实现我们的目的。下面是一个范例配置。
NAT 路由器 |
---|
interface ethernet 0 ip address 172.16.10.1 255.255.255.0 ip nat outside !-- 定义Ethernet 0的IP地址,并将其定义为NAT的外部接口。 interface ethernet 1 ip address 172.16.50.1 255.255.255.0 ip nat inside !-- 定义Ethernet 1的IP地址,并将其定义为NAT的内部接口。 interface serial 0 ip address 200.200.200.5 255.255.255.252 !-- 定义serial 0的IP地址, !-- 本接口不参与NAT。 ip nat inside source static 172.16.50.8 172.16.10.8 !-- 说明在内部接口上接收到的任何包, !-- 其源地址172.16.50.8将被转换成172.16.10.8。 |
注意,这个例子中内部的源NAT命令也意味着,外部接口中目的地址为172.16.10.8的数据包,其目的地址将被转换为172.16.50.8。
最后一步是:验证NAT是否在所要求的条件下运行。
当您把IP地址分配给已经被互联网中其它设备所使用的那些内部设备的时候,就生成了重叠网络。在各自网络中都使用RFC 1918 IP地址的两个公司合并的时候,也会产生重叠网络。这两个网络需要进行通信,但最好不要重新为所有设备分配地址。参考“在重叠网络中使用NAT”来了解为实现这一目的而配置NAT的详细信息。
一旦您已经完成NAT配置,就需要确认它是否按预期运行。您可以通过多种方式实现这个目的:使用网络分析器、“show”命令或者“debug”命令等。要了解有关NAT检验的详细范例,请参阅“检验NAT运行和基本的NAT故障检测及排除”。
本文中的范例说明了这些快速开始步骤,可以帮助您配置和部署NAT。这些快速开始步骤包括:
在上面的每一个例子中,我们都使用了不同形式的ip nat inside命令。您还可以使用ip nat outside命令来实现同样的目的,牢记NAT的运行顺序。要了解ip nat outside命令中的配置范例,请参阅“采用ip nat outside source list命令进行配置的范例”以及“使用ip nat outside source static命令进行配置的范例”。
上面的例子还可以用下述方式表达:
命令 | 操作 |
---|---|
ip nat inside source |
|
ip nat outside source |
|
转自:
本文说明了在常见的网络使用情况下,如何在一台Cisco路由器上配置网络地址转换(NAT)。本文的受众目标是第一次使用NAT的用户。
注意:本文中所提到的互联网或者互联网设备,都代表外部网络中的任意一种设备。
前提条件
本文需要读者具备NAT相关的一些术语基本知识。一些相关定义可以在“NAT:本地和全球定义”中找到。
本文中所列信息基于下述版本的软件和硬件。
本文所包含的信息基于特定实验室环境中的设备。本文所用设备采用清除(缺省)配置。如果您在正在运行的网络中进行操作,使用前必须确保您了解所有命令的潜在影响。
在配置NAT的时候,往往不易知道从哪儿着手,尤其是在您还不熟悉NAT的时候。下面的步骤将指导您定义自己希望NAT实现的目标,并指导您如何配置NAT。
下述每一个NAT范例都将指导您完成上面快速入门步骤中所列举的步骤1至步骤3。这些例子描述了一些常见环节,我们推荐您在这些情况下使用NAT。
部署NAT的第一步是定义NAT的内部和外部接口。您会发现,最容易的方式是将您的内部网络定义为内部接口,将外部网络定义为外部接口。不过,内部和外部这两个术语也是可以任意定义的。下图是一个这样的例子。
您可能希望内部用户访问互联网,但是您没有足够的有效地址来分配给每个用户。如果互联网中所有同设备的通信都起源于内部设备,则您只需要单一的有效地址或者一个有效地址池。
在这个例子中,我们希望NAT能够允许内部网中某些设备(每个子网中的前31个地址)可以发起同外部设备的通信,方法是将外部设备的合法地址转换为一个有效地址或者地址池。该地址池已定义的地址范围是从172.16.10.1到172.16.10.63。
现在,我们就已经准备好配置NAT。为了实现上面所定义的目标,我们需要使用动态NAT。在采用动态NAT时,路由器中的转换列表最初是空的,一旦需要地址转换的流量通过路由器,这个列表就会填充内容(同静态NAT相反,转换是静态配置的,放置在转换表中,不需要有任何流量)。
在这个例子中,我们可以配置NAT来将每个内部设备转换到一个独一无二的有效地址上,也可以将每个内部设备转换到相同的有效地址上。第二种方法就叫做超载。下面将给出每一种配置方法的范例。
NAT路由器 |
---|
interface ethernet 0 ip address 10.10.10.1 255.255.255.0 ip nat inside !-- 定义Ethernet 0的IP地址,并将其定义为NAT的内部接口 interface ethernet 1 ip address 10.10.20.1 255.255.255.0 ip nat inside !-- 定义Ethernet 1的IP地址,并将其定义为NAT的内部接口 interface serial 0 ip address 172.16.10.64 255.255.255.0 ip nat outside !-- 定义serial 0的IP地址,并将其定义为NAT的外部接口 ip nat pool no-overload 172.16.10.1 172.16.10.63 prefix 24 ! !-- 定义名叫no-overload的NAT池的地址范围 !-- 从172.16.10.1 到172.16.10.63 ip nat inside source list 7 pool no-overload ! ! !-- 表明在内部接口上接收到的并被 !-- 访问列表7许可的任何包 !-- 都将有源地址,该地址是从 !-- 名叫“no-overload”的NAT池中转换而来 access-list 7 permit 10.10.10.0 0.0.0.31 access-list 7 permit 10.10.20.0 0.0.0.31 !-- 访问列表7许可包的源地址范围是 !-- 从10.10.10.0 一直到10.10.10.31以及从10.10.20.0 一直到10.10.20.31。 |
注:我们强烈建议您不要将NAT命令参考访问列表配置为“permit any”。采用“permit any”将可能导致NAT消耗太多路由器资源,这可能会引发网络故障。
注意,在上述配置中,“access-list 7”只允许来自子网10.10.10.0中的前32个地址以及来自子网10.10.20.0中的前32个地址。这样,只有这些源地址可以转换。内部网络中可能还有其它设备配置有其它地址,但这些地址将不会转换。
NAT路由器 |
---|
interface ethernet 0 ip address 10.10.10.1 255.255.255.0 ip nat inside !-- 定义Ethernet 0的IP地址,并将其定义为NAT的内部接口 interface ethernet 1 ip address 10.10.20.1 255.255.255.0 ip nat inside !-- 定义Ethernet 1的IP地址,并将其定义为NAT的内部接口 interface serial 0 ip address 172.16.10.64 255.255.255.0 ip nat outside !-- 定义serial 0的IP地址,并将其定义为NAT的外部接口 ip nat pool ovrld 172.16.10.1 172.16.10.1 prefix 24 ! !-- 定义名叫ovrld 的NAT池的单个IP !-- 地址为172.16.10.1 ip nat inside source list 7 pool ovrld overload ! ! ! ! !-- 表明在内部接口上接收到的并被 !-- 访问列表7许可的任何包都将有源地址, !-- 该地址是从名叫 ovrld的NAT池中转换而来 。 !-- 转换将被过载,这将使若干台内部设备 !-- 转换成同一个有效的IP地址。 access-list 7 permit 10.10.10.0 0.0.0.31 access-list 7 permit 10.10.20.0 0.0.0.31 !-- 访问列表7许可包的源地址范围是 !-- 从10.10.10.0 一直到10.10.10.31以及从10.10.20.0 一直到10.10.20.31。 |
注意:在上面的第二种配置中,NAT池“ovrld”的范围仅包含一个地址。Ip nat inside source list 7 pool ovlrd overload这一行命令中的关键词“overload”允许NAT将多个内部设备地址转换到该池中的同一个地址中。
这条命令中的另外一个版本是ip nat inside source list 7 interface serial 0 overload,该命令可以配置NAT,将NAT地址都超载到分配给串口0的地址上。在进行这种类型的超载配置时,路由器会保存来自更高层协议的足够信息(例如,TCP或UDP端口数),从而将全球地址转换回正确的本地地址。当多个本地地址映射到单个全局地址时,每个内部主机中的TCP或UDP端口号码就可以同局部地址区分开来。要了解有关全局和本地地址的定义,请参考“NAT:全球和本地定义”。
最后一个步骤是检验NAT是否已经按照设置正常运行。
您可能需要有内部设备来同互联网上的设备交换信息,因为通信来源于互联网设备,如电子邮件。最典型的一种情况是,互联网上的设备发送电子邮件到驻存在内部网络的一个邮件服务器上。
在这个例子中,我们首先定义内部和外部接口的NAT,如上面的网络图所示。
其次,我们还要定义,我们希望内部的用户能够建立同外面设备的通信。而外面设备将只能够同内部的邮件服务器建立通信。
第三步是配置NAT。要实现我们上面所确定的目标,我们可以同时配置静态和动态NAT。要获取更多信息,了解在这个例子中的具体配置,参阅“同时配置静态和动态NAT”。
最后一步是确认NAT按照设置正常运行。
互联网中的设备需要同内部设备建立通信连接的另外一个例子是,内部网中存在Web服务器。在一些情况下,可以配置一个内部web服务器,使其在一个TCP端口而非端口80上侦听web流量。例如,可以配置内部Web服务器来侦听TCP端口8080。在这种情况下,您可以使用NAT来将目的地为TCP端口80的流量重新指向TCP端口8080。
在按照上述网络图定义了接口之后,我们可以确定,我们希望NAT将来自外部、目的地址为172.16.10.8:80的数据包重新定向到172.16.10.8:8080。我们可以采用一个“static nat”命令来转换TCP端口号码,从而实现上述目标。下面是一个配置范例。
NAT 路由器 |
---|
interface ethernet 0 ip address 172.16.10.1 255.255.255.0 ip nat inside !-- 定义Ethernet 0的IP地址,并将其定义为NAT的内部接口。 interface serial 0 ip address 200.200.200.5 255.255.255.252 ip nat outside !--定义serial 0的IP地址,并将其定义为NAT的外部接口。 ip nat inside source static tcp 172.16.10.8 8080 172.16.10.8 80 !-- 静态 NAT命令说明在内部接口上接收到的任何包, !-- 其源地址172.16.10.8:8080将被 !-- 转换成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。
最后一个步骤是检验NAT是否按照设置正常运行。
在您需要重新分配网络设备地址,或者您正在用一种设备替换另一种设备的时候,NAT非常有用。例如,如果网络中所有设备都使用某一特定服务器,而且需要用一个有新IP地址的新服务器来更换这个服务器的时候,重新配置所有的网络设备来使用新服务器地址将花费很多时间。在这网络升级期间,您可以让网络中这些设备仍然用旧地址,而用NAT转换这些设备数据包的地址,使其能够同新的服务器通信。
一旦我们按照上图定义了NAT接口,我们就可以确定我们希望NAT对来自外部、目的地址为旧服务器地址(172.16.10.8)的数据包进行地址转换,并将其发送到新的服务器地址。注意,新服务器在另外一个LAN上,对于这个LAN上或者能够通过这个LAN(在网络内部部分的设备)连接上的任何设备,在可能的情况下其配置都应该尽可能使用新的服务器地址。
我们可以使用静态NAT来实现我们的目的。下面是一个范例配置。
NAT 路由器 |
---|
interface ethernet 0 ip address 172.16.10.1 255.255.255.0 ip nat outside !-- 定义Ethernet 0的IP地址,并将其定义为NAT的外部接口。 interface ethernet 1 ip address 172.16.50.1 255.255.255.0 ip nat inside !-- 定义Ethernet 1的IP地址,并将其定义为NAT的内部接口。 interface serial 0 ip address 200.200.200.5 255.255.255.252 !-- 定义serial 0的IP地址, !-- 本接口不参与NAT。 ip nat inside source static 172.16.50.8 172.16.10.8 !-- 说明在内部接口上接收到的任何包, !-- 其源地址172.16.50.8将被转换成172.16.10.8。 |
注意,这个例子中内部的源NAT命令也意味着,外部接口中目的地址为172.16.10.8的数据包,其目的地址将被转换为172.16.50.8。
最后一步是:验证NAT是否在所要求的条件下运行。
当您把IP地址分配给已经被互联网中其它设备所使用的那些内部设备的时候,就生成了重叠网络。在各自网络中都使用RFC 1918 IP地址的两个公司合并的时候,也会产生重叠网络。这两个网络需要进行通信,但最好不要重新为所有设备分配地址。参考“在重叠网络中使用NAT”来了解为实现这一目的而配置NAT的详细信息。
一旦您已经完成NAT配置,就需要确认它是否按预期运行。您可以通过多种方式实现这个目的:使用网络分析器、“show”命令或者“debug”命令等。要了解有关NAT检验的详细范例,请参阅“检验NAT运行和基本的NAT故障检测及排除”。
本文中的范例说明了这些快速开始步骤,可以帮助您配置和部署NAT。这些快速开始步骤包括:
在上面的每一个例子中,我们都使用了不同形式的ip nat inside命令。您还可以使用ip nat outside命令来实现同样的目的,牢记NAT的运行顺序。要了解ip nat outside命令中的配置范例,请参阅“采用ip nat outside source list命令进行配置的范例”以及“使用ip nat outside source static命令进行配置的范例”。
上面的例子还可以用下述方式表达:
命令 | 操作 |
---|---|
ip nat inside source |
|
ip nat outside source |
|
转自: