NAT释义
现在越来越多的地方用到网络地址转换(Network Address Translation,NAT)。网络中的IP包从源地址出发,到最终的目的地址,会经过很多不同的连接。这些连接(包括路由器、交换机、服务器等)不会修改IP包的内容,只是根据目的地址选择转发路径。NAT的作用就是修改IP包的源、目的地址或者源、目的端口(Port)。通常,NAT设备(服务器、防火墙或路由器)会记录它是如何转换的,当相应的IP包通过时,它会对相应的IP包做反向转换。简言之,就是通过地址转换访问不同网段的信息。本文将介绍在Windows 2000 Server、Linux和路由器中如何配置NAT。
NAT的应用环境
情况1:一个企业不想让外部网络用户知道自己的网络内部结构,可以通过NAT将内部网络与外部Internet 隔离开,则外部用户根本不知道通过NAT设置的内部IP地址。
情况2:一个企业申请的合法Internet IP地址很少,而内部网络用户很多。可以通过NAT功能实现多个用户同时公用一个合法IP与外部Internet 进行通信。
NAT的类型
静态地址转换:将内部本地地址与内部合法地址进行一对一的转换,或者说是将外网某个IP与内网中某个IP捆绑,延伸开去,可以把内网某个IP的某个端口(比如80)与外网的某个IP的某个端口(比如8080)捆绑。如果内部网络有E-mail服务器或FTP服务器等可以为外部用户提供的服务,那么这些服务器的IP地址必须采用静态地址转换,以便外部用户可以使用这些服务。这种NAT方式,也可称作PAT(Port Address Translation)。
动态网络地址转换:是将外网某个或者多个IP(称为地址池)与整个内网捆绑,相当于内网有了一个或多个外网地址。
NAT的实现
为了便于描述,我们下面做内网(192.168.2.0/24)与外网(211.84.20.0/28)之间动态NAT地址转换和静态地址转换。内网192.168.2.1提供WWW服务,并且侦听8080端口。当外部向地址211.84.20.1提交WWW的80端口请求时,系统NAT将目的地址转换为192.168.2.1,并将端口转换为8080。
一、在Windows 2000 Server系统环境下NAT的设置。
首先需要安装两块网卡,分别配置两个网段地址(内网网卡配192.168.2.2;外网网卡配211.84.20.1)。通过“控制面板”或者“管理工具”进入“路由和远程访问”。如果原先没有启用配置过路由(如果原先已经启用了静态路由等其他功能,建议先禁用,原因下面会讲到)访问,进入配置向导,按照向导,选择“Internat连接服务”→ “设置有网络地址转换(NAT)路由协议的路由器”→ “使用选择的Internat连接”,下面的列表框里显示了两个连接(见图1左窗口,本地连接和本地连接2),选择配置了外网IP的那个连接(比如配置了公网IP的连接),再点击下一步就完成了。打开本机树,您会看到四个子项(见图1):路由接口、IP路由选择、远程访问策略、远程访问记录。
图1
第一项显示本机路由接口,不需配置,第三四项提供远程访问服务(比如远程拨入),在这里不是本文中心,略过。展开第二项可看到常规、静态路由、IGMP、网络地址转换(NAT)四个小子项;可根据需求配置静态路由;如果不需要IGMP(组播)功能,建议删除。展开网络地址转换,可以看到两个连接,打开配置了外网地址的连接,如图2所示。
图2
常规中的选项不用改变,就用默认即可。地址池是您所拥有的外网地址,比如您有从211.84.20.1到211.84.20.7七个地址(这里是示例,实际情况可能并不合理,因为至少应该留一个做网关地址,以便到达其他网段),就可以写在这里。下面的保留公用地址,是为了一对一的静态地址转换用的。
特殊端口的配置实际上就是配置所谓的静态NAT+Port。上图显示内网地址为192.168.2.1提供WWW服务,并且侦听8080端口。当外部提交WWW请求(80端口)时,系统NAT将目的地址转换为192.168.2.1(见图3)。
图3#p#
二、在 Linux系统环境下NAT的设置。
NAT在以前的Linux版本中被称为端口转发。SNAT就是改变转发数据包的源地址,DNAT就是改变转发数据包的目的地址。
做NAT有三条规则:
POSTROUTING:定义进行目的NAT的规则;
POSTROUTING:定义进行源NAT的规则;
OUTPUT:定义对本地产生的数据包的目的NAT规则。
具体实现过程如下:
要使用NAT表时,必须首先载入相关模块:
modprobe ip_tables
modprobe ip_nat_ftp
iptable_nat 模块会在运行时自动载入。
我们还用上面的那个例子。
静态NAT(带端口转发):
iptables -t nat -A PREROUTING -d 211.84.20.1 -j DNAT -p tcp -m tcp --to-destination 192.168.2.1 --dport 80 REDIRECT --to-port 8080
iptables -t nat -A POSTROUTING -s 192.168.2.1 -j SNAT -p tcp -m tcp --to-source 211.84.20.1
动态NAT:
iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -j -d 211.84.20.1
动态NAT也可用伪装,这条规则一般是没有固定外部地址,常用于拨号访问Internet。
iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -j MASQUERADE
说明:使用iptables的NAT功能时,我们必须在每一条规则中使用“-t nat”显示指明使用NAT表。
-A加入(append) 一个新规则到一个链 (-A)的最后;
-I可以插入一条规则,插入位置序号写在POSTROUTING后;
-D在链内某个位置删除(delete) 一条规则;
-R在链内某个位置替换(replace) 一条规则;
--source或-src或-s来指定源地址;
--destination或-dst或-s来指定目的地址;
--in-interface或-I指定网络入口;
--out-interface或-o指定网络出口(从NAT的原理可以看出,对于PREROUTING链,我们只能用-i指定进来的网络接口;而对于POSTROUTING和OUTPUT我们只能用-o指定出去的网络接口。);
--protocol或-p选项来指定协议;
--source-port或-sport
--destination-port或--dport来指明端口;
MASQUERADE 做NAT欺骗;
Redirection重定向。#p#
三、设置NAT所需路由器的硬件配置和软件配置。
很多路由器都提供NAT功能,这里选择比较常用的Cisco路由器。首先设置NAT功能的路由器的IOS应支持NAT功能。至少要有一个内部(Inside)接口,配置内网地址(192.168.2.2),一个外部(Outside)接口,配置外网地址(211.84.20.1)。
NAT的设置方法:
1.静态地址转换基本配置步骤。
(1)在内部本地地址与外部合法地址之间建立静态地址转换。在全局设置状态下输入:
ip nat inside source static 192.168.2.2 211.84.20.1
如果加上端口转发则为:
ip nat inside source static tcp 192.168.2.1 8080 211.84.20.1 80 extendable
(2)指定连接网络的内部接口上配置:
ip nat inside
(3)指定连接外部网络的外部接口上配置:
ip nat outside
注:可以根据实际需要定义多个内部接口及多个外部接口。
2.动态地址转换基本配置步骤。
(1)如果有多个IP地址,可以在全局设置模式下,定义内部合法地址池,如果只有一个,就不用定义了(建议不要定义地址池,这不会带来什么好处)。
其格式为:ip nat pool 地址池名称 起始IP地址 终止IP地址 子网掩码。例如:
ip nat pool outnet 211.84.20.1 211.84.20.7 netmask 255.255.255.248
其中地址池名称可以任意设定。
(2)在全局设置模式下,定义access-list(通常是标准的,也可以是扩展的或是命名的)规则以判断哪些地址需要进行动态地址转换。
其格式为:Access-list 标号 permit 源地址 通配符
例如:
access-list 1 permit 192.168.2.0 0.0.0.255
其中标号为1-99之间的整数。
(3)在全局设置模式下,将由access-list指定的内部本地地址与指定的合法地址池进行地址转换。
其格式为:ip nat inside source list 访问列表标号 pool内部合法地址池名字。
例如:
ip nat inside source list 1 pool outnet overload
其中overload是指一对多做地址转换,建议加上。
(4)指定与内部网络相连的内部接口上配置。
其格式为:ip nat inside
(5)指定与外部网络相连的外部接口上配置。
其格式为:ip nat outside
NAT规则的查看:
show ip nat statistcs
show ip nat translations
【编辑推荐】