Communication 版 (精华区)
发信人: freshwind (浮云流水|生命何物), 信区: Communication
标 题: NAT基本原理及运用
发信站: 哈工大紫丁香 (2001年06月24日21:42:52 星期天), 站内信件
前言
随着internet用户的急速膨胀发展,IP地址资源缺乏是公用网络所面临的一个
关键问题。
虽然已经提出了IPv6,但在目前还不能广泛使用。RFC 1631 NAT(网络地址转换)技
术的提
出很好的,解决解决这一问题,他提供了一种允许在多个内部子网中使用相同IP地
址范围
的解决方案,可以减少对合法注册IP地址的需求量。
一 基本原理
NAT功能可以让使用私有(保留)地址的网络与公用网络如internet进行连接
。使用私有地
址的“内部”网络通过NAT路由器发送数据包时,私有地址被转换成合法的IP地址
,因此这
些数据包可以被送到象internet这样的公用网络上。
使用NAT的优点是很明显的,典型的有以下几个方面:
● 允许企业内部网使用私有地址,并通过设置合法地址集使内部网可以与
Internet进
行通信,从而可以达到节省合法注册地址的目的;
● NAT也可以减少地址交叠情况的产生。如果地址方案最初是在一个私有网络
中建立
的,因为它不与外部网络通信,所以有可能使用了保留地址以外的地址,
而后来该
网络有想要连接道公网上。在这种情况下,如果不做地址转换,就会产生地址
冲突。
● NAT增强了内部网络与公用网络连接使得灵活性。它可以通过使用多地址集
、备份
地址集和负载分担/均衡地址集来确保可靠的公网连接。对于网络设计者来
说,内部
网络的设计也会变得比较容易,因为作抵制规划时可以有更多的灵活性。
● 将私有网络转化成公网一般需要对原网络重新设置地址,所需的工作量与
所需要设
置新地址的主机数有关。如果使用NAT技术就可以不对原私有网络内部的地
址进行改
动,同时还可以对外部网络支持新的公用网络地址方案。
但NAT也有明显得缺点:
● NAT会使时延增大。因为要转换每个数据包包头中的IP地址,自然就会增加
包转发时
延。又因为现在应用NAT技术时路由器只能用处理器交换方式进行包转发,
所以运行性
能也是要考虑的一个方面。CPU必须查看每一个数据包以决定它是否进行地
址转换,然
后改变IP包头、甚至TCP头,这一过程不太可能被轻易的高速缓存。
● 使用和实施NAT很不利的一点是无法实现对IP端到端的路径跟踪。在经过了
使用NAT地
址转换的多跳之后,对数据包的路径跟踪将变得十分困难。然而,这样却
可以提供更
安全的网络链路,因为黑客想要跟踪或获得数据包的初始来源或目的地址也将
变得非
常困难,甚至无法获得。
● NAT也可能会使某些要使用内嵌IP地址的应用不能正常工作,因为它隐藏了
端到端的IP
地址。某些直接使用IP地址而不通过合法域名进行寻址的应用可能也无法
与外部网络资
源通信,这个问题有时候可以通过实施静态NAT映射来避免。
术语
定义
内部局部IP地址
在内部网络中分配给主机的私用IP地址。该地址是从RFC1918所定义的私有地址空
间中分配的,
或者是被随机定义的。
内部全局IP地址
一个合法的IP地址。一般是由internet服务提供商(ISP)提供的。
外部全局IP地址
有其所有者给外部网络上的主机分配的IP地址。该地址是从全球统一可寻址的地
址空间中分配的。
外部局部IP地址
外部主机表现在内部网络的IP地址。这一地址是从内部可寻址的地址空间中分配
的,很可能是从
如RFC1918中定义的保留地址中分配的。
注:RFC 1918 中定义的保留IP地址:10.0.0.0 整个A类网络;172.16.0.0到
172.31.255.255共32
个B类网络;192.168.0.0到192.168.255.255共256个C类网络。
二 配置NAT
BDCOM3000系列路由器提供了端口地址转换PAT,静态NAT,动态NAT等NAT方式
。
配置主要分为两部分
1. 全局配置命令:设置NAT地址转换方式和路由,如果要使用动态分配内部全局
地址,还需配
置IP地址池;或者要使用访问列表控制内部局部地址的访问则需配置访问列
表。
2. 端口配置命令:使能NAT功能。
具体配置请参阅BDCOM路由器用户手册的说明。
三 NAT的应用
下面介绍NAT的应用,和使用BDCOM路由器配置NAT应注意的问题。在路由器中
使用NAT代理局域
网访问internet时,当访问某些ip时会形成数据振荡(参考表一)从表中可以看到
当局域网中
有不同于e0口网段的PC访问internet时,响应的数据在NAT路由器上将使用默认路
由有发送到
internet,而且要进行一次NAT转换,形成来回振荡,直到TTL耗尽。因此当使用
NAT访问internet
时,建议使用访问列表控制NAT源地址转换。
表一
nodename sy
ippool add aaa 202.107.64.D 2
e0
ip add 192.168.168.254 255.255.255.0
ip add 202.107.64.D 255.255.255.252
quit
s0
encapsulate ppp
ip add 202.107.64.X 255.255.255.252
nat enable
map add 202.107.64.Y
port sync
speed 64k
quit
route add default 202.107.64.Y 1
config#sh nat t a
………….
TCP OUT 202.107.64.X:20012 202.107.64.X:20014 202.96.40.1:8080 202.96.
40.1:80
80
TCP OUT 202.107.64.X:20011 202.107.64.X:20012 202.96.40.1:8080 202.96.
40.1:80
80
TCP OUT 202.107.64.X:2502 202.107.64.X:20011 202.96.40.1:8080 202.96.
40.1:808
0
TCP OUT 61.137.132.5:2502 202.107.64.X:2502 202.96.40.1:8080 202.96.
40.1:8080
1. PAT
PAT(port address translation)就是将多个内部局部地址映射为一个外部
全局地址
(一般设置在与公网连接的端口),但以不同协议端口与不同的内部地址相对应。
这种
方式一般用在拨号上网方式,这种情况广域网端口的外部全局地址是由ISP动态分
配的,
在博达路由器上设置的NAT转换方式为配置表一。其中nat转换表中的tcp 数据超时
计数
器默认为3600秒,如改为300秒将可以更有效的提高路由器的效率。
配置表一
access-list
table 0
permit add ip 10.1.1.0 255.255.255.0 0.0.0.0 0.0.0.0 //允许网段
为10.1.1.0上网
quit
quit
e0
ip add 10.1.1.254 255.0.0.0 // 内部局部地址网关
quit
s0
encapsulate ppp
line dial
def_phone 163 //拨号上网的ISP接入电话号码
nat enable //使能NAT
ppp pap user bdcom 1234 //设置拨号上网的帐号和密码
quit
route add default s0 1 //设置缺省路由
nat inside source list 0 interface s0 //设置地址翻译用s0口地址
nat timeout tcp 300 //设置NAT转换表项中tcp 数据的超时计数
器为300妙
2. 拥有多个内部全局IP地址的情况
当内部全局地址足够分配给内部网络的主机时就不用NAT了,当内部全局地址
不足以分配给
内部网络的主机时,即内部网路的主机数大于内部全局地址时,需要使用NAT。
这种方式一般用在专线接入internet,在这种方式下用户一般拥有一个外部全
局地址和多个
内部全局地址。博达路由器NAT转化方式的设置可以使用动态NAT,动态NAT可以将
多个内部局
部地址转换为多个内部全局地址,这需要设置一个地址池使所有的内部局部地址共
同使用这些
内部全局地址。
配置表二
access-list
table 0
permit add ip 10.1.1.0 255.255.255.0 0.0.0.0 0.0.0.0 //允许网段
为10.1.1.0上网
quit
quit
ippool add bdcom 202.96.23.27 4 //设置名为bdcom,内有4个ip地址的地
址池
e0
ip add 202.96.23.26 255.255.255.248 //配置e0口的ip地址
ip add 10.1.1.254 255.0.0.0 //e0口配置一个局域网地址,作
为网关
quit
s0
encapsulate hdlc
ip add 202.96.68.13 255.255.255.252 //外部全局IP地址
nat enable
map add 202.96.68.14
quit
route add default 202.96.68.14 1
nat inside source list 0 pool bdcom overload //设置地址翻译采用
ip地址bdcom
nat timeout tcp 300 //设置NAT转换表项中tcp 数据的超时计数
器为300妙
但在实际应用中这会出现另一种数据振荡问题,当公网有一个主动访问内部
全局地址的数据达
到NAT路由器时,由于这个数据没有经过路由器的NAT处理,路由器在NAT转换表中
不可能找到
此内部全局IP地址对应的内部局部IP地址转换项,这个数据包将被默认路由送到广
域网端口送
往internet,并生成一个NAT转换项,而且转换前和转换后的源地址均为内部全局
地址。但ISP
的路由器认为此目的地址的数据应送往NAT路由器。这将形成数据在NAT路由器和
ISP路由器间
来回振荡,而且每次从NAT路由器往外发送一次都要进行一次NAT转换,直到数据的
TLL项消减
为零。这将会耗费大量的路由器和带宽资源,使网络速度变慢,甚至路由器死机。
可是这种
情况的发生一般是内部网络访问internet上的某些热门网站时引起的,所以这种情
况发生的
几率还是较大的。解决的办法一是,在局域网端口设置一个内部全局IP地址,当外
部干扰数据
到达NAT路由器时,将被路由到内部网,由于内部网络中并无此IP地址的主机,
ARP请求失败数
据被丢弃。这种方式的缺点是要耗费一个内部全局地址。办法二是使用访问列表控
制,只允许
源地址为内部局部IP地址的数据进行NAT转换,这将减少NAT的转换量,减少路由器
资源的消耗,
但不能防止数据的振荡。
配置表三
ippool add bdcom 202.96.23.27 4
access-list
table 0
permit add ip 10.1.1.0 255.255.255.0 0.0.0.0 0.0.0.0 //允许网段
为10.1.1.0上网
quit
quit
e0
ip add 10.1.1.254 255.0.0.0
quit
s0
encapsulate hdlc
ip add 202.96.68.13 255.255.255.252 //设置端口的公网合法地址
nat enable
map add 202.96.68.14
quit
route add default s0 1 //设置缺省路由
nat inside source list 0 pool bdcom overload //设置地址翻译用地址池并
用访问列表0控制
nat timeout tcp 300 //设置NAT转换表项中tcp 数据的超时计数器
为300妙
另外,应注意的是,在这种情况下也是可以使用PAT的,但在使用的过程中也
要注意数据的振荡问题。
配置表四为在以太网口加内部全局地址,配置表五为使用访问列表。
配置表四
access-list
table 0
permit add ip 10.1.1.0 255.255.255.0 0.0.0.0 0.0.0.0 //允许网段
为10.1.1.0上网
quit
quit
e0
ip add 202.96.23.26 255.255.255.248 //配置e0口的内部全局地址
ip add 10.1.1.254 255.0.0.0 //e0口配置一个局域网地址,作
为网关
quit
s0
encapsulate hdlc
ip add 202.96.68.13 255.255.255.252 //外部全局IP地址
nat enable
map add 202.96.68.14
quit
route add default 202.96.68.14 1
nat inside source list 0 interface s0 //设置地址翻译采用串口0
nat timeout tcp 300 //设置NAT转换表项中tcp 数据的超时计数器为
300妙
配置表五
access-list
table 0
permit add ip 10.1.1.0 255.255.255.0 0.0.0.0 0.0.0.0 //允许网段
为10.1.1.0上网
quit
quit
e0
ip add 10.1.1.254 255.0.0.0 //e0口配置一个局域网地址,作
为网关
quit
s0
encapsulate hdlc
ip add 202.96.68.13 255.255.255.252 //外部全局IP地址
nat enable
map add 202.96.68.14
quit
route add default 202.96.68.14 1
nat inside source list 0 interface s0 //设置地址翻译采用串口0
nat timeout tcp 300 //设置NAT转换表项中tcp 数据的超时计数器为
300妙
3. WWW服务的问题
这部分将讨论内部网络含有WWW服务器的问题。这涉及三方面,一是外部网络
访问WWW服务器,
二是WWW服务器访问外部网络,三是内部网络访问WWW服务器。
如果内部网络中要提供WWW服务,可以使用静态NAT,内部网访问internet的方
式可参考前一
部分的讨论,如配置表六:内部网访问internet使用动态NAT。
配置表六
access-list
table 0
permit add ip 10.1.1.0 255.255.255.0 0.0.0.0 0.0.0.0 //允许网段
为10.1.1.0上网
quit
quit
ippool add bdcom 202.96.23.27 4 //设置名为bdcom,内有4个ip地址的地
址池
e0
ip add 202.96.23.26 255.255.255.248 //配置e0口的ip地址
ip add 10.1.1.254 255.0.0.0 //e0口配置一个局域网地址,作
为网关
quit
s0
encapsulate hdlc
ip add 202.96.68.13 255.255.255.252
nat enable
map add 202.96.68.14
quit
route add default 202.96.68.14 1
nat timeout tcp 300 //设置NAT转换表项中tcp 数据的超时计数器为
300妙
nat inside source list 0 pool bdcom overload //设置地址翻译
采用ip地址bdcom
nat inside source static add tcp 10.1.1.1 eq 80 202.96.23.25 eq 80 //设
置WWW服务的tcp静态表
当外部网络访问WWW服务器时,通过外部网络的DNS服务器得到WWW服务器的IP
地址202.96.23.25,
数据到达NAT路由器后将把202.96.23.25翻译为10.1.1.1,服务器响应的数据流经
过NAT路由器再
把10.1.1.1翻译为202.96.23.25送到internet完成一次通信。
内部网络访问WWW服务器有两种方式,一种是在浏览器中直接输入WWW服务器的
内部局部地址,
这样将通过内部网络浏览。一种是在浏览器中输入WWW服务器的域名,这样如果内
部网络中有
自己的DNS服务器也是在内部网中访问internet,如果内部网络中没有DNS服务器而
需要外部
网络的DNS的话,数据流将通过NAT路由器进行NAT源地址转换送往外部网络在从外
部网络送
回NAT路由器,进行一次静态NAT目的地址转换送往WWW服务器,WWW服务器的响应数
据流再进
过NAT路由器进行源地址转换送往外部网络,然后又从外部网络发到NAT路由器进行
一次NAT转
换转发到请求WWW服务的主机。由此可见这样不仅浪费宝贵的广域网带宽而且效率
极低。所以
如果内部网络没有NDS建议还是使用IP地址访问本地WWW服务器。
至于WWW服务器访问外部网络就像一台内部网络的主机访问外部网络差不多,
不同的只是使用
静态NAT转换表。
四 应用方案
本部分讨论几个比较灵活的应用方案
1. 在两条专线上使用NAT
典型的情况是在原有的线路上再申请一条专线上网,如配置表七
配置表七
access-list
table 0
permit add ip 10.1.1.0 255.255.255.128 0.0.0.0 0.0.0.0 //允许网
段为10.1.1.0上网
quit
quit
access-list
table 1
permit add ip 10.1.1.128 255.255.255.128 0.0.0.0 0.0.0.0 //允许
网段为10.1.1.128 上网
quit
quit
e0
ip add 10.1.1.254 255.0.0.0 //e0口配置一个局域网地址,作
为网关
quit
s0
encapsulate hdlc
ip add 202.96.68.13 255.255.255.252 //外部全局IP地址
nat enable
map add 202.96.68.14
quit
s1
encapsulate hdlc
ip add 202.96.68.17 255.255.255.252 //外部全局IP地址
nat enable
map add 202.96.68.18
quit
route add 128.0.0.0 192.0.0.0 202.96.68.18 3 //对IP包在两个串口上进
行流量分配
route add default 202.96.68.14 3
nat inside source list 0 interface auto //设置地址符合list0自
动采用串口翻译
nat inside source list 1 interface auto //设置地址符合list 1自动
采用串口翻译
nat timeout tcp 300 //设置NAT转换表项中tcp 数据的超时计数器为
300妙
在这里使用两条metric相等的默认路由使数据能从两个端口均衡出去。两个端
口的NAT转换
方式必须不一样。但效果是相当的。
2. 使用以太网地址NAT
这种情况是在一个内部网络中有两个局域网,只有一个可以访问外部网络,这
时需要借助有访问
权限的网络的一个IP地址,使无权限的网络也能访问外部网络。如配置表八
配置表八
access-list
table 0
permit add ip 10.1.2.0 255.255.255.0 0.0.0.0 0.0.0.0 //允许网段
为10.1.1.0上网
quit
quit
e0
ip add 10.1.1. 4 255.255.255.0 //可以访问外部网络的IP地址
ip add 10.1.2.254 255.255.255.0 //不可以访问外部网络的IP地址
nat ena
quit
nat inside source list 0 inter e0
route add default 10.1.1.254 1
这种情况还可以使用动态分配的方式,但是由于ip pool中的地址为浮动地址
,在网关路由器
10.1.1.254 为返回的数据做arp请求中将得不到响应。因此在网关路由器中加入路
由route
add 10.1.1.0 255.255.255.248 10.1.1.4 0
ippool add bdcom 10.1.1.5 4
e0
ip add 10.1.1.4 255.255.255.0 //可以访问外部网络的IP地址
ip add 10.1.2.254 255.255.255.0 //不可以访问外部网络的IP地址
nat ena
quit
nat inside source pool bdcom overload
route add default 10.1.1.254 1
3. 使用NAT解决bigp问题
由于BDCOM路由器的bigp动态路由只能转发以太网路由,因此当局域网再连接
有一个子网,
那这个子网将被bigp屏蔽,这个子网的主机将不能访问外部网络。使用NAT可以解
决这个
问题。在bigp路由器上使用NAT,这样从被屏蔽的子网10.1.2.0来的数据的源地址
将被转
换为s0口的IP地址,但是这样外部网络不能主动与10.1.2.0通信。
配置表九
bigp enable // 使能bigp动态路由
access-list
table 0
permit add ip 10.1.1.0 255.255.255.0 0.0.0.0 0.0.0.0 //允许网段
为10.1.1.0上网
quit
quit
e0
ip add 10.1.1.254 255.255.255.0
quit
s0
enc hdlc
ip add 202.96.23.13 255.255.255.252
map add 202.96.23.14 broadcast
nat enable
quit
bigp add 202.96.23.14 100
nat inside source list 0 interface s0 //被屏蔽的网络使用s0端口IP
地址作为自己源地址
route add 10.1.2.0 255.255.255.0 10.1.1.253 1
4. 在ISDN路由器上配置NAT
ISDN的配置和PSTN类似,但由于ISDN有两个通道,因此配置NAT时必须考虑如
何利用两个通道
同时连接公共网络。在这种情况下,只用当两个通道都拨通的时候才能正常访问公
共网络,
当只有一个通道拨通时,数据会丢失一半。可以通过show dial命令观察两个通道
的拨号情况。
但注意不能通过show b1 ,show b2来确定,因即使拨通了,这两个通道还是有一个
的协议是down的。
配置表十
access-lis
table 1
permit add ip 192.168.1.0 255.255.255.0 0.0.0.0 0.0.0.0 //配置
nat允许翻译的表项,
为局域网(路由器e0口)所在网段
quit
quit
e0
ip add 192.168.1.254 255.255.255.0 // 局域网地址,是局域网上机
器的网关
quit
bri0
encapsulate ppp
def_phone 163 // 拨号的号码,
pulse_time 1 // 拨号中的等待时间
enable_time 2
nat enable
ppp multilink on // 使用双链路
ppp authentication chap // 使用双链路是要配置对对方的
chap认证
ppp chap user qqqq // 这个用户名同拨号帐号中的相同
ppp pap user qqqq zzzz // qqqq为拨号帐号中的用户名,
zzzz为拨号帐号中的口令
quit
route add default b1 1 // 配置两条距离相同的默认路由,以
强制使用两条链路
route add default b2 1
user add dddd password zzzz /// zzzz为拨号帐号中的口令,dddd
是帐号
nat inside source list 1 interface auto // 配置网络地址翻译
nat timeout tcp 300 // 设置tcp 对应翻译表项的保持
时间
如果只使用一个通道注意要把b2 disable,以防止误拨。
配置表十一
access-lis
table 1
permit add ip 192.168.1.0 255.255.255.0 0.0.0.0 0.0.0.0 //配置
nat允许翻译的表项,
为局域网(路由器e0口)所在网段
quit
quit
e0
ip add 192.168.1.254 255.255.255.0 // 局域网地址,是局域网上机
器的网关
quit
bri0
encapsulate ppp
def_phone 163 // 拨号的号码,
pulse_time 1 // 拨号中的等待时间
enable_time 2
nat enable
ppp pap user qqqq zzzz // qqqq为拨号帐号中的用户名,
zzzz为拨号帐号中的口令
quit
disable b2
route add default b1 1 // 配置一条默认路由
nat inside source list 1 interface auto // 配置网络地址翻译
nat timeout tcp 300 // 设置tcp 对应翻译表项的保持
时间
由此可见,NAT实现代网络下的关键技术,每个网络工程师都应该熟练掌握这
项技术,这对于
我们在网络应用中提供了一种灵活的设计方法。
--
金风玉露一相逢
便胜却人间无数
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: ce.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:206.085毫秒