1.6 网络地址转换
Cisco IPv6网络实现技术(修订版)
自1992年以来,CIDR并不是唯一的直接与缓解IPv4地址短缺相关的机制。多年来,被视为短期解决方案的NAT机制(在RFC 1631中定义)在允许组织机构在大型网络中使用少量Internet全球唯一单播IP地址方面扮演着重要角色。NAT通常从一个网络转换数据包到Internet,这个网络使用全球唯一单播IP地址或使用一个在RFC 1918中定义的私有地址空间。
注:IANA预留了3块IP地址用于私有编址。地址空间10.0.0.0/8、172.16.0.0/12和192.168.0.0/16被用来与Internet进行地址转换。
图1-4显示了使用私有编址的网络。10.0.0.0/8和192.168.0.0/16通过同一个使用NAT的ISP连接到Internet。因为私有地址不能在Internet上路由,所以这些私有网络上的节点不能从Internet上访问。
自 1990年以来,CIDR、NAT和私有编址的组合已经为减缓IPv4地址的耗尽提供了帮助。
而且,反对发展IPv6的其中一个论据就是NAT的使用。这被一些人视为IPv4地址空间短缺的永久解决方案。然而,使用NAT有许多潜在的弊端,这些在IPv6工程中得到了考虑。其中一些限制被记录在RFC 2775和RFC 2993中。
NAT破坏了 IP 的端到端模型——IP 最初被设计为只有端点(主机和服务器)才处理连接。作为低层的网络和NAT不必处理连接。
保持连接状态的需求——NAT 隐含要求网络(NAT 转换器)保持连接的状态,NAT必须记住转换的地址和端口。
NAT保持连接状态的要求使得当NAT设备出现故障或NAT邻近的链路出现故障时,难以快速重路由。使用链路和路由冗余的网络会遇到问题。
组织机构部署高速链路(吉比特以太网、10G 以太网)提高其网络骨干的性能。然而地址转换需要额外的处理,因为每条连接的状态必须和NAT一起保持。因此,NAT影响了网络的性能。
对出于安全原因需要记录其最终用户的所有连接的提供商和组织来说,记录NAT状态表是追溯问题根源所必需的。
阻止了端到端的网络安全——为了通过一些加密方法保护IP包头的完整性,包头不能在从源点到最终目的地之间被改变。源点保护包头的完整性,最终目的地检查收到数据包的完整性。
任何在路途中对包头部分的转换都会破坏完整性检查。虽然许多改进能在某些情况下部分地解决这个问题,但根本问题难以解决。IPSec认证包头(AH)是这个问题的一个例子。
在图1-5中,具有IPSec实现的计算机A(1)用协议号51(IPSec认证包头)发送IP数据包到计算机B。在转发数据包(2)到网络206.123.31.0/24之前,NAT 改变包头中的IP源地址,从10.0.0.10到206.123.31.1。然而,在计算机B中的IPSec实现检查完整性时失败,因为在传输过程中包头中的一些东西被修改了。
NAT不友好的应用——不仅仅端口和地址在通过NAT设备转发时需要映射。NAT必须内置关于所有应用的所有知识才能做好这件事。这在用聚集端口动态分配端口、在应用协议中嵌入IP地址、安全关联等情况下尤其重要。结果是每当一个新的NAT不友好的应用被开发出来,NAT就需要升级一次。
地址空间冲突——当使用相同私有地址空间的不同网络和组织要合并或互联时,将导致地址空间的冲突:不同的主机/服务器可能有相同的地址,路由选择不能到达另外的网络。但是这可以通过一些技术来解决,例如重新编址或二次NAT。然而,这些技术不仅痛苦而且耗费金钱,以后还会增加NAT的复杂程度。
内部IP地址和可达IP地址的比例——当在内部有大量的主机和服务器,在外部有很少的可达地址时,NAT是有效率的。内部IP地址和可达IP地址的比例必须很大,NAT才有效率。
然而,在NAT背后的许多服务器必须从Internet可达,这是一个问题。相同的协议不能使用NAT外部地址复用在相同的端口上,例如在网络地址端口转换(NAPT)模式中。NAPT允许使用TCP和UDP端口作为标记的转换机制共享一个IP地址。例如,两个万维网服务器位于NAT之后,都用TCP 80端口,不能使用相同的外部IP地址,除非改变端口号。因为许多协议把节点作为服务器,这占用了很多外部地址。结果NAT就不那么有用了。
IP的最初设计是基于端到端模型的。这个模型导致了数千个Internet标准的设计,这些标准具有对Internet有益的可预测的行为。但是作为临时解决方案的NAT破坏了这种端到端模型。NAT是一个短期延长IPv4生命的补丁。IPv6是保持端到端模型和IP协议透明度的长期解决方案。