NAT 基础知识
1 NAT 产生背景
互联网中主要依靠IP进行寻址,IPv4地址使用32个比特位进行标记,一般使用点分十进制形式书写。有类IP分类如表1-1所示:
表 1-1 有类IP分类
网络类型
|
特征地址位
|
起始地址
|
结束地址
|
默认子网掩码
|
---|---|---|---|---|
A | 0 | 1.0.0.0 | 126.255.255.255 | 255.0.0.0 |
B | 10 | 128.0.0.0 | 191.255.255.255 | 255.255.0.0 |
C | 110 | 192.0.0.0 | 233.255.255.255 | 255.255.255.0 |
D | 1110 | 224.0.0.0 | 239.255.255.255 | ---- |
E | 1111 | 240.0.0.0 | 255.255.255.255 | ---- |
注:a 由于历史原因0.0.0.0被保留
b 127.0.0.0 - 127.255.255.255 被用作特殊用途,如127.0.0.1 用于本地回环地址lo
互联网中的IP地址分配以及TCP/UDP公共服务端口号有专门的机构进行统筹和分配——IANA(Internet Assigned Numbers Authority)。
在互联网初期,IP地址分配策略使得IP地址浪费严重,因此当互联网以超乎想象的速度发展,终端接入网络的速度爆炸式增长时,IPv4地址资源很快便被耗尽。2011年2月3日,IANA对外宣布,IPv4地址空间最后5个地址块被分配完;童年4月15日,亚太区委员会宣布,除了个别保留地址外,本区域所有的IPv4地址基本被耗尽。
不过,早期网络通信协议和标准的组织已经意识到了IPv4地址马上被耗尽的危机,因此制定了长期措施和短期措施。长期措施:制定下一代互联网协议IPv6(Internet Protocol Version 6);短期措施:NAT(Network Address Translation, 网络地址转换)和CIDR(Classless Inter-Domain Routing, 无类别域间路由)。
NAT的功能是:将一个IP地址转换为另一个IP地址。通常一个局域网由于申请不到足够的IP地址,或者为了编址方便,在局域网内部采用私有IP地址为设备编址,当设备访问外部网络时,再通过NAT将私有地址翻译成合法的共有地址,如图1-1所示。
图1-1 NAT示意图
公网IP地址可以在Internet上使用,且全球唯一,而私有IP地址则是用来在局域网中使用。私有地址范围如表1-2所示。
表1-2 私有地址范围
IP地址范围
|
网络类型
|
网络个数
|
---|---|---|
10.0.0.0 ~ 10.255.255.255 | A | 1 |
172.16.0.0 ~ 172.31.255.255 | B | 16 |
192.168.0.0 ~ 192.168.255.255 | C | 256 |
2 NAT 模型
2.1 静态NAT
手动设置全局IP地址和私有IP地址之间的映射关系,是一一映射,如图2-1所示。
图2-1 静态NAT
该模型一般用于:没有IP资源紧缺的情况。
2.2 动态NAT
NAT设备维护一个公网IP地址池,内网设备访问外网时,会从IP地址池内部找到一个空闲公网IP地址进行映射,是一(多)对多映射,如图2-2所示。
图2-2 动态NAT
该模型一般用于:可用IP稍微少于需求IP的情况。
2.3 PAT(复用NAT池)
当可用IP大量少于需求IP数量时,动态NAT模型中的NAT池中的地址耗尽,会导致部分内网设备无法访问网络。复用NAT池解决了上述问题,其通过端口对NAT池中的公网IP地址进行复用。理论上,一个IP地址可以映射约65000个回话,但实际路由器只支持几千个会话。
按照端口转换工作方式不同,又可以进一步对模型进行划分,具体取决于外部主机是如何通过映射公共地址和端口来发送分组的,NAT实现可以分为四类:完全圆锥型(full cone), 受限圆锥型(restricted cone), 端口受限圆锥型(port restricted cone)和对称型(symmetric),其中完全圆锥形是市场上最常见的实现。
2.3.1 完全圆锥型
一旦内部主机端口对(iAddr:iPort)被NAT网关映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);任何一个外部主机发送到(eAddr:ePort)的报文将会被转换后发到(iAddr:iPort)。也就是说,NAT服务器将不检验进入分组的源IP和Port,如图2-3所示。
图2-3 完全圆锥型
2.3.2 受限圆锥型
一旦内部主机端口对(iAddr:iPort)被映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);只有(iAddr:iPort)向特定的外部主机hAddr发送过数据,主机hAddr从任意端口发送到(eAddr:ePort)的报文将会被转发到(iAddr:iPort)。也就是说,NAT服务器只检查源IP,如图2-4所示。
图2-4 受限圆锥型
2.3.3 端口受限圆锥型
一旦内部主机端口对(iAddr:iPort)被映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);只有(iAddr:iPort)向特定的外部主机端口对(hAddr:hPort)发送过数据,由 (hAddr:hPort)发送到(eAddr:ePort)的报文将会被转发到(iAddr:iPort)。也就是说,NAT服务器会检查源IP和Port,如图2-5所示。
图2-5端口受限圆锥型
2.3.4 对称型
NAT网关会把内部主机“地址端口对”和外部主机“地址端口对”完全相同的报文看作一个连接,在网关上创建一个公网“地址端口对”映射进行转换,只有收到报文的外部主机从对应的端口对发送回应的报文,才能被转换。即使内部主机使用之前用过的地址端口对去连接不同外部主机(或端口)时,NAT网关也会建立新的映射关系,如2-6所示。
图2-6对称型
3 NAT 支持的设备
3.1 路由器
a 例如家中上网用的路由器。家中路由器一般会提供DHCP服务,一般分配给上网设备的是私有地址,例如我家中上网给我分配的ip地址如图2-7所示,而接入Internet的地址则是ISP(Internet Service Provider,网络服务提供商)分配给我们的,仅一个公网地址(由于无法连接路由,因此无法抓包展示NAT转换后的IP)。使用家用路由器组建的网络拓扑图如图2-8所示。
图2-7 家中分配的局域网私有IP示例
图2-8 家庭组件的私有网接入公有网示意图
(图中家用路由器使用了交换机图标示意,是因为家用路由器并非工业用路由器,功能简单,因此使用交换机图标表示更贴切)
b 除此之外,NAT也可以对流量进行负载均衡。如果一个服务器的访问量非常大,通常会通过建立多台映像服务器对访问进行分流。从外部看,这些服务器的IP地址相同,NAT设备会把多个服务器的访问映射到不同的服务器上,实现负载均衡。负载均衡与其他NAT的主要区别是,他将来自外网的统一合法IP翻译成不同的内网IP,如图2-9所示。
图2-9 流量负载均衡
3.2 防火墙
3.3 代理服务器:一般用于提供局域网接入功能。
4 NAT简单仿真(NAT池模型)
众所周知,常见的PING命令使用的是ICMP包发送的数据,接下来将公司私有网络与公网网络简化,简化后的拓扑图如图4-1。
图4-1 公司私网与公网简化后的网络拓扑图
配置如下:
PC0: 192.168.1.1/24
PC1: 192.168.1.2/24
R2: f0/0 192.168.1.254/24 f0/1 202.96.1.1/24
NAT pool: 202.96.1.3/24 – 202.96.1.3/24
access-list: permit 192.168.1.0
R4: f0/1 202.96.1.2/24 lo 2.2.2.2/24
模拟实验:
PC0: ping 2.2.2.2
抓包结果(IP包 ICMP包):
R2:
4 |
IHL |
DSCP:0x0 |
TL |
||
ID:0X0 |
0x0 |
FRAG OFFSET:0x0 |
|||
TTL:255 |
PRO:0x1 |
CHKSUM |
|||
SRC IP:192.168.1.1 |
|||||
DST IP:202.96.1.2 |
|||||
OPT:0x0 |
0x0 |
||||
DATA |
TYPE:0x8 |
CODE:0x0 |
CHECKSUM |
ID: |
SEQ NUMBER:34 |
4 |
IHL |
DSCP:0x0 |
TL |
||
ID:0X0 |
0x0 |
FRAG OFFSET:0x0 |
|||
TTL:254 |
PRO:0X1 |
CHKSUM |
|||
SRC IP:202.96.1.3 |
|||||
DST IP:202.96.1.2 |
|||||
OPT:0x0 |
0x0 |
||||
DATA |
TYPE:0x8 |
CODE:0x0 |
CHECKSUM |
ID: |
SEQ NUMBER:34 |
R4:
4 |
IHL |
DSCP:0x0 |
TL |
||
ID:0X0 |
0x0 |
FRAG OFFSET:0x0 |
|||
TTL:254 |
PRO:0X1 |
CHKSUM |
|||
SRC IP:202.96.1.3 |
|||||
DST IP:202.96.1.2 |
|||||
OPT:0x0 |
0x0 |
||||
DATA |
TYPE:0x8 |
CODE:0x0 |
CHECKSUM |
ID: |
SEQ NUMBER:34 |
4 |
IHL |
DSCP:0x0 |
TL |
||
ID:0X0 |
0x0 |
FRAG OFFSET:0x0 |
|||
TTL:255 |
PRO:0X1 |
CHKSUM |
|||
SRC IP:202.96.1.2 |
|||||
DST IP:202.96.1.3 |
|||||
OPT:0x0 |
0x0 |
||||
DATA |
TYPE:0x0 |
CODE:0x0 |
CHECKSUM |
ID: |
SEQ NUMBER:34 |
R2:
4 |
IHL |
DSCP:0x0 |
TL |
||
ID:0X0 |
0x0 |
FRAG OFFSET:0x0 |
|||
TTL:255 |
PRO:0X1 |
CHKSUM |
|||
SRC IP:202.96.1.2 |
|||||
DST IP:202.96.1.3 |
|||||
OPT:0x0 |
0x0 |
||||
DATA |
TYPE:0x0 |
CODE:0x0 |
CHECKSUM |
ID: |
SEQ NUMBER:34 |
4 |
IHL |
DSCP:0x0 |
TL |
||
ID:0X0 |
0x0 |
FRAG OFFSET:0x0 |
|||
TTL:254 |
PRO:0X1 |
CHKSUM |
|||
SRC IP:202.96.1.2 |
|||||
DST IP:192.168.1.1 |
|||||
OPT:0x0 |
0x0 |
||||
DATA |
TYPE:0x0 |
CODE:0x0 |
CHECKSUM |
ID: |
SEQ NUMBER:34 |
5 NAT 带来的问题
NAT带来便利的同时也破坏了网络传输的平等性,下面罗列了常见的问题。
4.1 会话意外中断
NAT使IP会话的保持时效变短。因为一个会话建立后会在NAT设备上建立一个关联表,在会话静默的这段时间,NAT网关会进行老化操作。这是任何一个NAT网关必须做的事情,因为IP和端口资源有限,通信的需求无限,所以必须在会话结束后回收资源。因为网关回收相关转换表资源以后,新的数据到达时就找不到相关的转换信息,必须建立新的连接。当这个新数据是由公网侧向私网侧发送时,就会发生无法触发新连接建立,也不能通知到私网侧的主机去重建连接的情况。这时候通信就会中断,不能自动恢复。即使新数据是从私网侧发向公网侧,因为重建的会话表往往使用不同于之前的公网IP和端口地址,公网侧主机也无法对应到之前的通信上,导致用户可感知的连接中断。NAT网关要把回收空闲连接的时间设置到不发生持续的资源流失,又维持大部分连接不被意外中断,是一件比较有难度的事情。
目前一般应用应用层会设置保活机制来解决。
4.2 IP追踪机制失效
NAT在实现上将多个内部主机发出的连接复用到一个IP上,这就使依赖IP进行主机跟踪的机制都失效了。如网络管理中需要的基于网络流量分析的应用无法跟踪到终端用户与流量的具体行为的关系。基于用户行为的日志分析也变得困难,因为一个IP被很多用户共享,如果存在恶意的用户行为,很难定位到发起连接的那个主机。
有些服务器设置有连接限制,同一时刻只接纳来自一个IP的有限访问(有时是仅一个访问),这会造成不同用户之间的服务抢占和排队。有时服务器端这样做是出于DOS攻击防护的考虑,因为一个用户正常情况下不应该建立大量的连接请求,过度使用服务资源被理解为攻击行为。但是这在NAT存在时不能简单按照连接数判断。
4.3 同一应用多会话失败
当一个应用需要保持多个双向连接时,麻烦就很大。NAT不能理解多个会话之间的关联性,无法保证转换符合应用需要的规则。当NAT网关拥有多个公有IP地址时,一组关联会话可能被分配到不同的公网地址,这通常是服务器端无法接受的。更为严重的是,当公网侧的主机要主动向私网侧发送数据时,NAT网关没有转换这个连接需要的关联表,这个数据包无法到达私网侧的主机。这些反方向发送数据的连接总有应用协议的约定或在初始建立的会话中进行过协商。但是因为NAT工作在网络层和传输层,无法理解应用层协议的行为,对这些信息是无知的。
4.4 IP分片传输失败
4.5 ICMP包的映射
6 NAT的未来
在IPv4时代,NAT技术延缓了IPv4地址的耗尽,成功应对了网络终端爆炸性发展所带来的问题。
而IPv6必将在不远的未来取代IPv4,现阶段正直IPv4向IPv6过渡阶段。该阶段,在NAT技术基础上发展起来的NAT-PT技术也会作跨网访问不可或缺的网络技术。
即便是在不必担心IP地址耗尽的IPv6时代,NAT技术作为屏蔽内部网络、增加内网安全的重要技术也必将继续作为网络重要的技术之一存在下去。