首页 > 编程笔记 > 通用技能 阅读:75

NAT网络地址转换技术详解(非常全面)

随着网络技术的发展、接入 Internet 的计算机数量不断增加,Internet 中空闲的 IP 地址越来越少,IP 地址资源越来越紧张。

事实上,除中国教育和科研计算机网外,一般用户几乎申请不到整段的 C 类 IP 地址。在其他 ISP 那里,即使是拥有几百台计算机的大型局域网用户,当其申请 IP 地址时,所分配到的 IP 地址也不过只有几个或十几个。显然,这么少的 IP 地址根本无法满足网络用户的需求,于是网络地址转换(NAT)技术应运而生。

目前,NAT 技术有限地解决了此问题,使得私有网络可以访问外网。虽然 NAT 技术可以借助某些代理服务器来实现,但考虑到运算成本和网络性能,很多时候是在路由器上实现的。

什么是NAT

NAT 技术是 1994 年被提出来的。简单来说,它是把内部私有 IP 地址翻译成合法有效的网络公有 IP 地址的技术。

通过 NAT 技术接入外网如下图所示:


图 1 通过 NAT 技术接入外网

若专用网内部的一些主机本来已经分配到了本地 IP 地址(仅在本专用网内使用的专用地址),但现在又想和 Internet 中的主机通信(并不需要加密),可使用 NAT 技术,这种技术需要在专用网连接到 Internet 的路由器上安装 NAT 软件。

装有 NAT 软件的路由器叫作 NAT 路由器,它至少有一个有效的外部全球 IP 地址。所有使用本地 IP 地址的主机在和外界通信时,都要在 NAT 路由器上将其本地 IP 地址转换成全球 IP 地址,才能和 Internet 连接。

NAT技术的作用及其优缺点

NAT 技术不仅能解决 IP 地址不足的问题,还能有效地避免来自外部网络的攻击,隐藏并保护内部网络的计算机。
要真正了解 NAT 技术,必须先了解现在 IP 地址的使用情况。私有 IP 地址是指内部网络或主机的 IP 地址,公有 IP 地址是指 Internet 中全球唯一的 IP 地址。

RFC 1918 为私有网络预留出了如下 3 类 IP 地址:
上述 3 类地址不会在 Internet 中被分配,因此不必向 ISP 或注册中心申请即可在公司或企业内部自由使用。

NAT术语

1) 内部本地地址(Inside Local Address)

内部网络中的设备在内部的 IP 地址,即分配给内部网络中主机的 IP 地址。

这种地址通常来自 RFC 1918 指定的私有地址空间,即内部主机的实际地址。

2) 内部全局地址(Inside Global Address)

内部网络中的设备在外部的 IP 地址,内部全局 IP 地址对外代表一个或多个内部 IP 地址。

这种地址来自全局唯一的地址空间,通常是 ISP 提供的,即内部主机经 NAT 设备转换后去往外部的地址。

3) 外部本地地址(Outside Local Address)

外部网络中的设备在内部的 IP 地址,即在内部网络中看到的外部主机的 IP 地址。

外部本地地址通常来自 RFC 1918 定义的私有地址空间,即外部主机由 NAT 设备转换后的地址。

4) 外部全局地址(Outside Global Address)

外部网络中的设备在外部的 IP 地址,即外部网络中的主机 IP 地址。

外部全局地址通常来自全局可路由的地址空间,即外部主机的真实地址。内部网络与外部网络如下图所示。


图 2 内部网络与外部网络

静态NAT

NAT 的实现方式有 3 种,即静态 NAT、动态 NAT 和端口地址转换。先讲解静态 NAT。

1) 静态NAT的定义

静态 NAT 是指将内部网络的私有 IP 地址转换为公有 IP 地址。其 IP 地址对是一对一且一成不变的,某个私有 IP 地址只能转换为某个公有 IP 地址。

借助静态 NAT,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。

2) 静态NAT的工作过程

静态 NAT 的转换条目需要预先手动配置,建立内部本地地址和内部全局地址的一对一永久对应关系,即将一个内部本地地址和一个内部全局地址进行绑定。

借助静态 NAT,可以隐藏内部服务器的地址信息,提高网络安全性。

例如,当内部主机 PC1 访问外部主机 PC3 的资源时,内部主机静态 NAT 访问过程如下图所示。


图 3 静态 NAT 访问过程

1) 主机 PC1 以私有 IP 地址 192.168.1.10 为源地址向主机 PC3 发送报文,路由器 AR1 在接收到主机 PC1 发来的报文时,检查 NAT 表,若该地址配置有静态 NAT 映射,则进入下一步;若没有配置静态 NAT 映射,则转换不成功。

2) 当路由器 AR1 配置有静态 NAT 映射时,把源地址(192.168.1.10)替换成对应的转换地址(202.199.184.10),经转换后,数据报的源地址变为 202.199.184.10,并转发该报文。

3) 当主机 PC3(200.100.3.10)接收到报文后,将向源地址 202.199.184.10 发送响应报文,静态 NAT 响应过程如下图所示。


图 4 静态NAT响应过程

4) 当路由器 AR1 接收到内部全局地址的报文时,将以内部全局地址 202.199.184.10 为关键字查找 NAT 表,再将报文的目标地址转换成 192.168.1.10,同时转发给主机 PC1。

5) 主机 PC1 接收到响应报文,继续保持会话,直至会话结束。

动态NAT

1) 动态NAT的定义

动态 NAT 是指将内部网络的私有 IP 地址转换为公有 IP 地址时,IP 地址是不确定的,所有被授权访问 Internet 的私有 IP 地址可随机转换为任何指定的合法 IP 地址。

也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址,就可以采用动态 NAT。

动态 NAT 可以使用多个合法外部地址集,当 ISP 提供的合法 IP 地址略少于网络内部的计算机数量时,可以采用动态转换的方式。

静态 NAT 是在路由器上手动配置内部本地地址与内部全局地址一对一地进行转换映射,配置完成后,该全局地址不允许其他主机使用,这在一定程度上造成了 IP 地址资源的浪费。

而动态 NAT 也是将内部本地地址与内部全局地址一对一地进行转换映射,不同的是动态 NAT 是从内部全局地址池中动态选择一个未被使用的地址对内部本地地址进行转换映射。动态地址转换条目是动态创建的,无须预先手动创建。

2) 动态NAT的工作过程

动态 NAT 在路由器中建立一个地址池来放置可用的内部全局地址,当有内部本地地址需要转换时,会查询地址池,取出内部全局地址建立地址映射关系,实现动态 NAT。当转换完成后,释放该映射关系,将这个内部全局地址返回地址池中,以供其他用户使用。

当内部主机 PC1 访问外部主机 PC3 的资源时,内部主机动态 NAT 访问过程如下图所示。


图 5 动态 NAT 访问过程

1) 主机 PC1 以私有 IP 地址 192.168.1.10 为源地址向主机 PC3 发送报文,路由器 AR1 在接收到主机 PC1 发来的报文时,检查 NAT 地址池,发现需要对该报文的源地址进行转换,并从路由器 AR1 的地址池中选择一个未被使用的全局地址 202.199.184.10 用于转换。

2) 路由器 AR1 将内部本地地址 192.168.1.10 转换成对应的地址 202.199.184.10,经转换后,报文的源地址变为 202.199.184.10,转发该报文,并创建一个动态 NAT 表项。

3) 当主机 PC3 收到报文后,使用 200.100.3.10 作为源地址,以内部全局地址 202.199.184.10 作为目标地址来进行应答,动态 NAT 响应过程如下图所示:


图 6 动态 NAT 响应过程

4) 当路由器 AR1 接收到内部全局地址的报文时,将以内部全局地址 202.199.184.10 为关键字查找 NAT 表,再将报文的目标地址转换成 192.168.1.10,同时转发给主机 PC1。

5) 主机 PC1 接收到响应报文,继续保持会话,直至会话结束。

端口地址转换

端口地址转换(Port Address Translation,PAT)是指改变外出报文的源端口并进行端口转换。

PAT 采用端口多路复用方式,使内部网络的所有主机可共享一个合法的外部 IP 地址以实现对 Internet 的访问,从而可以最大限度地节约 IP 地址资源,同时,可隐藏网络内部的所有主机,有效避免来自 Internet 的攻击。因此,目前网络中应用得最多的就是 PAT。

PAT 是动态 NAT 的一种实现形式,PAT 利用不同的端口号将多个内部私有 IP 地址转换为一个外部 IP 地址,达到多台主机访问外网且只用一个 IP 地址的目的。

PAT的工作过程

PAT 和动态 NAT 的区别在于 PAT 只需要一个内部全局地址就可以映射多个内部本地地址,通过端口号来区分不同的主机。

与动态 NAT 一样,PAT 的地址池中也存放了很多内部全局地址,转换时从地址池中获取一个内部全局地址,在转换表中建立内部本地地址及端口号与内部全局地址及端口号的映射关系。

当内部主机 PC1 访问外部主机 PC3 的资源时,内部主机 PAT 访问过程如下图所示。


图 7 PAT访问过程

1) 主机 PC1 以私有 IP 地址 192.168.1.10 为源地址,以 6001 为端口号,向主机 PC3 发送报文,路由器 AR1 在接收到主机 PC1 发来的报文时,检查 NAT 地址池,发现需要对该报文的源地址进行转换,并从路由器 AR1 的地址池中选择一个未被使用的端口号为 4001 的全局地址 202.199.184.10 用于转换。

2) 路由器 AR1 将内部本地地址 192.168.10.10:6001 转换成对应的地址 202.199.184.10:4001,经转换后,报文的源地址变为 202.199.184.10:4001,转发该报文,并创建一个动态 NAT 表项。

3) 当主机 PC3 收到报文后,使用 200.100.3.10 作为源地址且端口号为 8001,并以内部全局地址 202.199.184.10:4001 作为目标地址来进行应答,PAT 响应过程如下图所示。


图 8 PAT响应过程

4) 当路由器 AR1 接收到内部全局地址的报文时,将以内部全局地址 202.199.184.10:4001 为关键字查找 NAT 表,并将报文的目标地址转换成 192.168.1.10:6001,同时转发给主机 PC1。

5) 主机 PC1 接收到响应报文,继续保持会话,直至会话结束。

相关文章