NAT地址转换

时间:2024-10-09 14:48:06

一、NAT网络地址转换
正常数据转发时,IP头部的源和目的地址以及端口号是不会被更改的,而使用了NAT 技术后,它将更改头部内容以达实现隐藏内外部主机真实地址、多台主机共享少量IP访问内外部网络、解决IP 地址空间重叠、服务器负载均衡等功能

二、PAT端口地址转换
又叫网络地址端口转换(NAPT)或NAT的端口复用(用 IP 地址+端口号来对应和区别各个数据流进行网络地址转换,以达到多内部主机通过一个或少量合法IP地址来访问外部网络
Inside local(IL):内部本地地址(内部主机的实际地址,一般为私有地址)
Inside global(IG):内部全局地址(内部主机经 NAT 转换后去往外部的地址,是ISP分配的合法IP地址)
Outside local(OL):外部本地地址(外部主机由 NAT 设备转换后的地址,一般为私 有地址,内部主机访问该外部主机时,认为它是一个内部的主机而非外部主机)
Outside global(OG):外部全局地址(外部主机的真实地址,互联网上的合法 IP 地址)

三、NAT超时:
没有使用PAT时则为 24 小时,
使用PAT,UDP超时值:5 分钟,DNS:1 分钟,TCP:24 小时

四、ip nat inside source和ip nat inside destination
ip nat inside source和ip nat inside destination都是内部地址转换
ip nat inside source是inside local->inside global (由内部发起的流量)
ip nat inside destination是inside global->inside local (由外部发起的流量)
撇开流量的发起方不说,达到的效果是一样的(都是IL与IG之间转换),即NAT Translation表的IL和IG项都一样。
但是对于ip nat inside destination需要注意:
只有TCP流量才会转换,ping流量是不会触发NAT 的 Destination转换的!
nat pool一定要设置type为 rotary!!

1、ip nat inside source 举例

NAT地址转换_NAT


假定 ISP 为网络 1 分配了 IG (inside global)地址段:100.0.0.0/28

GW1(config)#int s0

GW1(config-if)#ip nat outside  #定义外部接口

GW1(config-if)#int e0

GW1(config-if)#ip add 192.168.0.1 255.255.255.0

GW1(config-if)#ip nat inside  #定义内部接口

GW1(config-if)#exit

GW1(config)#access-list 1 permit 192.168.0.0 0.0.0.255  #用ACL捕捉IL地址

GW1(config)#ip nat pool POOL_NAME 100.0.0.1 100.0.0.14 prefix-length 28  #定义IG地址池

GW1(config)#ip nat inside source list 1 pool POOL_NAME

将access-list 1里指定的IG地址从名为POOL_NAME的地址池里动态顺序地取IG地址进行映射

2、ip nat inside source list n pool POOL_NAME
当list n为标准访问列表---access-list 1 permit a.b.c.d ,数据包的源地址满足list n(a.b.c.d),源地址转换为POOL_NAME地址
当list n为扩展访问列表--- access-list 100 permit tcp A B ,数据包的协议、源地址、目的地址、端口号等都要匹配list n , 源地址转换为POOL_NAME地址

3、ip nat inside destination 举例(服务器负载均衡)

当我们内部有几台提供相同服务的服务器时,我们可以用NAT来做到负载分担, 它的分担方式是基于每次访问的。

如下图,如果用 NAT 做了负载分担,我们把这三台服务器的 IL 映射为同一个 IG, 这时外部用户访问该 IG 地址时,NAT 会进行基于每次访问的负载分担。用户第一次访问时会定向到Server1,第二次则是Server2,第三次则是 Server3,轮循完后又回到 Server1,服务器依次轮流对外提供服务。

NAT地址转换_ide_02


配置:

GW1(config)#int s0

GW1(config-if)#ip nat outside  #定义外部接口

GW1(config-if)#int e0

GW1(config-if)#ip add 192.168.0.1 255.255.255.0

GW1(config-if)#ip nat inside  #定义内部接口

GW1(config)#access-list 1 permit host 100.0.0.1  #定义IG

GW1(config)#ip nat pool POOL1 192.168.0.1 192.168.0.3 prefix-length 24 type rotary

#建立一个 IL 地址池,范围是服务器所占用的地址范围,类型为 rotary 是指将在这段地址内轮循

GW1(config)#ip nat inside destination list 1 pool POOL1

对目的地址为列表内匹配的访问进行地址转换,把目的地址轮流转换成pool指定的地址,要注意的是如果服务器群里有一台或多台甚至是全部服务器不再工作了,路由器是无法辨别的,依旧会将流量进行轮循,不管服务器能否应答。

4、ip nat inside destination list n pool POOL_NAME
当list n为标准访问列表---access-list 1 permit a.b.c.d ,数据包的目的地址满list n (a.b.c.d), 目的地址转换为POOL_NAME地址
当list n为扩展访问列表--- access-list 100 permit tcp A B ,数据包的协议、源地址、目的地址、端口号等都要匹配list n , 目的地址转换为POOL_NAME地址

五、ip nat outside source
外部地址转换,即是OG->OL,由外部发起的流量,用法为隐藏外部主机真实地址。
ip nat ouside source static (OG) (OL)
ip route /ip route是为了产生一条去往OL的路由.(查看路由表,多了一条去往OL的路由)
注意:如果ip nat ouside source list (list number) pool (pool name) add-route
虽然能转换OG->OL,但是这样是产生不了一条去往(pool name)的路由,即使(pool name)只有一个地址。结局也是通信不成功的。 所以一般都是这样用ip nat ouside source static (OG) (OL) add-route,单个地址映射

1、ip nat outside source 举例(隐藏外部主机真实地址)

如果希望禁止内部主机访问外网的同时让内部主机能访问指定的外部主机,但又不希望让内部主机了解其实自己已经访问了外网时,那么可将需要被访问的 外部主机的OG地址转换成为一个内部或者一个虚假的空OL地址,外部主机只用访问这个虚假的OL地址就可以访问到真实的服务器了,达到隐藏真实IP的效果。

NAT地址转换_NAT_03


配置:

GW1(config)#int s0

GW1(config-if)#ip nat outside /定义外部接口

GW1(config-if)#int e0

GW1(config-if)#ip add 192.168.0.1 255.255.255.0

GW1(config-if)#ip nat inside /定义内部接口

GW1(config)#ip nat outside source static 200.0.0.1 192.168.1.1 /定义OG转换为OL

GW1(config)# ip route 192.168.1.0 255.255.255.0 200.0.0.1

加一个ip route 是为了产生一条去往 192.168.1.0 的静态路由,否则内部主机去往网关后,网关查表时没有相 关路由则丢弃报文。如果有默认路由或者本来就已经有路由了,则可省略该参数,也可以手工配置路由。

六、ip nat outside destination
注意:cisco2691,3640,7200 都无此条命令!!