NAT(Network Address Translation),网络地址转换。
其过程如下:通常在一个firewall或者Router上起NAT,firewall有两个NIC,一个接Internet,为合法的IP,一个接LAN,为保留IP。LAN的用户的default gateway指向NAT的内部(LAN)接口,所有从LAN通过NAT出去的包在NAT处会经行一个转换,通常会把这些包的源IP地址转换成NAT外部接口的合法IP地址,同时NAT在自己的连接表中添加一条记录,便于其应答包的目的回送。改了源IP地址的包送到Internet,其应答包回到NAT的外部接口,NAT接到应答包后,通过查看其连接表的记录,更改应答包的目标IP,然后送到发出请求的工作站。
NAT通常和一些firewall产品绑定在一起,比如cisco的PIX。
NAT处理内部网络数据包方式:
1.来自内部网络接口已符合转换条件的数据包到达NAT,在NAT表中查找匹配外部本地地址(相同目的IP数据包地址)转换项。
2.若无法找到匹配的外部地址项,数据包丢失;若发现匹配项,NAT用表中找到的外部全局地址替代数据包中的目的地址。
3.NAT继续在NAT表中查找,以确定是否有内部本地地址与该数据包中的源IP地址相匹配。
4.若无法找到匹配项,NAT会自行创建新的内部地址项,然后将此地址插入到数据包中;若发现匹配项,NAT用表中内部全局地址替代数据包中的源地址。
NAT处理外部网络数据包方式:
1.来自外部网络接口已符合转换条件的数据包到达NAT,在NAT表中查找匹配内部全局地址(相同目的IP数据包地址)转换项。
2.若无法找到匹配的内部地址项,数据包丢失;若发现匹配项,NAT用表中找到的内部本地地址替代数据包中的目的地址。
3.NAT继续在NAT表中查找,以确定是否有外部全局地址与该数据包中的源IP地址相匹配。
4.若无法找到匹配项,NAT会自行创建新的外部全局地址,然后将重复上述的操作。
5.每次NAT修改报头,路由器须从新计算IP和TCP的校验和的值,并用新的值代替原来的校验和。
NAT的几个相关概念
NAT可分为静态地址转换、动态地址转换、复用动态地址转换(端口地址转换port address translator,PAT)。
Inside Local IP Address,内部本地地址:指定于内部网络的主机地址,全局唯一,但为私有地址。
Inside Global IP Address,内部全局地址:代表一个或更多内部IP到外部网络可路由的合法IP(须注册)。
Outside Local IP Address,外部本地地址:为内部网络主机所知的一台外部网络中的主机IP地址(无须注册),主要用于静态转换。
Outside Glocal IP Address,外部全局地址:外部网络主机的合法注册IP,主要用于静态转换。
Simple Translation Entry:影射IP到另一个地址Entry。
Extended Translation Entry:影射IP地址和端口到另一对地址的Entry。
备注:内部端口应使用Ethernet端口,外部端口使用Serial端。
下面是CISCO官方ppt中的图片,借来帮助大家理解下NAT的工作过程:
网络地址转换:
端口地址转换:
交换内部源地址:
静态地址转换过程:
静态地址转换配置方法:
config)#ip nat inside source static 本地私有IP 公网全局IP
作用到接口下:
ethernet(以太口)下:config-if)#ip nat inside
serial(串行接口)下:config-if)#ip nat outside
动态地址转换过程:
动态地址转换配置方法:
①定义接口地址及其方向:
以太口:config)#interface ex/y
config-if)#ip addr A.B.C.D
config-if)#ip nat inside
串口:config)#interface sx/y
config-if)#ip addr A.B.C.D
config-if)#ip nat outside
②定义全局地址池:
config)#ip nat pool 地址池名 start-ip-address end-ip-address netmask network-mask
③ 定义标准访问控制列表:
config)#access-list <1-99> permit 内部IP网段 内部网段反掩码
④实现全局地址池和标准访问列表间的映射:
config)#ip nat inside source list <1-99> pool 地址池名
内部全局地址负载:
负载均衡配置方法:
config)#ip nat inside source list <1-99> interface sx/y overload
config)#access-list <1-99> permit 源网络IP 源网络IP反掩码
相关的命令:
清除NAT地址转换表: #clear ip nat translation/statistics
查看NAT地址转换表:#show ip nat translation
查看NAT地址状态:#show ip nat statistics [verbose]
调试命令:#debug ip nat
因为静态地址转换的配置方方法比较简单,这里就不再赘述了,下面为大家举一个动态地址转换的配置实例。
配置实例大致拓扑图如下:
基本的配置如上图所示,Router1充当的是外部Internet,只给它配置了IP地址。Router0的基本配置如下:
r1#sh run
Building configuration...
Current configuration : 633 bytes
!
version 12.2
no service password-encryption
!
hostname r1
!
ip ssh version 1
!
interface FastEthernet0/0
ip address 192.168.1.1 255.255.255.0
ip nat inside
duplex auto
speed auto
!
interface FastEthernet0/1
no ip address
duplex auto
speed auto
shutdown
!
interface Serial0/0
ip address 172.16.1.1 255.255.255.0
ip nat outside
clock rate 64000
!
interface Serial0/1
no ip address
shutdown
!
ip nat pool name1 172.16.1.1 172.16.1.1 netmask 255.255.255.0
ip nat inside source list 10 pool name1 overload
ip classless
!
access-list 10 permit 192.168.1.0 0.0.0.255
!
line con 0
line vty 0 4
login
!
end
配置完后,我们来测试下,三台内部PC均可与外网相互通讯,说明地址转换成功。
下面我们来看看 NAT状态和地址转换表,
到这里,实验成功完成。配置起来其实很简单,主要掌握原理和熟悉其命令。